概要
- 2022年7月1日に開催されたQiita Night〜これだけは伝えたい!Goのすごさとその将来性〜のイベントレポート
- Qiita社の中の人ですが、当日は主に視聴者として参加したので、LT及びトークセッションの視聴レポートをまとめてみました
コンテンツ
- LT
- 弊社でのGoの取り組み〜どう広げたか、その後の人員戦略〜」/ @bikun_bikun
- スケールするGo / @tenntenn
- Googleソフトウェアエンジニアリングに沿った開発をするためのGoの利便性 / @po3rin
- トークセッション / @tenntenn , @po3rin
- Goはどんな風に使える?ここが便利!
- Goを使う仲間をもっと増やしたい!Goの魅力と将来性
LT
弊社でのGoの取り組み〜どう広げたか、その後の人員戦略〜」
- スピーカー:@bikun_bikun
- 所属:ディップ株式会社(2018/05〜)
- Go歴:
- ディップ社入社後から触り始めた
- Go製のプロダクトのチームビルディングやリード
メモ
- ディップ社のGoの広がり
- 当時の振り返り
- みんな初心者
- OSSのコード読んだり、勉強会に参加し知見をためていった
- Goに明るい方の参画でチームナレッジがたまった
- つまづきそうな部分を抜き出し、チュートリアルを作り、新メンバーに解いてもらうようにし、ソフトランディングしやすくした
- ”正しい”書き方がわからない
- OSSのコードを読んでブラッシュアップ
- 良いところを取り入れながら自分たちのスタイルを作っていく
- 1からは辛い、ディレクトリ構成などは「golang-standards/project-layout」に寄せる対応など
- リリースして終わりじゃない
- 制約下でCI/CDを組んで解決
- オンプレ中心からAWS中心になってきたため、Jenkinsやdrone.ioからCodeBuild、CodePipeline、CodeDeployなどで自動化加速
- 制約下でCI/CDを組んで解決
- リリース時にバイナリ再起動が必要
- オンプレ環境だったので、1台ずつLB outして対応
- コンテナベースの仕組み利用っで課題はなくなってきた
- オンプレ環境だったので、1台ずつLB outして対応
- みんな初心者
- 時系列
- 2017初めにデータ連携バッチをGoで実装したのがディップ社のGo文明の始まり
- 2018アプリ向けGatewayAPIリリース、プロモーション向けAPIリリース、Goプロダクトの広がり
- 2018下旬スマートフォンアプリで認証機能サービスをGoで実装
- 2019サブシステム周りでGoの利用が活発化
- 2021新規プロダクトのコア部分にGoを採用
- 当時の振り返り
- 人員戦略
- Goの採用が広がるにつれ、既存メンバーだけでは新規開発、運用が回らなくなってきた
- 案①社内異動
- 他チームでもやることがたくさんあり、非現実的
- 案②採用
- 正攻法だがすぐにどうかなるものでもない
- 案③パートナーさんに頼る
- Goできる人自体少ないので、一緒にGoやりたい、学びたいという人にも来てもらい一緒に高まった
- パートナーさん含めみんなで高まる意識が増え、いい意識づくりもできたし、採用にもつながった
- Goできる人自体少ないので、一緒にGoやりたい、学びたいという人にも来てもらい一緒に高まった
- 案①社内異動
- Goの採用が広がるにつれ、既存メンバーだけでは新規開発、運用が回らなくなってきた
- Goの魅力
- 標準で用意されているツール群
- Formatter、テスト、パッケージ管理などが標準で用意されている
- gofmt、goimportsはバラバラになりがちなものを統一してくれる
- シンプルな言語(not Easy)
- 触り始めでも理解しやすく書きやすい
- throw-catchがないので基本的には上から読んでいける
- 例外でジャンプではなく都度エラー処理を行う
- 並行処理の書きやすさ
- シンプルな並行処理は書きやすい
- 途中からでも特定の箇所を並行処理に直す、みたいなことのしやすさ
- ワンバイナリ
- ポータブル性
- ビルドのおかげで事前にバグがわかるケースがある
- Goユーザーの愛情深さ
- Tour of Goを始めとしたチュートリアルの日本語資料の充実
- Gopher道場のみなさまに大感謝
- Tour of Goを始めとしたチュートリアルの日本語資料の充実
- 標準で用意されているツール群
スケールするGo
- スピーカー:@tenntenn
- 所属:株式会社メルペイ
- Google Developer Expert (Go)
- 一般社団法人Gophers Japan代表
- Go Conference主催者
- 資料
メモ
- Goが開発された背景
- Google内の課題を解決するために開発された(C++のスピード感に課題感があった)
- 開発のスケール
- 開発が大規模になったときに開発スピードを落とさずに開発できるか
- 製品のスケール
- パフォーマンス面(速度などがきちんとでるか、など)
- 開発のスケール
- 参考
- Google内の課題を解決するために開発された(C++のスピード感に課題感があった)
- リリースサイクルと後方互換性
- Goは毎年8月と2月にリリースされる
- マイナーバージョンがアップされる
- リリース3ヶ月前からDevelopment Freezeに
- バグ修正とドキュメント修正以外は基本的に行われない
- リリース2ヶ月前からベータ版が、1ヶ月前からRC版がリリースされる
- Go1の間は言語の後方互換が保たれる
- 言語仕様に破壊的変更が基本的にはない(例外もあり)
- Goは毎年8月と2月にリリースされる
- Goが生み出したもの
- Goとともに浸透した文化
- コードフォーマット
- gofmtによる書式(スタイル)の統一
- インポートパス
- ソースコードの中に依存関係が記述される
- ホスティング場所もわかるので、ツールやライブラリを簡単に公開できる文化
- コードフォーマット
- GoチームとGoコミュニティの関係
- コミュニティの意見を取り込んでくれる
- プロポーザルの受け入れや、半年に1度のサーベイ
- コミュニティの意見を取り込んでくれる
- Goに入ってはGoに従え
- ≠ Goに慣習に従いなさい
- どの言語を学ぶ際にも必要な考え方
- 自然言語でも同じ
- なぜGoが開発されたのかを知ること
- 1つ1つの言語機能には開発された背景がある
- Goとともに浸透した文化
- これまでのアップデート(すべて互換性を保ったままという点がすごく良い)
- コンパイラの改善
- ランタイムの改善
- 言語機能/標準パッケージ
- ツール類
- 参考:https://golang.design/history/
- キャッチアップするには?
- Goを学ぶには?
- 公式ドキュメント
- 書籍
- Books for Gophers - Go Conference 2022 Spring
- 他、日本語の書籍が増加中
- 教材
- コミュニティ
- 日本各地にコミュニティ
- Go Conferenceも毎年開催
- Gopher道場
- 新しい機能をキャッチアップ
- プロポーザル、ドラフトデザインを見つける
- Goチームの解説やソースコードを読む
- 開発版を試す
- 自分でインストールもできる
- ブラウザで動くものもある
- The Go Playground
- リリースパーティもある
- Goを学ぶには?
Googleソフトウェアエンジニアリングに沿った開発をするためのGoの利便性
- スピーカー:@po3rin
- 所属:エムスリー株式会社 AI・機械学習チームのソフトウェアエンジニア
- 検索基盤周りの担当
メモ
- エムスリーはGoを至るところで使っている
- アプリケーション、検索、レコメンド、リランキングなど各種API
- データ連携
- Push通知基盤
- 便利ツールの開発
- エムスリーではMLエンジニアもGoが書ける
- コードの一貫性の重要性
- 無駄な議論を減らせる
- スケーリングを可能にする
- 時間に対する強靭性
- Goの一貫性の例
- インデントはタブに強制
- スペースを入れるかどうか
- セミコロン、ダブルコロン
- 関数、テストファイル、テスト関数の命名規則
- 学習の容易性
- formatで書き方を強制してくれるので手を動かしながら学べる
- GoもGoで書かれているのでコードリーディングから学べる
- Go製のOSSのコードから設計を学べるのも勉強になる
- 公式が提供していることの重要性
- 複数のフォーマッターがあるとチームやプロジェクトごとにばらばらになる
- Goはチームがスケールしやすい
- 複数のフォーマッターがあるとチームやプロジェクトごとにばらばらになる
- 意外な構文は避けよ
- 複雑性を理解しないと意外な構文はバグを招きやすい
- レビューで書式の論争の時間削減ができる
- ルールを適用する
- コードレビュー
- 読みやすいのでやりやすい
- 自動化
- コードレビュー
- エムスリーではgoaを使っている
- OpenAPI仕様のファイルの生成が行えるためドキュメンテーションのハードルが下がる
トークセッション
スピーカー
セッションテーマ
- Goはどんな風に使える?ここが便利!
- Goを使う仲間をもっと増やしたい!Goの魅力と将来性
Goはどんな風に使える?ここが便利!
初めてGoに触れたときのこと
- 触ったのは10年前、Googleが新しい言語作ったなという印象
- 研究等用に書いていた
- さわり心地よかった、型付言語触ったの初めて
逆に、「こんなこと困っていた」や「今困っている」ということ
- チームへの浸透
- 調べるのが大変、ソースコード読むしか無い
- 日本語ドキュメント少ない
情報収集の仕方
- 基本的には公式ドキュメント、ソースコード
- 公式が出すブログ
- Go Conference や golang.tokyo 等の勉強会
GoでAPI作りたいときに使うフレームワーク
- net/http自体が高機能なのでフレームワーク使わずともいける
- 他のフレームワークはnet/httpのwrapperであることがほとんど
- gRPC、GraphQL
Goを使う仲間をもっと増やしたい!Goの魅力と将来性
Goの魅力
- 並列処理
- シンプルさ、扱いやすさ
- コミュニティが充実している
Goをキャッチアップしやすい人のバックグラウンド
- 基本的にはどんな人でもキャッチアップしやすいのでは?
- C言語とか(もともとGoを開発したメンバーがCを開発してたことはある)
初学者の学習の始め方
- Command Line toolとか
- 小さいツールを自作してみるとか
今後、Go言語に期待していること
- 後方互換を保っていて安定的に使えるのがいい、脆弱性DBに関してはより期待している
- データ分析とか強くなると嬉しい(個人的に)