Github Actions で実現するCI高速化
株式会社タイミー / hiroshi.tokudomi
メンバー / インフラエンジニア / 従業員規模: 1,001〜5,000名 / エンジニア組織: 101名〜300名
利用機能 | ツールの利用規模 |
---|---|
自動テスト | 101名〜300名 |
利用機能 | 自動テスト |
---|---|
ツールの利用規模 | 101名〜300名 |
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
以前利用していたCircleCIのPerformanceプランでは、並列で実行できるジョブ数が80に制限されていました。1回のCI実行で40の並列ジョブを使用していたため、同時にCIを実行できる開発者は2名までに限られていました。このまま開発者が増えると、CIの待ち時間が長くなり、開発効率に悪影響を与えるリスクがありました。
どのような状態を目指していたか
弊社では基本的にGitHub Actionsを使用していますが、RSpecテストと静的解析のみCircleCIを利用していました。これをGitHub Actionsに統合することで、CircleCIとGitHub Actionsの両方を学習する必要がなくなり、開発者の学習コストを削減することが目的でした。また、GitHub Actionsへの移行によって、CIの実行速度を向上させることも狙っていました。
比較検討したサービス
- CircleCI
選定理由
弊社では、自動テスト以外の多くのワークフローにおいてすでにGitHub Actionsを使用していたため、統一することでメンテナンス性や運用面での効率化が期待できると判断しました。
導入の成果
改善したかった課題はどれくらい解決されたか
GitHub Actionsへの移行により、p95でのテスト実行時間が9分短縮されました。これにより、従来の並列実行の制限が解消され、CI/CDのパフォーマンスが大幅に向上しました。移行前に抱えていたCIの待ち時間やパフォーマンスの問題が、ほぼ解決されました。
どのような成果が得られたか
並列実行の制限がなくなったことで、CI/CDのパフォーマンスが向上し、開発者が素早くフィードバックを得られる環境が整いました。この改善により、開発者の作業効率が上がり、プロジェクト全体のスピードアップが実現しました。また、GitHub Actionsへの統一によって、管理の手間が減少し、運用効率も向上しました。
導入時の苦労・悩み
テスト分割の仕組みがない GitHub Actionsには、テストの実行時間に基づいて自動でテストを分割する機能が標準で備わっていません。そのため、自社でテスト分割の仕組みを作成する必要がありました。
UIの課題 テストが失敗した際に、その情報を直感的に把握できるUIが用意されていないため、エラー情報を見やすくする独自の仕組みを構築する必要がありました。
結果の引き継ぎの難しさ matrix strategyを使用して並列実行を行う場合、後続のジョブにテスト結果を引き継ぐのが難しく、自前でS3などを利用した結果の保存と引き継ぎの仕組みを構築する必要がありました。
Flakyテストの管理 Flakyテストを一覧で表示する機能がないため、不安定なテストを把握し、管理することが課題でした。
導入に向けた社内への説明
上長・チームへの説明
CircleCIでは並列実行の制限があり、開発者が増えるとCIの待ち時間が長くなるリスクがありました。CircleCIのプランを上げて並列実行の制限を解消することも可能でしたが、コスト面でGitHub Actionsへの移行の方がメリットが大きいと判断しました。また、GitHub Actionsに統一することで、学習コストの削減やメンテナンスのしやすさが期待できることを強調しました。さらに、開発スピードを上げるためにはCIの高速化が重要であり、その点でGitHub Actionsが有効であることを説明しました。
さらに、CIプロバイダーをGitHub Actionsに一本化することで、複数のプロバイダーを管理する必要がなくなり、情報流出のリスクが低減し、一貫したセキュリティ対策が可能となります。加えて、管理するツールが減少することで管理業務が簡素化され、運用が効率的になります。
フィードバックの内容
移行についてのフィードバックでは、既存のCircleCIからGitHub Actionsへ変更することで、運用コストがどう変わるのかについての懸念がありました。特に、GitHub Actionsでの並列実行にかかるコストや、テストの実行時間短縮による費用対効果を具体的に示すように求められました。
費用対効果の説明
費用対効果については、以下の3点を重点的に説明しました
学習コストの削減
GitHub Actionsに統一することで、開発者が複数のCIツールを学ぶ必要がなくなり、学習コストが削減されることを説明しました。
並列実行による効率化
CircleCIの制限を超えた並列実行が可能になるため、CIの待ち時間が短縮され、開発スピードが向上することを示しました。
コスト削減効果
GitHub Actionsは使用量に応じた課金制度を採用しており、開発の規模に合わせて柔軟にスケールできるため、コスト面での優位性があることを説明しました。
満たすべき条件や要件
GitHub Actionsで既存のテストや静的解析が問題なく実行できること。 CI/CDの統一によって、運用が簡素化されること。
活用方法
よく使う機能
- matrix strategy
複数の環境や設定での並列実行を効率化するために、matrix strategyを利用しています。
ツールの良い点
アプリケーションへの導入が簡単 設定や構成がシンプルで、既存のプロジェクトやアプリケーションに簡単に統合できる点が強みです。また、豊富なドキュメントとサポートにより、導入に伴うハードルを低く抑えられます。
低価格から導入できる 使用した分だけ課金される料金体系のため、規模に応じて費用を柔軟に調整でき、低価格での導入が可能です。特に、初期段階や小規模プロジェクトでのコスト負担が少ないのは大きな利点です。
CI/CDのパフォーマンス向上 並列実行の制限がないため、ビルドやテストを効率的に並行処理でき、CI/CD全体の速度向上に寄与します。
ツールの課題点
テスト分割の標準機能がない GitHub Actionsには、テストの実行時間に基づいて自動でテストを分割する標準機能が備わっていないため、独自の実装が必要です。
エラー情報の可視化が標準で不十分 テストが失敗した際のエラー情報を直感的に把握できるUIがデフォルトで提供されていないため、視覚的にわかりやすいエラー表示の工夫が求められます。
Flakyテストの管理が難しい Flakyテスト(不安定なテスト)を一覧で表示する機能がないため、Flakyテストの管理や改善には追加の取り組みが必要です。
並列実行結果の引き継ぎの工夫が必要 matrix strategyを使って並列実行を行った場合、後続のジョブに結果を引き継ぐ仕組みが標準で提供されておらず、S3などを利用した独自の実装が求められます。
株式会社タイミー / hiroshi.tokudomi
メンバー / インフラエンジニア / 従業員規模: 1,001〜5,000名 / エンジニア組織: 101名〜300名
よく見られているレビュー
株式会社タイミー / hiroshi.tokudomi
メンバー / インフラエンジニア / 従業員規模: 1,001〜5,000名 / エンジニア組織: 101名〜300名
レビューしているツール
目次
- 導入の背景・解決したかった問題
- 活用方法