GitHub Actionsのコストが増えているなら、Namespaceを使えばいいじゃない

6 min read

目次

  1. AIで開発すると、CIは静かに膨らみ続ける
  2. 大前提: 無料枠に収まるなら、そのままでいい
  3. 乗り換えの遍歴
  4. 第1の乗り換え: GitHub hosted→Blacksmith
  5. Blacksmithで踏んだ穴: flakyなインストールhang
  6. 第2の乗り換え: Blacksmith→Namespace ── ただし一度失敗している
  7. 並列数を見積もっていなかった
  8. 実測: 中央値も縮み、テールはさらに締まる
  9. コストの整理
  10. 使い分けの指針
  11. まとめ

みなさまこんにちは!エアークローゼットでCTOをしているです。

GitHub ActionsのランナーをGitHub hosted→Blacksmith→Namespaceと2回乗り換えました。結果を先に言うと:

この記事はその実測記録です。乗り換え判断の材料になるよう、測り方も失敗談も込みで公開します。

AIで開発すると、CIは静かに膨らみ続ける

まず課題感から。AIエージェントが開発の主力になると、CIのコストは2方向から同時に膨らみます。

1つ目は実行回数。AIはPRを出すのも修正を積むのも人間より速いので、pushの回数がそのまま増えます。私たちの環境では、テスト用のworkflowだけで月3,000〜3,500回動いています。レビューもAIが行い、指摘の修正pushごとにCIが再走するので、この数字は開発が加速するほど増えます。

2つ目はタスクの数。開発が速くなると、「今までやりたかったけどコストが見合わなかったこと」をCIに任せたくなります。lintの層を増やす、カバレッジのゲートを厳しくする、ドキュメントの整合チェックを足す……。1回の実行時間も伸びていくわけです。

回数×タスクの掛け算なので、何も考えずにいるとコストは静かに、しかし確実に膨らみます。

大前提: 無料枠に収まるなら、そのままでいい

先に逆側の結論を言っておくと、無料枠に収まっている規模なら、乗り換える理由はありません。publicリポジトリなら標準ランナーはそもそも無料ですし、privateでもFreeプランで2,000分/月、Teamプランで3,000分/月が付いてきます。

実際、エアークローゼット全体で見ると、今もGitHub hostedのままのリポジトリはあります。無料枠の3,000分/月に収まる範囲は、乗り換えずにそのまま残しています。無料で動いているものを、わざわざ有料に乗り換える理由はないからです。

この記事は「無料枠をとっくに超えて、毎月の請求が右肩上がりになっている」チーム向けです。

乗り換えの遍歴

私たちのランナーの遍歴はこうです。

時期 ランナー きっかけ
〜3月末 GitHub hosted(2 core) ──
3月末〜6月 Blacksmith(4 vCPU) 実行時間とコスト
6月末〜現在 Namespace(4 vCPU/8GB) 実行時間とコストと、後述のhang問題

途中、AWSのspot instanceでセルフホストする方式も検討しましたが、jobのたびにインスタンスの立ち上がりを待つオーバーヘッドが乗る点で見送りました。CIは起動レイテンシが積み重なる世界なので、常時プールされたランナーに軍配が上がります。

どの乗り換えも、作業自体はworkflowのruns-onを1行変えるだけです。

 jobs:
   test:
-    runs-on: ubuntu-latest
+    runs-on: nscloud-ubuntu-24.04-amd64-4x8

あとは管理画面でGitHub Appを連携する初期設定だけで、修正はものの数分で終わります。actions/cacheなどの標準機能もそのまま動きます。移行コストはほぼゼロ。だからこそ、判断材料は実測に尽きます。

第1の乗り換え: GitHub hosted→Blacksmith

動機は単純で、実行時間とコストです。乗り換え境界の前後2週間、workflowの中身が同一の期間で、同じテスト用workflowの成功runの所要時間を比較しました(GitHub APIのrun履歴から集計)。なお当時は実行回数が今より大幅に少なかったため、nは控えめです。

中央値 p90 n
GitHub hosted(2 core) 340秒 598秒 237
Blacksmith(4 vCPU) 139秒(-59%) 157秒(-74%) 130

ここで正直に言っておくと、これは「Blacksmithのマシンが同サイズで2.4倍速い」という話ではありません。2 coreから4 vCPUへ、マシンサイズを倍にして乗り換えているからです。

ポイントは単価のほうにあります。GitHub hostedの2 coreは$0.006/分、4 coreのlarger runnerだと$0.012/分。対してBlacksmithは2 vCPUで$0.004/分、4 vCPUで$0.008/分。つまりGitHubで2 coreを借りる値段の1.33倍で、4 vCPUが借りられる。結果として実行時間は41%に縮み、実行1回あたりのコストは単価1.33倍×時間0.41倍で約45%減。速くなって、安くなる。「同じ払いで倍のマシンが買える」が、この種の乗り換えの本質です。

