CIランナー
CIランナーとは、CI/CDパイプラインのジョブを実行するマシンです。CIサービスからジョブを受け取り、ステップを実行して、結果を報告します。
最終更新日:2026年11月11日
CIランナーとは、CI/CDパイプラインのジョブを実行する物理または仮想のマシンです。CIサービスからジョブを受け取り、コードをチェックアウトし、ステップを実行して、結果を報告します。JenkinsやAzure Pipelinesでは同じものをエージェントと呼び、ほかのシステムではエグゼキューターと呼びます。
GitHub Actionsでのランナーの仕組み
どのランナーがジョブを受け取るかは、ワークフローのruns-onラベルで決まります。GitHubはジョブのラベルとグループに一致するオンラインのランナーを探し、どのランナーにも受け取られなかったジョブはキューに残り、24時間後に失敗します(GitHubのセルフホストランナーのリファレンス)。ランナーアプリケーションはHTTPSでGitHubに外向きに接続してジョブを受け取り、ジョブの実行中はログをストリーミングで返し、エフェメラルランナーの場合は終了後に破棄されます。
GitHubはコントロールプレーンで、リポジトリ、ワークフローファイル、シークレットの保存、ログ、チェックを保持します。実際の作業を行うのはランナーです。
ランナーの3つの種類
- CIベンダーがホストするランナー。 GitHubホステッドランナーはジョブごとに新しい仮想マシンを用意し、ビルド時間で課金されます。
- セルフホストランナー。 自社のマシンで、パッチ適用、分離、スケーリングは自社で行います。マネージドランナーとセルフホストランナーの比較をご覧ください。
- サードパーティのマネージドランナー。 プロバイダーがマシンを運用し、マシンはセルフホストランナーとしてGitHubに登録されます。GitHub Actionsランナープロバイダーの比較をご覧ください。
ランナーには、新しいマシンで1つのジョブだけを実行するエフェメラル型と、同じマシンで多くのジョブを実行する永続型があります。エフェメラルランナーのほうが安全です。あるジョブが残したファイルや認証情報が、次のジョブに一切届かないからです。
ランナーがセキュリティ上重要な理由
ランナーは、ソースコード、シークレット、ダウンロードされた依存関係が一か所に集まる場所です。ジョブのトークンやクラウドの認証情報を保持し、パッケージのインストールスクリプトをすべて実行し、ビルドが行うネットワーク接続をすべて行います。侵害された依存関係は、ランナーの権限で動作します。
つまり、ランナーはセキュリティ境界です。ジョブ同士を分離し、エグレスポリシーでランナーの到達先を制限し、各ジョブが取得したものを記録してください。
CRACI
CRACIはGitHub Actionsのランナーです。ワークフローはGitHubに置いたまま、runs-on: craciでジョブを移せ、実行結果も引き続きGitHubに表示されます。各ジョブは、エグレスポリシーのもとでそれぞれ分離された仮想マシンで実行され、取得したもののSBOMを生成します。CRACIのランナーとCRACIとGitHubホステッドランナーの比較をご覧ください。
CRACIは現在、GitHub Actions向けのLinuxジョブのみを実行します。GitLab CI、Jenkins、Windows、macOS向けのランナーは、各ベンダーから提供されるものか、セルフホストで用意することになります。