「DeNA.go #1」に参加してきた!
はじめに
今回は、「DeNA.go #1」に参加してきました♪
Youtube Liveでもライブ中継するらしい。
本日 #DeNAgo を開催します!
— DeNA Tech (@DeNAxTech) 2019年5月24日
参加者の皆さま、会場にてどうぞよろしくお願いします!
また、#DeNAgo に興味を持っていただいている皆さま、Youtube Live でのライブ中継を用意しました。
以下のURLから視聴いただけますので、本日19:25からどうぞよろしくお願いします。https://t.co/arR13dZTjk
ハッシュタグ
#DeNAgo
タイムテーブル
時間 | 内容 |
---|---|
19:00 - | 開場 |
19:25 - 19:30 | 会場説明 @imoty |
19:30 - 19:50 | 20分枠(1) @subc / 次世代タクシー配車サービス「MOV」における RailsからGo移行対応、ポーリングWebAPIのgRPC対応 |
19:50 - 20:10 | 20分枠(2) yu.kawaura / BAYSTARS におけるGoを用いたシステムリプレイス事例の紹介 |
20:10 - 20:30 | 20分枠(3) @dice_zu / Goを使いこなせる組織作りの取り組み |
20:30 - 21:30 | 懇親会 |
21:30 - | 完全撤収 |
始まる前に...
昨日の夜、PCを充電せずに寝てしまってバッテリが30%しかないという危機的状況だったので、
渋谷ヒカリエのB1Fにあるスタバでコーヒーを買って充電しました。
立ちテーブルだけど、まず充電できてよかった(TT)
DeNaさんからお弁当が!!
お弁当がある勉強会は初めてだ!
— FUMI@Python&Go&Rust (@FumiProgrammer) 2019年5月24日
DeNaさんありがとうございます🙇♂️#DeNago pic.twitter.com/7bhNyVguYM
DeNaでのGo活用実績
DeNA結構Go率高いのな #DeNAgo pic.twitter.com/cvulCGYRsV
— Shoko@6/1信州I/O報告会 (@_okohs) 2019年5月24日
セッション
次世代タクシー配車サービス「MOV」における RailsからGo移行対応、ポーリングWebAPIのgRPC対応
登壇者
subcさんのプロフィール(主催イベント一覧) - connpass
スライド
内容
登壇者について
登壇者はスクリプト言語をメインに使っていた人。Go歴は1年。
Goの利用
MOVはもともとRubyで開発していたが、Goに移行した。
Goに移行して良かったところは次の通り。
- 圧倒的なサーバスピンアップ速度
- メモリ効率の良さ
『どうやってRubyからGoに移行したか』は下記のtech blogに記載している
社内向け管理画面
以下の構成
Vue.js + Express(GAE/SE Node.js) + GAE/SE Go
テスト
テーブルテストドリブンで、 GAEのテスト高速化には以下のパッケージを使った。
APIドキュメント作成
APIドキュメントは以下のツールを使った。
結合テスト
Slackから結合テストは行った。
負荷・障害に強いシステム現実に向けてしたこと
- exponential backoff
- 負荷検証の敷居を低く
- fallback実装
Go Con Fukuokaで話すぜ!
BAYSTARS におけるGoを用いたシステムリプレイス事例の紹介
登壇者
imotyさんのプロフィール(発表イベント一覧) - connpass
スライド
内容
ベイスターズシステムリプレイスの話だ。 #DeNAgo
— いっちー (@tdall5c) 2019年5月24日
野球のファンクラブページをDeNAがリプレースするのアツいよなぁ #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
既存システムの課題。アカウント体系が複雑、セキュリティ基準を満たさない、拡張性が低下。これらを解決し責務を分割、キャッチアップコストが低くなるよう極力シンプルな構成に #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
プロ野球のオフシーズンに開発www #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
開発期間。プロ野球オフシーズンに開発しオープン戦前のリリースを想定。段階的に外部連携をリリースしつつ並行開発した #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
球場端末とかからも接続する先にGoのシステムあるんだね! #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
今回作ったのはBAYSTARS IDとBAYSTARS API #DeNAgo
— 178inaba (@178inaba_) 2019年5月24日
責務/ドメインに沿った分割って基本にならってて良いなぁ #DeNAgo
— abemotion (@abemotion) 2019年5月24日
個人情報生で含むクエリパラメータ怖いなw #denago
— Shoko@6/1信州I/O報告会 (@_okohs) 2019年5月24日
一部のシステムでPATCHメソッド使えないのでHTTP-Method-Override使いました #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
システム間SSOのためにOpenID Connect / OAuth2を採用。APIインターフェースとしては開発会社が多いので実装がシンプルになるようRESTで。PATCHメソッドが使えなくてHTTP-Method-Overrideを利用 #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
開発時点で対応してるOpenAPI3がないので手動。。お疲れ様です。。 #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
APIインターフェース共有にはOpenAPI3で。Swagger2とJSON Schemaを検討したが、制約の表現やドキュメント生成ツールが物足りなかったりReDocを採用。今回は先にインターフェースが欲しかったのでコードから生成はしなかった #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
Redochttps://t.co/1ypTadINTb
— 手塚竜太 Ryuta Tezuka (@Tzone99) 2019年5月24日
#DeNAgo
開発言語の検討。実績・メンテナンス性・採用面でバランスのよかったGoを採用。言語仕様がシンプルだし他の人材もあてにできた #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
社内でGoの知見者が多いってのが良いなあ。そしてその数を把握できるところも。 #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
開発環境はDocker Compose, Realize(テストランナーやホットリロード), Glide, 開発用タスクはMakefileで管理。利用ライブラリはそんなに多くないが、独自ライブラリをいくつか作っている #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
ログは1リクエスト1行がよい #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
"BAYSTARSにおけるGoを用いたシステムリプレイス事例の紹介"
— tweeeety (@_tweeeety_) 2019年5月24日
独自ライブラリ
・Logger
1リクエスト1行に集約したかった
・SecureString
個人情報や秘匿情報をアプリ内で扱う独自型#DeNAgo
なるほど、ロギングの時に個人情報が極力載らないように独自ライブラリでハンドリングしてるんだ。。 #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
"BAYSTARSにおけるGoを用いたシステムリプレイス事例の紹介"
— tweeeety (@_tweeeety_) 2019年5月24日
Fargate
・インフラレイヤの管理が不要
・スケーリングの管理が容易#DeNAgo
アプリケーションはDocker/Fargateで実行。構成管理にはCluster/Service/TaskDefinitionをCloudFormationで定義していて、デプロイ時には固定タグにイメージをアップロードしてECSサービス更新で #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
課題と今後。リプレイス時問い合わせが多かったので開発会社向けドキュメントを拡充したい、OpenAPI3定義からコード生成したい、CI/CDやE2Eしたい #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
CI/CD は今後の展望なのか。
— 選ばれし不良物件 ?: 🦆 (@duck8823) 2019年5月24日
開発スピード上げるために初期段階で入れたいよなー。
#DeNAgo
Goプロダクトのリリース後安定感は異常 #DeNAgo
— abemotion (@abemotion) 2019年5月24日
Goを使いこなせる組織作りの取り組み
登壇者
dice_zuさんのプロフィール(発表イベント一覧) - connpass
今日の #DeNAgo で「Goを使いこなせる組織作りの取り組み」について話しますhttps://t.co/cq2FfkAaJt
— daisuzu (@dice_zu) 2019年5月24日
スライド
内容
Go言語委員会! #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
組織の取り組みとしてガイドラインを作った。スタートラインを揃える目的。Go本体の入れ方やCloud SDKセットアップなど環境構築を標準化 #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
学習コンテンツの整理いいですね #denago
— yoshd (@yoshd_) 2019年5月24日
Go組織の作り方
— nari@エンタメ系エンジニア (@fukubaka0825) 2019年5月24日
- DeNAさんは公式ドキュメントを読んだ後、社内のCodelabsが整備されている
#DeNAgo
Code Review Commentsもおすすめ https://t.co/gk6WmkDWR8 #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
学習コンテンツとして公式ドキュメントのほか、Codelabsや社内ドキュメントを用意。社内独自のCodelabsとしてApp Engine+Goでマイクロサービスを作る課題を用意 #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
構造体のタグを整形しよう やってみよう。| golangtokyoのcodelab https://t.co/kTjvPrBuRl #DeNAgo
— たか (@happylifetaka) 2019年5月24日
Goの標準に従うこと!他の言語とか知らないよ、って感じ。良い方法は取り入れたいけどさ、標準には従おうね、って話。 #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
社内のスタイルガイド。あまり細かい規定はなく、Goの標準に従うことを強調したりツールによるチェックを必須/推奨。スタイルガイド公開したりしないのかなー #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
go vetは最近のバージョンだとテストすれば勝手に実行される=当然テストしてるから通るよねって感じかな? #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
err.Error()を条件分岐に使わない #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
エラーハンドリングについてはパターンを紹介。https://t.co/zkkAkyWuWp あとはエラーを分岐に使わない、同じエラーを出力しない #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
エラーハンドリングはこのブログも面白かった #DeNAgohttps://t.co/IZKXZGYbVb
— abemotion (@abemotion) 2019年5月24日
「引数の構造体で迷ったらポインタにしておく。フィールドが増えたときに値コピーよりパフォーマンス的に有利なのと、後から改修が楽だから」ちなみに自分は immutability を重視したいので、むしろ「迷ったら値渡し」に倒すようにしてる。#denago
— チェシャ猫 (@y_taka_23) 2019年5月24日
テストもパターンの紹介。外部に接続するにあたって設定・クライアント・処理を切り替える3パターン #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
業務時間の2割くらいをGo委員会に使ってる#DeNAgo
— tockn (@Tockn_inthebox) 2019年5月24日
Go Fridayだ!! #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
言語としてただでさえ堅牢なのに「Go言語委員会」のパワーワード感...! #denago
— abemotion (@abemotion) 2019年5月24日
言語としてただでさえ堅牢なのに「Go言語委員会」のパワーワード感...! #denago
— abemotion (@abemotion) 2019年5月24日
どんどんGoへのアウトプットを増やしていくらしい。楽しみ!!#DeNAgo
— tockn (@Tockn_inthebox) 2019年5月24日
DeNAさん絶対にノウハウたくさんあるはず。このスライドとか何回も読んだもん #DeNAgohttps://t.co/nktnFk8hii
— abemotion (@abemotion) 2019年5月24日
「goenv は裏側の仕組みがわかりづらいのと、バージョン切り替えでオペミスが不安なので導入してない」#denago
— チェシャ猫 (@y_taka_23) 2019年5月24日