GitHub Actions を Blacksmith で47%高速化した話
TL;DR
- GitHub Actions の CI 実行時間とコストが急増し、3月は月間 $200 超に到達
- サードパーティランナー Blacksmith を導入し、テスト系ワークフローの完了時間を 47%短縮
-
runs-onの1行変更だけで導入でき、ロールバックも1行で済む - ただし
shivammathur/setup-phpとの相性問題あり。ワークフローごとに効果を検証する必要がある
はじめに
こんにちは、melank です。長らく無職期間を続けていたのですが、QOLを意識しつつも、少しずつ働く機会を設けようと、プロダクトエンジニアとして仕事を再開しました。
私が開発に加わった月から、運用しているリポジトリにおいて GitHub Actions の月間課金額が急増していました。自分の開発スタイルが Organization 全体に悪影響を与えている可能性もあったため、調査を進めました。
| 月 | Billable 分数 | 実課金額 |
|---|---|---|
| 2026-01 | 11,542 | $59 |
| 2026-02 | 16,323 | $93 |
| 2026-03(25日時点) | 31,110 | $183 |
コスト急増の原因を切り分けるため、Push数・PR数・ワークフロー構成の3軸を調査しました。結果、ワークフローの追加や実行時間の変化は確認されず、PRあたりのPush回数が4.5倍に増加していたことが主因でした。AI 導入による開発速度向上だけでなく、Claude Code 等による自動コミット(PR作成)の増加が寄与している可能性が高いです。
このリポジトリの構成では、現時点で PHP + フロントエンドの両方を含む push 1回で約 36分の billable time が発生するため、push 回数の増加がダイレクトにコストに跳ね返っていました。
補足: billable time の計算
GitHub Actions の課金はジョブ単位です。2分のジョブが4並列で走れば、壁時計時間は2分ですが billable time は8分になります。テスト系ワークフローが matrix や shard で並列化されていると、1回の push で発生する billable time は見た目以上に大きくなります。
Push 回数を減らす運用は開発速度の観点から望ましくないため、CI 実行基盤そのものを見直すこととし、GitHub Actions 互換のマネージドランナーである Blacksmith の導入を検討しました。
Blacksmith とは
Blacksmith は、マネージド GitHub Actions ランナーサービスです。
- ゲーミング CPU を採用し、シングルコア性能が高い
- キャッシュダウンロードが約4倍高速(コロケーション)
- キュー待ち時間ゼロ
- 既存の GitHub Actions がそのまま動作
- 3,000分/月の無料枠
導入は runs-on を1行変えるだけで、既存のワークフローを変更しないので非常に簡単です。
# Before
runs-on: ubuntu-latest
# After
runs-on: blacksmith-4vcpu-ubuntu-2404
ワークフロー単位・ジョブ単位で選択的に適用できるため、効果の高いワークフローだけを切り替えられます。
高速化手段の比較
内心では Blacksmith の導入は調査段階でほぼ決めていたのですが、社内の許可を取るために、念のため他のランナーとの比較を取りました(サードパーティ製は無視)。
| GitHub Larger Runners | セルフホスト | Blacksmith | |
|---|---|---|---|
| 4vCPU 料金 | $0.012/分 | インフラ費 + $0.002/分 | $0.008/分 |
| CPU 性能 | 標準クラウド VM | 選択可能 | ゲーミング CPU |
| 無料枠 | なし | なし | 3,000分/月 |
| プラン要件 | Team / Enterprise | 制限なし | 制限なし |
| 導入コスト | Org Settings で作成 | サーバー構築・運用 | GitHub App + runs-on 変更 |
| ロールバック |
runs-on 変更 |
構成巻き戻し |
runs-on 1行戻すだけ |
料金は執筆時点(2026年3月)のものです。
GitHub サブスクリプションが Team以上 であれば GitHub Larger Runners という選択肢もありますが、単純にBlacksmith はコスト・性能・導入の手軽さのバランスで最も合理的でした。
Larger Runners を利用するメリットは今のところサポートが手厚いくらいしか見えないのですが、
- 定常的にオフィスに出社できるエンジニアがいる
- 複雑なワークフローを持つフェーズがある
- さらなる高速化が必要
という状況なのであれば、Self-Hosted の選択肢も十分にあるのではないかとも思います。
導入結果
テスト実行時間が短縮
| テスト | GitHub 標準 | Blacksmith | 短縮率 |
|---|---|---|---|
| Pest(PHP バックエンドテスト) | 109s | 21s | 81%短縮 |
| Vitest(フロントエンドテスト) | 136s | 16s | 88%短縮 |
GitHub標準とBlacksmith のインスタンス性能差の効果が顕著に表れました

ワークフロー全体の完了時間がおよそ半分に
| ワークフロー | GitHub 標準 | Blacksmith | 短縮率 |
|---|---|---|---|
| tests(最遅ジョブ基準) | 4m17s | 2m16s | 47%短縮 |
| vitest(最遅シャード基準) | 4m07s | 2m10s | 47%短縮 |
このリポジトリでは CI の半分以上がテスト用のワークフローだったので、実行時間の短縮が PR のフィードバックループに劇的に機能しています。ワークフロー全体では 47% の速度改善という結果になりました。

