👋

CI ツールのコスト削減の時に考えること

2024/11/26に公開

はじめに

「最近、CI ツールのコストが増えてきたのでなんとかしたい」という議題が上がった時に私がどのように考えるかをまとめます。ここでは GitHub Actions の話題を中心に出しますが、基本的なことは他のものでも当てはまると思います。

コストが高くなった原因

実行回数が増えた

原因としては以下のものが考えられます。

  • 開発速度が上がった
    • 開発する人数が増えた
    • 開発プロセスの改善があった
    • 開発環境の改善があった
  • 開発プロジェクトが増えた

1回あたりの実行時間が増えた

原因としては以下のものが考えられます。

  • チェックする項目が増えた
  • コードが増えた
    • テストコードが充実してきた

そのコスト削減は必要ですか?

いずれも開発を前に進めるために行ったこと結果であり、ネガティブに考えるべきではないです。むしろプロジェクトは良い方向に進んでいると喜ぶべき話です。

どうやって削減するか

ここからは「それでもコストを削減したい」と言われた時にどうするかについて書いていきます。

課金の仕組みを理解する

コストを削減するにあたって課金の仕組みを理解することは避けて通れません。ここで見るべき項目は分単位で課金されるのか秒単位で課金されるのかです。GitHub Actions では秒数は切り上げされるので3秒しか実行していなくても1分分の課金がされてしまいます。

https://docs.github.com/ja/billing/managing-billing-for-your-products/managing-billing-for-github-actions/about-billing-for-github-actions

その他にもマシンタイプやOS、GPU使うかによって課金額が変わってくるので確認しましょう。

実行トリガーの調整

プロジェクトが大きくなってくると数行の変更に対して、全て実行されるのが無駄に感じてくる瞬間があると思います。GitHub Actions ではパスフィルターを使うことで特定のファイルが変更された時のみに実行することができます。モノレポを導入している場合はパスフィルターとの相性が良いので積極的に導入しましょう。

https://docs.github.com/ja/actions/writing-workflows/workflow-syntax-for-github-actions#example-including-paths

実行負荷が高いけれども、毎回実行する必要がないものについては push 以外のトリガーを検討してみるのも良いでしょう。GitHub Actions ではプルリクエストにラベルを付与した時に実行するトリガーがあります。

https://docs.github.com/ja/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#label

キャッシュを活用する

依存関係をキャッシュすることで実行時間を削減できます。GitHub Actions では cache アクション を使うことで簡単に導入できます。キャッシュについては多様なブログ記事があるので参考にすると良いでしょう。
https://docs.github.com/ja/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows

依存関係をアップデートする

依存関係にはアルゴリズムの改善やリソースの最適化が導入される場合があります。依存関係のアップデートをするだけでも実行時間の削減につながることがあるので検討してみるのはありでしょう。ただし、依存関係のアップデートのリスクの適切な評価は必要です。

まとめ

CI ツールのコストについて…

  • コストが上がっていることは開発チームの成長を示しているとポジティブに考えましょう。
  • まずは課金の仕組みを理解しましょう。
  • コスト削減の方法として実行トリガーの調整やキャッシュの活用を検討しましょう。

Discussion