資料 - ランナー
GitHub Actionsの実行環境であるランナーには、現在3つの選択肢があります。それぞれの特徴を理解することで、プロジェクトの要件に最適な環境を選択できます。本記事では、GitHub-hostedランナー、Larger runners、Self-hostedランナーの仕様と使い分けについて詳しく解説します。
1. GitHub-hostedランナー(標準)
GitHubが提供・管理する標準的な実行環境です。インフラの管理が不要で、すぐに使い始められる点が最大の魅力です。
1.1 パブリックリポジトリ向けスペック
パブリックリポジトリでは、無料かつ無制限で利用できます。各OSで以下のスペックが提供されています。
| OS | CPU | メモリ | ストレージ | アーキテクチャ | ワークフローラベル |
|---|---|---|---|---|---|
| Linux | 4 | 16 GB | 14 GB | x64 |
ubuntu-latest, ubuntu-24.04, ubuntu-22.04
|
| Linux | 1 | 5 GB | 14 GB | x64 | ubuntu-slim |
| Windows | 4 | 16 GB | 14 GB | x64 |
windows-latest, windows-2025, windows-2022
|
| Linux | 4 | 16 GB | 14 GB | arm64 |
ubuntu-24.04-arm, ubuntu-22.04-arm
|
| Windows | 4 | 16 GB | 14 GB | arm64 | windows-11-arm |
| macOS | 4 | 14 GB | 14 GB | Intel |
macos-13, macos-15-intel
|
| macOS | 3 (M1) | 7 GB | 14 GB | arm64 |
macos-latest, macos-14, macos-15, macos-26 (プレビュー) |
1.2 プライベートリポジトリ向けスペック
プライベートリポジトリでは、無料枠を消費した後に従量課金となります。パブリックリポジトリと比較してCPUとメモリが控えめに設定されています。
| OS | CPU | メモリ | ストレージ | アーキテクチャ | ワークフローラベル |
|---|---|---|---|---|---|
| Linux | 2 | 7 GB | 14 GB | x64 |
ubuntu-latest, ubuntu-24.04, ubuntu-22.04
|
| Linux | 1 | 5 GB | 14 GB | x64 | ubuntu-slim |
| Windows | 2 | 7 GB | 14 GB | x64 |
windows-latest, windows-2025, windows-2022
|
| macOS | 4 | 14 GB | 14 GB | Intel |
macos-13, macos-15-intel
|
| macOS | 3 (M1) | 7 GB | 14 GB | arm64 |
macos-latest, macos-14, macos-15, macos-26 (プレビュー) |
1.3 ubuntu-slimランナーの特徴
軽量なタスク向けに最適化された1 CPUランナーです。以下の特徴があります。
- コンテナ内で実行(フルVMではない)
- ジョブタイムアウトは15分
- 最小限のツールセットのみインストール済み
- Issue操作や短時間ジョブに適している
- 重いCI/CDビルドには不向き
使用例:
name: "軽量タスク"
on: [push]
jobs:
quick-task:
runs-on: ubuntu-slim
steps:
- uses: actions/checkout@v4
- name: "シンプルなスクリプト実行"
run: echo "高速で軽量な処理"
1.4 注目すべき機能
1.4.1 Androidハードウェアアクセラレーション対応
Linux x64ランナーでは、Android SDKツール向けのハードウェアアクセラレーションがサポートされています。これによりAndroidテストの実行が大幅に高速化され、課金対象の実行時間も削減できます。
1.4.2 arm64 macOSランナーの制限事項
- ネストされた仮想化とMetal Performance Shaders(MPS)は未対応
- Azure VNetや固定IPアドレスは現在利用不可
- 静的UUID/UDIDは割り当てられません(Appleの仮想化フレームワークの制限)
- Intel macOSランナーには固定UDID
4203018E-580F-C1B5-9525-B745CECA79EBが割り当て済み
2. Larger runners(大規模ランナー)
GitHub TeamまたはGitHub Enterprise Cloudプランで利用可能な、より強力なマネージドランナーです。標準ランナーでは物足りないが、自前でインフラを管理したくない場合に最適です。
2.1 一般用途向けスペック
幅広い選択肢から、プロジェクトの要件に合ったスペックを選択できます。
| CPU | メモリ | ストレージ | アーキテクチャ | OS |
|---|---|---|---|---|
| 2 | 8 GB | 75 GB | x64, arm64 | Ubuntu |
| 4 | 16 GB | 150 GB | x64, arm64 | Ubuntu, Windows |
| 8 | 32 GB | 300 GB | x64, arm64 | Ubuntu, Windows |
| 16 | 64 GB | 600 GB | x64, arm64 | Ubuntu, Windows |
| 32 | 128 GB | 1200 GB | x64, arm64 | Ubuntu, Windows |
| 64 | 208 GB | 2040 GB | arm64 | Ubuntu, Windows |
| 64 | 256 GB | 2040 GB | x64 | Ubuntu, Windows |
| 96 | 384 GB | 2040 GB | x64 | Ubuntu, Windows |
注意事項:
- 4 vCPU Windowsランナーは、Windows Server 2025またはBase Windows 11 Desktopイメージでのみ動作します
2.2 GPU搭載ランナー
機械学習やグラフィックス処理などのGPU演算が必要なワークロードに対応します。
| CPU | GPU数 | GPUカード | メモリ | VRAM | ストレージ | OS |
|---|---|---|---|---|---|---|
| 4 | 1 | Tesla T4 | 28 GB | 16 GB | 176 GB | Ubuntu, Windows |
2.3 macOS Larger runners
| サイズ | アーキテクチャ | CPU | メモリ | ストレージ | ワークフローラベル |
|---|---|---|---|---|---|
| Large | Intel | 12 | 30 GB | 14 GB |
macos-latest-large, macos-13-large, macos-14-large, macos-15-large
|
| XLarge | arm64 (M2) | 5 (+8 GPUコア) | 14 GB | 14 GB |
macos-latest-xlarge, macos-13-xlarge, macos-14-xlarge, macos-15-xlarge, macos-26-xlarge (プレビュー) |
注意事項:
- 5 vCPU macOSランナーはパブリックプレビュー中です
2.4 高度な機能
Larger runnersでは、以下の追加機能が利用可能です。
固定IPアドレス
デフォルトでは動的IPアドレスが割り当てられますが、GitHub Enterprise Cloudの顧客は固定IPアドレスを設定できます。これにより、ファイアウォールのallowlist設定が可能になります。
- 全体で最大10個のLarger runnersに固定IPアドレスを設定可能
- 90日間未使用の場合、IPアドレス範囲は自動的に削除されます
- 10個以上必要な場合は、GitHubサポートへの連絡が必要です
Azure VNet対応
Azureプライベートネットワークとの統合により、セキュアなネットワーク環境を構築できます。
ランナーのグループ化
複数のランナーをグループ化して管理できます。
オートスケーリング
並行ワークフローに対応した自動スケーリングが可能です。
使用例:
name: "大規模ビルド"
on: [push]
jobs:
heavy-build:
runs-on: ubuntu-latest-64-cores # カスタムラベル例
steps:
- uses: actions/checkout@v4
- name: "並列ビルド"
run: make -j64
3. Self-hostedランナー(自前ホスト)
自分で用意・管理するランナーです。完全なカスタマイズが可能で、特殊な要件がある場合に最適です。
3.1 システム要件
対応OS
Linux系:
- Red Hat Enterprise Linux 8以降
- CentOS 8以降
- Oracle Linux 8以降
- Fedora 29以降
- Debian 10以降
- Ubuntu 20.04以降
- Linux Mint 20以降
- openSUSE 15.2以降
- SUSE Enterprise Linux (SLES) 15 SP2以降
Windows系:
- Windows 10 64-bit
- Windows 11 64-bit
- Windows Server 2016/2019/2022 64-bit
macOS:
- macOS 11.0 (Big Sur) 以降
対応アーキテクチャ
- x64:Linux、macOS、Windows
- ARM64:Linux、macOS、Windows(現在パブリックプレビュー)
- ARM32:Linux
ハードウェア要件
- 最低限のリソースで動作可能(ランナーアプリケーション自体は軽量)
- 実行するワークフローの種類に応じて十分なリソースを確保
- Dockerコンテナアクションやサービスコンテナを使用する場合は、Linuxマシン+Dockerのインストールが必須
ネットワーク要件
- 最低70 kbpsのアップロード/ダウンロード速度
- HTTPS接続(ポート443)が必須
- GitHubとの双方向通信が必要
3.2 ジョブルーティングの仕組み
Self-hostedランナーへのジョブ割り当ては、以下の優先順位で処理されます。
3.3 オートスケーリング
Self-hostedランナーは、ワークフローの負荷に応じて自動的にスケールできます。
3.3.1 推奨される実装方法
GitHubは、Kubernetesベースの公式オートスケーラー Actions Runner Controller (ARC) を推奨しています。ただし、Kubernetesの深い知識と経験が必要です。
3.3.2 Ephemeralランナーの活用
オートスケーリングには、使い捨て(Ephemeral)モードの使用を強く推奨します。
Ephemeralランナーの登録:
./config.sh --url https://github.com/yamada-taro --token サンプルトークン --ephemeral
メリット:
- 各ジョブに対してクリーンな環境を提供
- 前のジョブの機密情報が残留しない
- 侵害されたランナーが新しいジョブを受け取るリスクを軽減
- 1ジョブ処理後に自動的に登録解除される
注意点:
- Ephemeralランナーのログファイルは、外部ログストレージに転送する必要があります
- 本番環境に導入する前に、ログの転送と保存を確実に実装してください
3.3.3 Webhook駆動のオートスケーリング
workflow_job webhookのペイロードには、ワークフローのライフサイクルに対応したactionキーが含まれます。
-
queued:ジョブがキューに追加された -
in_progress:ジョブが実行中 -
completed:ジョブが完了した
このwebhookを使用して、独自のオートスケーリング環境を構築できます。
Webhookペイロードを活用することで、リアルタイムにランナーの起動・削除を制御できます。
3.4 認証要件
リポジトリ・組織レベルのランナー(APIを使用)
アクセストークンに必要なスコープ:
- プライベートリポジトリ:
repo - パブリックリポジトリ:
public_repo - 組織:
admin:org
GitHub Appの場合:
- リポジトリ:
administration権限 - 組織:
organization_self_hosted_runners権限
エンタープライズレベルのランナー
アクセストークンに必要なスコープ:
manage_runners:enterprise
3.5 自動ソフトウェア更新の制御
デフォルトでは、新しいバージョンがリリースされると自動的に更新されます。コンテナでEphemeralランナーを使用する場合、この動作は非効率的です。
自動更新を無効化する方法:
./config.sh --url https://github.com/あなたの組織 --token サンプルトークン --disableupdate
注意事項:
- 自動更新を無効化した場合でも、30日以内にランナーバージョンを更新する必要があります
- 更新しない場合、GitHub Actionsサービスはジョブをキューに入れなくなります
- 重大なセキュリティ更新がある場合も、更新するまでジョブは割り当てられません
-
actions/runnerリポジトリの通知を購読して、新しいリリースを追跡することを推奨します
3.6 通信要件
Self-hostedランナーは、以下のGitHubドメインとの通信が必要です。
必須の通信先
基本操作に必要:
github.comapi.github.com*.actions.githubusercontent.com
アクションのダウンロード:
codeload.github.com
ジョブサマリー、ログ、成果物、キャッシュのアップロード/ダウンロード:
results-receiver.actions.githubusercontent.com*.blob.core.windows.net
ランナーバージョンの更新:
objects.githubusercontent.comobjects-origin.githubusercontent.comgithub-releases.githubusercontent.comgithub-registry-files.githubusercontent.com
OIDCトークンの取得:
*.actions.githubusercontent.com
GitHub Packagesのパッケージやコンテナのダウンロード/公開:
*.pkg.github.compkg-containers.githubusercontent.comghcr.io
Git Large File Storage:
github-cloud.githubusercontent.comgithub-cloud.s3.amazonaws.com
Dependabot更新ジョブ:
dependabot-actions.githubapp.com
リリース資産のダウンロード:
release-assets.githubusercontent.com
VNet:
api.snapcraft.io
ファイアウォール設定の注意点
一部のドメインはCNAMEレコードを使用して設定されています。ファイアウォールによっては、すべてのCNAMEレコードに対してルールを再帰的に追加する必要があります。CNAMEレコードは将来変更される可能性がありますが、上記のドメインは変わりません。
4. 選択基準のフローチャート
どのランナーを選択すべきか、以下のフローチャートを参考にしてください。
5. まとめ
GitHub Actionsのランナーは、用途に応じて3つの選択肢から選べます。
5.1 GitHub-hostedランナー(標準)
適している場合:
- パブリックリポジトリ(無料・無制限)
- 標準的なスペックで十分なプロジェクト
- インフラ管理を避けたい
- すぐに始めたい
制限事項:
- スペックは固定(最大4 CPU、16 GB RAM)
- ネットワーク設定のカスタマイズ不可
- 動的IPアドレスのみ
5.2 Larger runners(大規模ランナー)
適している場合:
- より高いスペックが必要(最大96 CPU、384 GB RAM)
- GPU演算が必要
- 固定IPアドレスが必要
- Azure VNetとの統合が必要
- マネージド環境を維持したい
制限事項:
- GitHub TeamまたはEnterprise Cloudプラン必須
- 追加コストが発生
- macOSでは一部機能に制限あり
5.3 Self-hostedランナー(自前ホスト)
適している場合:
- 完全なカスタマイズが必要
- オンプレミス環境が必須
- 特殊なハードウェア・ソフトウェア要件がある
- 厳格なコンプライアンス要件がある
- 大規模なオートスケーリングが必要
制限事項:
- インフラの管理・保守が必要
- セキュリティ対策は自己責任
- ネットワーク設定の構築が必要
- 30日以内の定期的なソフトウェア更新が必須
5.4 最後に
プロジェクトの規模、セキュリティ要件、予算、運用体制を考慮して、最適なランナーを選択してください。小規模なプロジェクトはGitHub-hostedから始め、必要に応じてLarger runnersやSelf-hostedに移行する段階的なアプローチも有効です。
特にSelf-hostedランナーを検討する場合は、Ephemeralモードでの運用とログの外部保存を必ず実装し、セキュリティとトレーサビリティを確保してください。