shivammathur/setup-php との相性問題
テストの速度改善という1点では劇的な効果がある一方で、ワークフロー全体でみると2倍程度の速度改善に留まっています。原因として、GitHub 標準のランナーにはプリセットされている PHP イメージが Blacksmith にはなく、都度ビルドしなくてはいけないことでした。
原因
shivammathur/setup-php は GitHub 公式ランナーでは RUNNER_ENVIRONMENT=github-hosted を検出してビルド済みバイナリを使用します(数秒)。Blacksmith 等のサードパーティランナーでは self-hosted 扱いとなり、apt から PHP をフルビルドするため 60秒以上かかります。
これは Blacksmith 固有の問題ではなく、Depot / Namespace / BuildJet 等すべてのサードパーティランナーに共通する既知の問題です。
試した回避策
| アプローチ | 結果 |
|---|---|
Sticky Disk で /var/cache/apt/archives をキャッシュ |
FUSE マウントが apt I/O を阻害しハング |
Sticky Disk で /opt/hostedtoolcache をキャッシュ |
setup-php がキャッシュを無視してフルビルド |
RUNNER_ENVIRONMENT の上書き |
setup-php 内部のフェイルセーフで失敗 |
| setup-php のフォーク | メンテナに却下済み |
useblacksmith/setup-php |
存在しない(Node / Python / Gradle はあるが PHP はない) |
いずれも効果がなく、現時点では ~60秒のオーバーヘッドを受容する という判断にしています。テスト実行の大幅な高速化がこのオーバーヘッドを十分に上回っているためです。
最終的な設定と効果
PHP Setup の時間がワークフロー全体の処理時間を超えてしまうような場合は、Blacksmith の導入は速度の悪化を招きます。このリポジトリでは、phpstan や typecheck のワークフローは GitHub 標準のランナーを引き続き利用することとしました。
| ワークフロー | メイン処理 | Blacksmith にすると |
|---|---|---|
| tests / vitest | テスト実行が長い(20〜136s) | 47%短縮 |
| lint(Setup PHP なし) | Setup PHP を使わない | 純粋に高速化 |
| phpstan | メイン処理 6s | 47%悪化 |
| typecheck | メイン処理 2s | 85%悪化 |
メイン処理の実行時間が Setup PHP のオーバーヘッドを十分に上回るかどうか、を導入の判断軸としてください。


小規模プロジェクトでは導入しないほうがいい?
PHP Setup の相性問題が残っている限りは、テストスイート全体が 1〜2分で終わるような小規模プロジェクトでは、Setup PHP の+60秒が全体に占める割合が大きく、Blacksmith にしたらむしろ遅くなります。前述の通り、メイン処理が短いワークフローでは悪化しました。
目安として、PHP プロジェクトで setup-php を使う場合、テスト実行だけで 2分以上かかっていなければ Blacksmith の恩恵はほぼない と考えてよいです。逆に、Setup PHP を使わないフロントエンド専用のワークフローであればこの制約はなく、小規模プロジェクトでも効果があります。
補足
なお、私たちの開発リポジトリではフロントエンド開発に Inertia を利用しているため、vitest に Ziggy のルート生成テストが含まれています。そのために vitest でも PHP Setup が必要という事情がありました。Inertia を利用していない場合には、更なる速度向上が見込めるかと思います。
導入手順
1. Blacksmith GitHub App をインストールする
- github.com/apps/blacksmith-sh にアクセス
- 対象の Organization を選択(Org Admin 権限が必要)
- リポジトリのアクセス範囲を選択
App をインストールしただけではワークフローに影響しません。
runs-on: blacksmith-*を明示的に指定したジョブだけが Blacksmith で実行されます。
2. 効果の高いワークフローから選択的に切り替える
runs-on: blacksmith-4vcpu-ubuntu-2404
切り替えの優先順位:
- テスト系(実行時間が長く、CPU が要)→ 効果大
- フロントエンド lint/build(Setup PHP なし)→ 純粋に高速化
- PHP lint/静的解析(Setup PHP あり、メイン処理が短い)→ 個別に検証が必要
- Claude Code Review 等の AI レビュー → 実行時間の大半が API 待ち時間のため、ランナー性能を上げても効果はほとんどない。切り替えは不要
まとめ
| 観点 | 結果 |
|---|---|
| テスト実行時間 | Pest 81%短縮、Vitest 88%短縮 |
| ワークフロー全体 | tests / vitest ともに 47%短縮 |
| 導入コスト |
runs-on の1行変更 |
| ロールバック | 1行戻すだけ |
| 注意点 |
setup-php との相性問題あり。ワークフローごとに効果検証が必要 |
Blacksmith は「低リスクで導入でき、効果の高いワークフローだけを選択的に適用できる」のが最大の強みです。導入を検討する場合、まずは重いテスト系ワークフローだけを切り替えて効果を実測し、段階的に展開していくのをおすすめします
Discussion