みなさまこんにちは!エアークローゼットでCTOをしている辻です。
GitHub ActionsのランナーをGitHub hosted→Blacksmith→Namespaceと2回乗り換えました。結果を先に言うと:
- CIコストはGitHub hosted時代の約1/4
- 遅い処理(p90)でも37%短縮
- CIが完了しない事故は32件→0件
- 移行作業は1行変えるだけ
この記事はその実測記録です。乗り換え判断の材料になるよう、測り方も失敗談も込みで公開します。
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つ。
- Namespaceにはプラン固定費があります。Teamで$100/月、Businessで$250/月(それぞれ同額分の利用が込み)。そして、そもそも無料枠に収まる規模ならGitHub Actionsは0円です。単価がいくら安くても無料には勝てません。冒頭の「収まるならそのままでいい」はこのためです。
- $0.004/分はプリペイド(プラン込み分)の単価です。込み分を超えた超過分は$0.006/分で、GitHubの2 coreと同額になります。使用量がプランの込み分に収まるように選ぶのが前提です。
- 単価は変わります。この記事の数字は執筆時点の公開価格なので、判断時には各社のpricingページ(GitHub / Blacksmith / Namespace)を確認してください。
使い分けの指針
まとめると、規模で3段階です。
- 無料枠に収まる: GitHub hostedのまま。何もしない
- 無料枠を超えて請求が気になり始めた: BlacksmithでもNamespaceでも、
runs-on1行の変更で「同じ払いで倍のマシン」が手に入る。Blacksmithには月3,000分の無料枠、Namespaceには30日トライアルがあるので、まず試す価値あり - AIエージェントが開発の主力で、CIの並列度が高い: テールレイテンシと安定性で選ぶ。そして移行前にピーク同時実行数を必ず見積もる
まとめ
- AIで開発が速くなると、CIコストは回数×タスクの掛け算で膨らむ
- GitHub hosted→Blacksmith: 単価1.33倍で4 vCPU化、実行時間-59%、実行1回あたり約45%減
- Blacksmith→Namespace: 中央値-10%、p90 -37%、hang 32件→0件、単価は半分
- ただしNamespaceは同時実行数の上限がプランで決まる。移行前にピーク同時実行数の見積もりを
- 無料枠に収まるなら乗り換え不要。超えているなら、
runs-on1行から
GitHub Actionsのコストが増えているなら、Namespaceは実測ベースでおすすめできる選択肢です。この記事がどなたかの判断材料になれば嬉しいです。
comments (0)
まだコメントはありません。