Blacksmithで踏んだ穴: flakyなインストールhang

Blacksmith自体はこの単価で十分に働いてくれたのですが、運用の中で1つ無視できない問題がありました。依存インストール(npm install相当のステップ)がまれに無言でhangし、CIが完了しないのです。

再現条件は掴めず、発生はflaky。GitHub Actionsのjobタイムアウトはデフォルト6時間なので、放置するとhangしたrunが6時間分の課金とランナー占有を続けます。人が気づいて手動でcancelして再実行する、という対応も相当数やっていました。その後タイムアウトを30分に絞りましたが、それでも誰も気づかないままタイムアウトで殺されたrunだけで、約2.5ヶ月に32件。手動cancel分はこの数字の外なので、32件は下限です。Namespaceに移行してからの3週間では0件です。

数字だけ見れば小さく思えるかもしれません。ただ、AIエージェントが回す自律ループの途中にこれが挟まると、無言の停止はループ全体の停止になります。人間なら「あれ、CI止まってる?」と気づいてcancelと再実行で復帰できますが、エージェントのループでは検知と再実行の仕組みを別に作る必要があり、地味に運用コストを積み上げました。

第2の乗り換え: Blacksmith→Namespace ── ただし一度失敗している

Namespaceへの移行動機も実行時間とコスト、それに上記のhang問題です。ただしこの移行、一度失敗してロールバックしています。失敗談として共有する価値があると思うので、経緯もそのまま書きます。

並列数を見積もっていなかった

Namespaceの料金プランには同時実行数の上限(vCPU単位)があります。無料トライアルのあるDeveloperプランはLinuxで32 vCPUまで。4 vCPU/8GBのマシンだと同時8台です。

私たちの環境はAIが並行で開発する分CIの並列度が高く、ピークでは同時8台を大きく超えます。結果、移行初日からrunがキューに積み上がってCIが詰まり、2日でBlacksmithにロールバックしました。その後Businessプラン(160 vCPU=4 vCPUマシンで40台)に上げてから再移行し、以降は安定しています。

教訓はシンプルです。乗り換え前に、自分のリポジトリのピーク同時実行数を測っておくこと。GitHub APIでrun履歴を引けば、同時に走っていたjob数のピークは機械的に出せます。単価と速度だけ見てプランを選ぶと、私たちと同じ回り道をすることになります。

実測: 中央値も縮み、テールはさらに締まる

面白いことに、このロールバックのおかげで完璧な対照実験ができました。ロールバックの2日間と再移行直後の5日間はworkflowの中身が全く同じなので、純粋にランナーだけの差が測れます。

中央値 p90 n
Blacksmith(4 vCPU、ロールバック期) 378秒 839秒 335
Namespace(4 vCPU/8GB) 339秒(-10%) 526秒(-37%) 311

中央値も1割縮みましたが、大きく効いたのはテールです。p90が839秒から526秒へ37%縮み、前述のhangも0件になりました。「たまに遅い・たまに止まる」が消えるということで、これはエージェントのループ運用では中央値の改善より価値があります。ループの所要時間はテールに引っ張られるからです。

コストの整理

公開単価(Linux x64、2026年7月時点)を並べます。

ランナー 構成 単価/分
GitHub hosted標準 2 core $0.006
GitHub larger runner 4 core $0.012
Blacksmith 2 vCPU $0.004
Blacksmith 4 vCPU $0.008
Namespace 4 vCPU/8GB $0.004(プリペイド)

Namespaceの4 vCPUマシンは、GitHubの2 coreより分単価が安い。ここが一番効いています。実測の時間と合わせて実行1回あたりで正規化すると、GitHub hosted→Blacksmithで約45%減、Blacksmith→Namespaceでさらに約半分。通算でGitHub hosted時代の約1/4になりました。

ただし注意点が3つ。

  1. Namespaceにはプラン固定費があります。Teamで$100/月、Businessで$250/月(それぞれ同額分の利用が込み)。そして、そもそも無料枠に収まる規模ならGitHub Actionsは0円です。単価がいくら安くても無料には勝てません。冒頭の「収まるならそのままでいい」はこのためです。
  2. $0.004/分はプリペイド(プラン込み分)の単価です。込み分を超えた超過分は$0.006/分で、GitHubの2 coreと同額になります。使用量がプランの込み分に収まるように選ぶのが前提です。
  3. 単価は変わります。この記事の数字は執筆時点の公開価格なので、判断時には各社のpricingページ(GitHub / Blacksmith / Namespace)を確認してください。

使い分けの指針

まとめると、規模で3段階です。

まとめ

GitHub Actionsのコストが増えているなら、Namespaceは実測ベースでおすすめできる選択肢です。この記事がどなたかの判断材料になれば嬉しいです。

comments (0)

まだコメントはありません。