Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

自社のメインプロダクトにGoを導入したぞ++

2,323 views

Published on

golang.tokyo #14 でLT発表した資料です。 #golangtokyo

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

自社のメインプロダクトにGoを導入したぞ++

  1. 1. 自社のメインプロダクトに Goを導入したぞ++ 2018-04-16 @kurikazu golang.tokyo #14 https://blogs.yahoo.co.jp/rokuken06/GALLERY/show_image.html?id=39909503&no=0
  2. 2. こんばんは!
  3. 3. プロダクトに 新規goアプリを投入できたので 報告に来ました!
  4. 4. ここ!
  5. 5. 目的 通信コスト削減 処理速度向上 iOS, Android 共通処理の取り込み
  6. 6. サーバ環境 • オンプレミス • LBがリクエストを複数サーバに振り分け
  7. 7. 今日の話 プロダクト投入までの Step by Step
  8. 8. go導入 時系列 2017初頭 某プロダクトのデータ連携バッチを goで実装(弊社go文明の起こり) 2017中旬 某プロダクトが自社都合により(略 2017/秋 思いを受け継ぐ者たちにより go文明を復興 2018/1 アプリ向けGatewayAPIリリース 2018/3 プロモーション向けAPIリリース goプロダクトの広がり→イマココ
  9. 9. 課題1. みんなgo初心者
  10. 10. 1. みんなgo初心者 • Tour of goからはじめる
  11. 11. フレームワーク使った方がいい?
  12. 12. フレームワーク使った方がいい? • Gin • Echo • goa ・ ・ ・
  13. 13. フレームワーク使った方がいい? • Gin • Echo • goa ・ ・ ・ 想定される処理で プロトタイプを作ってみた → あまり大きな差は無い
  14. 14. フレームワーク使った方がいい? • 「API作るなら goa がいいよ」 • 「DSLでAPI仕様を定義できるよ」 • 「コマンド一発でコード生成できて Swagger.jsonも吐いてくれるよ」
  15. 15. やってみた
  16. 16. . ├── app │ ├── contexts.go │ ├── controllers.go │ ├── hrefs.go │ ├── media_types.go │ ├── test │ │ └── bottle_testing.go │ └── user_types.go ├── bottle.go ├── client │ ├── bottle.go │ ├── client.go │ ├── media_types.go │ └── user_types.go ├── design │ └── design.go ├── main.go ├── swagger │ ├── swagger.json │ └── swagger.yaml └── tool ├── cellar-cli 自動的に コードが 出力される
  17. 17. . ├── app │ ├── contexts.go │ ├── controllers.go │ ├── hrefs.go │ ├── media_types.go │ ├── test │ │ └── bottle_testing.go │ └── user_types.go ├── bottle.go ├── client │ ├── bottle.go │ ├── client.go │ ├── media_types.go │ └── user_types.go ├── design │ └── design.go ├── main.go ├── swagger │ ├── swagger.json │ └── swagger.yaml └── tool ├── cellar-cli なるほどわからん 理解が浅いときにコードが自動出力される 状況はちょっと辛い
  18. 18. フレームワークは使わない 1つずつ理解しながら進もう
  19. 19. 課題2. “正しい”書き方がわからない
  20. 20. “正しい”書き方がわからない • ググりながら見よう見まねで • 「動けばいい」的になってないか不安
  21. 21. “正しい”書き方がわからない • ググりながら見よう見まねで • 「動けばいい」的になってないか不安 みんなでコードを書く みんなでレビューしあう ↓ レベル感を合わせながら進む
  22. 22. 作っていくうちに いいやり方を学んでいく ↓ 随時リファクタリンク
  23. 23. 作っていくうちに いいやり方を学んでいく ↓ 随時リファクタリンク テストコード大事!!! 書きながら進めててよかった。
  24. 24. 課題3. “リリースして終わり”じゃない
  25. 25. “リリースして終わり”じゃない • プロダクトのスピードに合わせて コードも進化させていく必要がある • 定型作業は自動化しておきたい • 導入するなら最初が肝心
  26. 26. がんばった
  27. 27. がんばった 仕様書 (Markdown) コード デプロイ 静的解析・テスト ビルド Swagger.json IF定義共有 スタブ 本番環境へ
  28. 28. バイナリビルドどこでやろう?
  29. 29. バイナリビルドどこでやろう? • 開発? • ステージング? • 本番?
  30. 30. バイナリビルドどこでやろう? • 開発? • ステージング? • 本番? CIサーバ(drone.io)でビルド Jenkinsで本番へデプロイしてる
  31. 31. 課題4. リリース時にバイナリの 再起動が必要
  32. 32. リリース時にGoバイナリ再起動が必要 • 瞬断させずにやりたい・・
  33. 33. リリース時にGoバイナリ再起動が必要 • 瞬断させずにやりたい・・ よくわからなかった… ↓ LBから1台ずつ切り離してリリース
  34. 34. • 本格開発開始11月⇒1月にリリース • (今のところ)画面表示速度10%アップ いろいろありつつ
  35. 35. • 本格開始11月⇒1月にリリース • (今のところ)画面表示速度10%アップ いろいろありつつ ネイティブアプリ側も リファクタすればもっと高速に ↓ アプリ開発者と連携して進めてる
  36. 36. • これ以外にも新規開発が発生しているが go で書くものを増やしてる • 移管もどんどん進めていくつもり いろいろありつつ
  37. 37. 自己紹介 • @kurikazu • ディップ株式会社 • プロダクトマネージャと エンジニア採用まわりの あれこれ担当 • iOSとLaravel界隈に います
  38. 38. https://blogs.yahoo.co.jp/rokuken06/GALLERY/show_image.html?id=39909503&no=0 これからもgoやっていくぞ!

×