GitHub Actionsのカスタムランナーイメージが一般提供開始
GitHubは、GitHub Actionsのホストランナー向けカスタムイメージ機能をパブリックプレビューから脱却し、一般提供を開始したと発表した。
キーポイント
機能の一般提供開始
GitHub Actionsのホストランナー向けカスタムイメージ機能が、2026年4月にパブリックプレビューを終え、一般提供(GA)フェーズに入った。
カスタムイメージの構築
チームはGitHubが承認したベースイメージを使用し、自身のワークフロー要件に合った仮想マシンイメージを構築できるようになる。
開発背景
この機能は2025年10月にパブリックプレビューとして開始され、約6ヶ月間のテスト期間を経て正式リリースに至った。
影響分析・編集コメントを表示
影響分析
このリリースにより、開発チームはCI/CDパイプラインの実行環境をより細かくカスタマイズできるようになり、ビルド時間の短縮や依存関係の管理効率向上が期待される。ただし、これは既存プラットフォーム機能の拡張であり、業界を根本から変えるような破壊的革新ではない。
編集コメント
DevOpsワークフローの柔軟性向上につながる実用的なアップデート。大規模な技術的革新ではないが、日常的な開発効率に直接影響を与えるため、現場の開発者には注目すべきリリースと言える。
GitHub は本日、ホスト型ランナー用のカスタムイメージの利用開始を発表しました。これにより、昨年 10 月に始まったパブリックプレビューフェーズが正式に終了し、一般利用が可能となりました。この機能により、チームは GitHub 公認のベースイメージを使用し、ワークフローの要件に完全に適合する仮想マシンイメージを構築できるようになります。
この前提はシンプルであり、大規模な CI(Continuous Integration)を管理した経験がある人なら誰でもよく知る問題を解決するものです。標準的な GitHub ホストランナーでワークフローが実行されるたびに、ツールチェーンは最初からインストールされます。Node や Python のランタイム、言語固有の SDK、内部証明書、カスタムバイナリなど、すべてのリソースが実行されるたびに、ジョブごとに再ダウンロードされます。カスタムイメージはこのモデルを逆転させます:すべての要素を一度にビルド(焼き込み)し、その後のジョブではセットアッププロセスを完全にスキップします。
このプロセスには 3 つのステップがあります。まずイメージ生成用のランナーを設定し、スナップショットキーワードを含むワークフローを実行し、その後そのイメージを使用するランナーを作成します。スナップショットキーワードが中核的なメカニズムとなります。このキーワードを含む各ジョブは個別のイメージを作成します。実行が成功するたびに新しいバージョンが生成され、GitHub はマイナーバージョン番号を自動的にインクリメントします。より厳格な管理を望むチームは、マッピング構文を使用して特定のメジャーバージョンに固定できます。また、ランナーは最新バージョンを使用するように設定するか、特定の数値のバージョンにロックすることができます。最新バージョンに固定されたランナーは、新しいバージョンが生成されると次回の実行時に自動的に新しいイメージを取得します。一方、特定のバージョンに固定されたランナーは、誰かが手動で更新するまで変更されません。
GitHub は、イメージの生成を週次タスクとして設定することを推奨しています。これにより依存関係が最新に保たれ、セキュリティパッチが定期的に適用されることを保証します。これは理にかなった助言ですが、カスタムイメージは管理すべき別のアーティファクトにもなることを意味します。これらは生成、バージョン管理、場合によっては監査が必要です。ドキュメントにはガバナンスに関する言及もあります。エンタープライズオーナーは、Actions のポリシー設定でカスタムイメージへのアクセスを管理し、保持ポリシーを設定できます。
この機能は大型ランナーでのみ利用可能であり、つまり GitHub Team または GitHub Enterprise Cloud プランに紐づいています。無料ティアの組織はこの機能を使用できません。イメージ生成用ランナーのプラットフォームは、構築されるイメージのプラットフォームと一致する必要があります。具体的には Linux x64、Linux ARM64、または Windows x64 です。
この機能が何ではないかを明確にすることが重要です。これは汎用の VM イメージパイプラインではありません。外部から任意の AMI や GCP マシンイメージを持ち込むことはできません。基盤は GitHub が選定したベースイメージ、または GitHub からのクリーンな OS のいずれかです。イメージは GitHub エコシステム内に留まります。コンテナレジストリではなく、組織の Actions 設定内の「Custom images」セクションでイメージを確認できます。CI プロバイダー間でイメージを再利用したり、GitHub Actions ワークフロー外でイメージを構築したりするチームは、それらを別途管理する必要があります。
プリウォーム化されたカスタマイズ可能な実行環境の問題は新しいものではありません。異なる CI プラットフォームは、これまでにさまざまな方法でこの課題に対処してきました。
GitLab CI では、チームは .gitlab-ci.yml 内で任意のコンテナイメージを指定できます。つまり、ジョブを GitLab 自身のレジストリにあるものでも、外部のレジストリにあるものでも、簡単に指し示すことができます。プロビジョニングのための追加ステップは不要です。イメージはジョブ開始時にプルされます。GitLab Runner は、VM レベルでの実行のために Docker、Kubernetes、シェルなどの複数のエグゼキュータータイプを提供しており、これによりチームは計算リソースのスケールアップに関する選択肢を持てます。config.toml 内のランナー設定は、プルポリシー、レジストリの認証情報、およびキャッシングの動作を管理します。GitLab のモデルはイメージソースに対してより寛容ですが、イメージライフサイクル管理の責任をチームに多く負わせます。
CircleCI は二つのトラック(アプローチ)を採用しています。チームは、フルシステムアクセスを持つマシンエグゼキューター上で実行するか、特定の要件を満たすために Docker イメージを持ってくるかを選択できます。カスタム Docker イメージは、CircleCI のコンテナランナーと自然に連携します。ここでは、チーム自身がイメージを定義および公開し、ジョブ設定でそれを参照します。コンテナランナーはコンテナ化されたジョブを受け取り、一時的な Pod でスケジューリングし、タスクをコンテナ環境内で実行します。これには CircleCI のコンビニエンスイメージとカスタム Docker イメージの両方がサポートされています。CircleCI のクラウドにおけるマシンエグゼキューター用のカスタム VM レベルのイメージ(事前に焼き込まれた AMI など)は長年にわたり要望されてきましたが、ユーザーらは GitLab が同様のサポートをすでに提供していることに気づいています。フルな OS レベルの制御が必要なチームに対する CircleCI の回答は、主にセルフホストランナーとなっています。
GitHubのカスタムイメージへのアプローチは、AWSで事前に焼き付けられたAMIを使用したセルフホストランナープールやPacker管理のイメージライブラリを使用することと似ています。ただし、これは完全にマネージドであり、プラットフォームに統合されています。そのトレードオフは、あらゆるマネージドソリューションで得られるものと同じです:運用オーバーヘッドを減らす代わりに柔軟性が少なくなります。このトレードオフの価値は、ビルド環境の複雑さに依存します。また、組織がランナーイメージを重要なアーティファクトとして扱う準備ができているかどうかにも依存します。これらには、独自のバージョン管理と更新スケジュールが必要です。
著者について
Claudio Masolo
ClaudioはNearformのシニアDevOpsエンジニアです。
余暇には、ランニング、読書、古いビデオゲームをプレイすることが好きです。
原文を表示
GitHub has just announced the availability of custom images for its hosted runners. They've finally left the public preview phase that started back in October behind them. This feature will enable teams to use a GitHub-approved base image and then construct a virtual machine image that really meets their workflow requirements.
The premise is straightforward, and the problem it solves is familiar to anyone who has managed CI at scale. Every time a workflow runs on a standard GitHub-hosted runner, it installs tooling from scratch. Node, Python runtimes, language-specific SDKs, internal certificates, custom binaries, all of it downloaded again, every run, every job. Custom images flip that model: you bake everything in one go, and later jobs bypass the setup completely.
The process has three steps: set up an image-generation runner, run a workflow with the snapshot keyword, then create a runner that uses that image. The snapshot keyword is the core mechanism. Each job with the keyword creates a separate image. Every successful run produces a new version; GitHub automatically increments the minor version number. Teams that want tighter control can pin to a specific major version using the mapping syntax, and runners can be configured to use the latest or locked to a specific version number. A runner pinned to the latest will pick up the new image automatically the next time a new version is generated; one pinned to a specific version stays put until someone manually updates it.
GitHub suggests setting up image generation as a weekly task. This helps keep dependencies up to date and ensures security patches are applied regularly. That's sensible advice, but it also means custom images are another artifact to manage; they need to be generated, versioned, and potentially audited. Governance gets a nod in the documentation: enterprise owners can manage access to custom images and set retention policies in the Actions policy settings.
The feature is exclusively available on larger runners, which means it is tied to the GitHub Team or GitHub Enterprise Cloud plans. Organizations on the free tier cannot use it. The platform of the image-generation runner must match the platform of the image being built: Linux x64, Linux ARM64, or Windows x64.
It's important to clarify what this feature isn't. It isn’t a general-purpose VM image pipeline. You can’t bring in any arbitrary AMI or GCP machine image from outside. The foundation is either a GitHub-curated base or a clean OS from GitHub. The image remains within the GitHub ecosystem. You can locate it in the organization's Actions settings under "Custom images," rather than in your own container registry. Teams hoping to reuse images across CI providers or build images outside GitHub Actions workflows will need to manage that separately.
The issue of pre-warmed, customizable execution environments isn’t new. Different CI platforms have tackled it in various ways.
GitLab CI lets teams specify any container image in .gitlab-ci.yml. This means they can easily point a job to an image in their registry, whether it's GitLab’s or an external one. There's no extra step needed for provisioning. The image is pulled at job start. GitLab Runner offers several executor types for VM-level execution, such as Docker, Kubernetes, and shell. This gives teams options for scaling compute. The runner configuration in config.toml manages pull policy, registry credentials, and caching behaviour. GitLab's model is more permissive about the image source but puts more of the image lifecycle management responsibility on the team.
CircleCI takes a two-track approach. Teams can run on machine executors with full system access, or bring their Docker images to meet specific requirements. Custom Docker images work naturally with CircleCI's container runner, where you define and publish the image yourself and reference it in the job configuration. The container runner takes containerized jobs, schedules them in a temporary pod, and runs the tasks in a container environment. It supports both CircleCI convenience images and custom Docker images. Custom VM-level images for the machine executor on CircleCI's cloud, like pre-baked AMIs, have long been requested. Users have noted that GitLab has provided similar support for some time now. CircleCI's answer for teams that need full OS-level control has mostly been self-hosted runners.
GitHub's approach to custom images is similar to using a self-hosted runner pool with pre-baked AMIs on AWS or a Packer-managed image library. However, it is fully managed and integrated into the platform. The tradeoff is the same one you get with any managed solution: less flexibility in exchange for less operational overhead. The value of that tradeoff depends on the complexity of your build environment. It also depends on whether your organization is ready to treat runner images as important artifacts. These need their own versioning and update schedules.
About the Author
Claudio Masolo
Claudio is a Senior DevOps Engineer at Nearform.
In his spare time, he likes running, reading, and playing old video games.
関連記事
リポジトリ内の全プロジェクトの Git 設定を編集可能に
Vercel は、モノレポで多数のプロジェクトを展開するユーザー向けに、各プロジェクトの Git 設定(コミットステータスやリポジトリディスパッチイベントなど)を一括で管理・適用できる機能を追加した。これにより、個別の設定画面へのアクセスが不要となり、効率的な運用が可能になった。
Elastic Build Machines がメモリ不足ビルドから保護へ
Vercel は、ビルドのメモリ使用量を監視し、メモリ不足による失敗を防ぐため自動的にマシンをアップグレードする機能を Elastic Build Machines に導入した。これにより、高速だがメモリ集約的なビルドでもダウングレードされなくなる。
デプロイメント一覧の再設計
Vercel は、より多くのデプロイメントを一度に表示できる高密度レイアウトへデプロイメント一覧を再設計しました。環境がステータスと共にグループ化され、ブランチやコミットの確認が容易になりました。また、モバイル環境での使い勝手も向上しています。