GitHub Actionsを活用してCIの導入を実現
株式会社フォーサイト / 鈴木 究経
EM / バックエンドエンジニア / 従業員規模: 51名〜100名 / エンジニア組織: 10名以下
利用プラン | ツールの利用規模 | ツールの利用開始時期 |
---|---|---|
GitHub Team | 10名以下 | 2023年8月 |
利用プラン | GitHub Team |
---|---|
ツールの利用規模 | 10名以下 |
ツールの利用開始時期 | 2023年8月 |
アーキテクチャ
アーキテクチャの意図・工夫
自動テストが出力したカバレッジレポートを AWS S3 にアップロードし、そのURLをプルリクのコメントとして自動的に記載するようなワークフローを構築しています。
これによりレビュアー・レビュイー共にプルリクを見ればテストの状況について分かるようになっており、コードレビューの際の確認観点の一つとして活用しています。また「カバレッジが可視化されることによってテストを書くモチベーションが生まれる」といった声も挙がっており、この工夫が一定の成果を得られていると感じています。
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
弊社が提供するEラーニングシステム「ManaBun」は提供開始から5周年が経ち、有難いことに多くの受講生様にご利用いただいております。その中でいただく様々なフィードバックへの迅速な対応や、会社の事業方針に柔軟に追従することを目的とし、ManaBunは内製組織によって開発・メンテナンスが行われています。
しかし、上述したようなタスクが山積する中で、スピード感重視で開発を進めてきた代償としてテストコードの整備が後回しにされ、開発者の勘と経験によるソースコードの変更に加え、QAメンバーの勘と経験による品質保証の上に成長を続けるプロダクトになっていきました。 時間の経過と共にManaBunのプロダクトコードは肥大化していきましたが、開発サイクルに自動テストが組み込まれていないので、以下のような課題に直面することになりました。
- エンジニア組織がスケールしづらい: 新たにManaBunの開発にジョインすることになったエンジニアは比較的簡単なタスクを通じてプロダクトコードへの理解を進めることになりますが、コードを変更した影響範囲がどこに及ぶのか検討がつかないため、自走できるようになるまでかなりの時間を要することになります。組織における教育リソースは有限なので、そのような新規参画者の立ち上がりが遅い組織では、新たなエンジニアの受け入れはどうしても鈍化してしまいます。
- 開発リードタイムの増大: 先に述べたように勘と経験による開発が求められていたので、たとえ新規参画者でなかったとしても、改修箇所の背景知識がないエンジニアが対処する場合はデグレやエンバグ、副作用を起こさないよう慎重を期すために他のエンジニアに聞きながら開発することが常になっていました。他者に聞かないと開発が進んでいかないという点で、開発リードタイムが不必要に増大していました。
- 問題の発覚が遅れる: ManaBunの開発サイクルにおいて、動作確認や品質保証はリリース前の最終工程として行われます。仮にバグや副作用が混入していた場合であっても最終工程まで検知しづらく、検知した場合の手戻りも大きいのでさらに開発リードタイムが増大するといった悪循環でした。
どのような状態を目指していたか
自動テストが組み込まれた開発サイクルの確立を目指しました。具体的には、エンジニア各人が変更箇所に対するテストコードを作成し、レビュアーはテスト実行結果も確認観点の一つとしてコードレビューを行うというプロセスを目標としました。
比較検討したサービス
- CircleCI
比較した軸
「ツールの導入が容易で、開発サイクルに無理なく組み込めること」を重要視しました。
本施策のために潤沢なリソースを割けるほどの組織体力はなかったので、ツールの導入・運用・メンテナンスにかける工数は最小限にしたかったためです。
選定理由
- GitHubとの親和性が高いこと: 元々ソースコード管理のためにGitHubは活用していたため、リポジトリ内にワークフローを定義したYAMLファイルを配置するだけで利用できるという手軽さが選定理由の一つとなりました。
- ツールが散らないこと: エンジニア組織が小さいので、新しいツールを導入してそれを運用していくのは管理面においてそれなりの負担になります。その点においてGitHub ActionsであればGitHubのエコシステムで完結するため、新たに管理するツールが増えるわけではないという点も選定理由の一つになりました。
導入の成果
改善したかった課題はどれくらい解決されたか
「問題の発覚が遅れる」という点に関しては少しずつ解決してきています。チームメンバーもそれは実感しているようで、導入前と比べてGitHub Actionsの有用性のみならず、CIの重要性についても理解度が増してきていると感じています。
どのような成果が得られたか
コードレビューを通じて「テストが実装されていないけど理由ありますか?」や「カバレッジが低いのでテストケースを増やしてください」といった指摘がメンバー間で交わされるようになりました。
GitHub Actionsを通じて自動テストが開発サイクルに組み込まれ、開発チームにおいてテストが身近なものになったからこそ出てくるようになったコメントであると感じています。
導入時の苦労・悩み
ワークフローを構築する際の動作確認に苦労しました。 ローカル環境でワークフロの動作確認ができる act というツールもありますが活用できず、結局リモートリポジトリにpushして動作確認を行いました。ワークフロー稼働時間も食い潰してしまいますし、無駄なコミットが混入することにもなるので、ソースコードやコミットログの厳密な管理が求められる開発組織の場合は注意が必要だと思います。
導入に向けた社内への説明
上長・チームへの説明
上長に向けて
上長からは「GitHub Actionsを使うにあたって追加費用が発生するか?」という点を聞かれました。
元々GitHub Teamプランを利用していたため、3,000分/月まで(2024年12月現在)であれば追加費用なしで利用できる旨を説明しました。また、仮に上限時間を超えてワークフローが稼働するようになったとしても、支払いプランとして定額課金と従量課金がありコストコントロールが可能であることも申し添えました。
チームに向けて
ManaBunの開発サイクルにおいてCIが機能していないことに対する課題感は各々が多少なりとも感じていたようで「CIツールを導入して自動テストを回せるようにしたい」という主張は結構すんなりと受け入れられた記憶があります。その中でGitHub Actionsを選定した理由としては、先に挙げたGitHubとの親和性が高くて導入が容易である点を説明し、開発サイクルに無理なく組み込めそうであると判断されました。
活用方法
よく使う機能
- cacheアクション: ワークフロー内でアプリケーションをビルドする際の依存関係をキャッシュし、CIの高速化を図っています。
ツールの良い点
- GitHubのエコシステムに乗っかっていれば導入が容易。
- 稼働上限はあるが、費用をかけずにGitHub Actionsを導入することができる。
ツールの課題点
- ローカル環境でのワークフローの動作確認が大変。
今後の展望
テストコードの整備にともないCIの処理時間が長くなってきました。
今後はテストの並列化や最適化にも取り組み、CI自体が開発サイクルの足枷にならないようにしていきたいです。
株式会社フォーサイト / 鈴木 究経
EM / バックエンドエンジニア / 従業員規模: 51名〜100名 / エンジニア組織: 10名以下
よく見られているレビュー
株式会社フォーサイト / 鈴木 究経
EM / バックエンドエンジニア / 従業員規模: 51名〜100名 / エンジニア組織: 10名以下
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法