Go言語の勉強会やってみた
はじめに
こんにちは Isa と申します。
くふうAIスタジオのサーバーサイドエンジニアとして家計簿アプリZaim の開発を担当しています。
今回は私たちの部署で行ったGo言語の勉強会についてご紹介したいと思います。
きっかけ
Zaimのサーバーサイドは主にPHPとRubyで開発されていますが、PHPで開発された機能をGoにリプレイスする作業を進めています。しかし、私を含め、部署内でGo言語の経験者は少なく、初めて触れるメンバーもいるため、我々は共同でGo言語を学ぶための勉強会を立ち上げました。今後もGo言語での開発がさらに増えていくことが予想されるため、この勉強会を通じて、チーム全体でスキルを向上させていくことを目指しています。
Go言語に書き換える理由
では、なぜ経験者が少ないにも関わらず、我々は元々PHPで書かれていたアプリケーションをGo言語に置き換えようと決めたのか。その理由は以下の通りです:
静的型付けによる利点
Go言語は静的型付け言語であるため、コンパイル時に型エラーを検出できます。これにより、実行時エラーを減少させ、コードの安全性と信頼性が向上します。また、静的型付けにより、開発者はコードの意図を明確に表現でき、メンテナンスが容易になります。
パフォーマンスの向上
Zaimのコア部分ではPHPで独自フレームワークを使用しています。この環境下ではマルチスレッドやDBコネクションプーリングの課題、非同期処理のやりにくさがありました。Go言語に書き換えにことによって、ゴルーチンによる効率的な並行処理、データベースライブラリによるコネクションプーリングの管理、そしてチャネルを利用した非同期処理機能により、これらの問題を解決し、パフォーマンスを向上させることが期待されています。
コンテナ技術との相性
Zaimでは、インフラ部分にKubernetesを利用しています。この環境下で、PHPからGo言語に書き換えることによって、いくつかの重要な利点を得ることができます。
アプリケーションのイメージが軽量化: Go言語で作成されたアプリケーションは軽量な単一バイナリとしてビルドされるため、コンテナイメージも軽量になります。これにより、イメージのビルド、プッシュ、プルなどが高速化し、ストレージ使用量も削減されます。
KubernetesのPodとして効率的にデプロイ: 軽量なイメージはPodの起動時間を短縮し、リソース使用量を削減します。その結果、Kubernetes上でのデプロイメントやスケーリングがより効率的になります。
互換性とアップデートの容易さ
Go言語のエコシステムは安定しており、公式の互換性ポリシーにより、後方互換性を維持しています。これにより、ライブラリやツールのアップデートが容易であり、新しいバージョンに移行する際のリスクを抑えることができます。
これらの理由から、Zaimではアプリケーションの主要部分をPHPからGo言語へ移行しています。
勉強会の詳細
勉強会の方法
勉強会は輪読会方式で行いました。週に2回、持ち回りで担当者が変わり、その回で進める予定の部分を読み込んで、Notionにまとめておきます。担当者はその部分を進行し、まとめた内容、学んだこと、分からなかったことなどを共有してディスカッションを行います。
使用書籍
使用する書籍は「Go言語 100Tips ありがちなミスを把握し、実装を最適化する」です。この本はGoプログラミングの間違いを網羅的に解説しており、間違いを回避し、開発生産性とコード品質を高めるためのヒントが詰まっています。バグ、不必要な複雑さ、可読性の低下、最適でないソフトウェア構成、API利便性の欠如、最適化されていないコード、生産性の欠如といったよくある100の間違いを取り上げ、その例を検証し背景を掘り下げています。
経験者のメンバーがこの書籍を選んでくれた理由もこの点にあります。Go言語における多くのよくあるミスや問題点をあらかじめ把握することで、勉強会参加者全員が効率的に学ぶことができ、現場でのトラブルを未然に防ぐことが期待できるからです。
勉強会の良かった点
実際のコードを使った具体的な説明:
わからなかったことはディスカッションの際にわかる人がプロダクトで実際に使われているコードを参照して教えてくれるので、具体的なイメージを持ちやすくなりました。事例の共有:
別プロダクトの事例も共有され、「このように書くと良い」といった実例を学ぶことができたため、理解を深めることができました。多様な参加者の協力:
当初は同じ部の4人で進める予定でしたが、別部署からの参加者も増え、7人で輪読会を行うことが出来ました。情報の一元化:
Notionにまとめた情報はレビュープロセスでも活用でき、振り返りの際の資料としても役立ちました。部門間の交流:
他部署の方と交流することができ、新たな視点やアイデアを得ることができたのも大きな利点です。
勉強会の課題と改善点
時間の調整:
各メンバーのスケジュールを調整するのは難しく、全員が参加可能な時間を見つけるのに苦労しました。具体的には、勉強会は月曜日の17時から1時間と金曜日の17時から1時間の2回開催していましたが、月曜日分の読み込み時間が少ないことが課題でした。これにより、一部のメンバーが準備不足で参加することが多く、理解が浅くなることがありました。
改善策: 各セッションの内容を「tipsごと」に分け、分量のばらつきを考慮して、無理のない範囲で3つに固定しました。
時間が余った場合はGo言語のリリースノートを見たりすることで、事前に担当分を固定し、効率的に進行できるようにしました。
tipsの内容が難しいケース:
初心者が多いため、特定のtipsの内容が難しく感じることがありました。特に、担当になったメンバーがその内容を理解するのに苦労することがありました。
改善策: 勉強会のスタンスとして「わからないものはわからない」と正直にコメントし、全員で理解を深めるためのディスカッションを行うようにしました。利用されているプロダクトがあれば使用例を確認し、利用されていないものであれば、その場で無理に理解しようとはせずスキップすることにしました。
リソースの共有
勉強会で使用した教材や、オンラインリソースなどを共有します。
参考資料
書籍: Teiva Harsanyi (著), 柴田 芳樹 (翻訳)「Go言語 100Tips ありがちなミスを把握し、実装を最適化する」
オンラインリソース: Go言語の公式ドキュメント、The Go Playground
まとめ
Go言語への移行に伴って部署で開催した勉強会について紹介しました。Go言語への移行は大きな挑戦ですが、チーム全体のスキル向上を目指し、継続的な学習と勉強会を通じてより良いサービス提供に努めます。今後も書籍や公式サイトを活用し、部内外の協力を得ながらGo言語の理解を深め、チーム全体で成長していきます。
くふうAIスタジオでは、採用活動を行っています。
当社は「AX で 暮らしに ひらめきを」をビジョンに、2023年7月に設立されました。
(AX=AI eXperience(UI/UX における AI/AX)とAI Transformation(DX におけるAX)の意味を持つ当社が唱えた造語)
くふうカンパニーグループのサービスの企画開発運用を主な事業とし、非エンジニアさえも当たり前にAIを使いこなせるよう、積極的なAI利活用を推進しています。
(サービスの一例:累計DL数1,000万以上の家計簿アプリ「Zaim」、月間利用者数1,600万人のチラシアプリ「トクバイ」等)
AXを活用した未来を一緒に作っていく仲間を募集中です。
ご興味がございましたら、以下からカジュアル面談のお申込みやご応募等お気軽にお問合せください。
https://open.talentio.com/r/1/c/kufu-ai-studio/homes/3849