GitHub Actionsのcustom images変更点|既存カスタムイメージからのビルドで確認すべきこと

GitHub Actions の custom images を使っている組織は、今回の「Actions: Build custom images from custom images」により、既存のカスタムイメージを土台にして新しいカスタムイメージを作れるようになりました。要点は、共通ツールを入れたベースイメージを中央管理し、各チームがその上に必要な依存関係を追加できるようになったことです。あわせて、snapshot に条件分岐を付けられるようになり、イメージの新バージョンを作るタイミングをより細かく制御できます。GitHub Changelog では 2026年6月18日付の更新として掲載されていますが、日本時間で確認する場合は 2026年6月19日頃の変更として扱われるケースがあります。(The GitHub Blog)

目次

Actions: Build custom images from custom images は何が変わった?

今回の変更は、GitHub-hosted larger runners 向けの custom images を使うチームに影響します。従来は、各チームが個別にイメージ生成ワークフローを持つと、同じセットアップ処理やツール導入が重複しやすい構成になりがちでした。今回の更新により、既存のカスタムイメージをベースにして別のカスタムイメージを作れるため、共通部分とチーム固有部分を分けやすくなります。(The GitHub Blog)

たとえば、全社共通のベースイメージに Node.js、Java、セキュリティスキャン用CLI、社内証明書、共通設定を入れておきます。その上で、フロントエンドチームは Playwright や pnpm、バックエンドチームは Maven や .NET SDK、モバイルチームは専用ビルドツールを追加した派生イメージを作る、といった運用がしやすくなります。

もう一つの変更点は、snapshot キーワードに条件分岐を指定できるようになったことです。これにより、タグ作成時はイメージを作らない、main ブランチへのマージ時だけ作る、週次スケジュール実行時だけ作る、といった制御がしやすくなります。(The GitHub Blog)

変更点これまで起きやすかった課題期待できる効果
既存のカスタムイメージをベースに新しいカスタムイメージを作成可能チームごとに同じツール導入処理を繰り返していた共通レイヤーを再利用し、重複を減らせる
レイヤー型のイメージ運用が可能ベース環境とチーム固有環境の責任範囲が曖昧だったプラットフォームチームと開発チームで管理範囲を分けやすい
snapshot に条件分岐を設定可能不要なイメージバージョンが作成されやすかったテスト、検証、本番反映のタイミングを制御しやすい

影響を受ける対象者

今回の変更を確認すべきなのは、主に GitHub Actions で GitHub-hosted larger runners と custom images を使っている組織です。GitHub Docs では、GitHub-hosted larger runners は GitHub Team または GitHub Enterprise Cloud を利用する organization / enterprise 向けとされています。(GitHub Docs)

特に、次のような運用をしている場合は確認優先度が高いです。

  • CI 実行前に毎回大量のツールや依存関係をインストールしている
  • 複数リポジトリで似たような GitHub Actions のセットアップ処理を繰り返している
  • organization または enterprise 単位で runner や runner group を管理している
  • セキュリティパッチ適用済みの標準ビルド環境を各チームに配布したい
  • custom images のバージョンが増えすぎて、管理やストレージ使用量が気になっている

一方で、通常の GitHub-hosted runner だけを使っている場合や、self-hosted runner を自前で管理しているだけの場合は、今回の変更による直接の影響は限定的です。ただし、CI 時間短縮や標準環境の統一を検討しているなら、larger runners と custom images の採用判断材料になります。

すぐ確認したい設定と運用ポイント

まず確認すべきなのは、自社の organization または enterprise で custom images が有効になっているかです。GitHub Docs では、custom images を作成するにはポリシーで有効化されていること、作成・管理には organization / enterprise owner、CI/CD Admin ロール、または必要な細かい権限が必要とされています。(GitHub Docs)

確認項目確認する理由見直しの目安
custom images の利用ポリシー組織全体で機能が有効かを確認するためenterprise / organization の Actions policy を確認
image-generation runner の runner group誰がイメージ生成できるかに直結するため本番用と検証用を分ける
ベースイメージの管理者共通環境の変更が全チームへ波及するためプラットフォームチームが管理する
派生イメージの所有者チーム固有の依存関係を誰が更新するか明確にするためリポジトリまたはチーム単位で責任者を決める
snapshot の条件不要なバージョン作成を防ぐためmain、schedule、手動実行などに限定する
イメージの有効期限と保持方針古いイメージや派生イメージの期限切れを防ぐため保持期間と更新頻度をセットで設計する

実務で使いやすい構成例

おすすめは、「全社共通ベース」「チーム別ベース」「リポジトリ固有」の3層に分ける考え方です。すべてを1つの巨大なイメージに詰め込むと、変更の影響範囲が広くなり、不要なツールまで全ジョブに含まれてしまいます。逆に、リポジトリごとに完全に別イメージを作ると、重複が増えて保守が難しくなります。

レイヤー入れるものの例管理者
共通ベースイメージOS標準設定、共通CLI、セキュリティツール、証明書、基本ランタイムプラットフォームチーム
チーム別イメージNode.js系ツール、Java系ツール、.NET SDK、テストフレームワーク各開発チーム
リポジトリ固有設定特定プロジェクトだけで使うビルドツールや依存関係リポジトリ担当者

この構成にすると、セキュリティパッチや共通ツールの更新はベースイメージ側で管理し、各チームは自分たちに必要な依存関係だけを追加できます。CI の高速化だけでなく、「どの環境でビルドされたのか」を追跡しやすくなる点もメリットです。

snapshot 条件分岐で不要なイメージ作成を防ぐ

custom images の生成では、snapshot キーワードを含むジョブが成功すると新しいイメージまたは新しいバージョンが作成されます。GitHub Docs では、snapshot の文字列構文と mapping 構文が説明されており、今回の更新により mapping 側で if 条件を使ってスナップショット作成を制御できます。(GitHub Docs)

たとえば、タグビルドではイメージを作らず、それ以外の実行時だけ作る場合は次のような考え方になります。

jobs:
  build:
    runs-on: my-image-generation-runner
    snapshot:
      if: ${{ ! startsWith(github.ref, 'refs/tags/') }}
      image-name: my-custom-image
      version: 2.*
    steps:
      - name: Install dependencies
        run: |
          echo "Install tools here"

実務では、次のように条件を決めると運用しやすくなります。

作成タイミング向いているケース注意点
週次スケジュールセキュリティパッチや依存関係を定期更新したい生成後の動作確認を自動化する
main ブランチへのマージ時ベース環境の変更をコードレビュー後に反映したい軽微な変更でもイメージが増えすぎないようにする
手動実行検証後に任意のタイミングで作りたい実行者の権限管理を厳格にする
タグ作成時は除外リリースタグ作成とイメージ生成を分けたいリリース手順書にイメージ更新タイミングを書く

バージョン管理と Latest 指定の注意点

custom images では、同じイメージ名で生成を繰り返すとバージョンが増えていきます。GitHub Docs では、初回は 1.0.0、同名イメージが存在する場合は 1.1.01.2.0 のようにマイナーバージョンが増える挙動が説明されています。また、mapping 構文で major version を指定すると、その major version 配下で新しい minor version が作成されます。(GitHub Docs)

注意したいのは、runner 側で Latest を使うか、特定バージョンに固定するかです。Latest を選ぶと新しいイメージバージョンが利用されやすくなりますが、予期しない依存関係更新の影響を受ける可能性があります。安定性を重視する本番ビルドでは、検証済みの特定バージョンに固定し、更新時だけ明示的に切り替える運用が安全です。

指定方法メリット注意点
Latest最新の共通環境を自動的に使いやすい変更の影響が突然出る可能性がある
特定バージョン固定再現性を確保しやすい更新作業を手動で行う必要がある
major version 指定で生成大きな更新単位を分けやすい古い major に新しい minor を作ると Latest の扱いに注意が必要

派生イメージでは有効期限に注意する

既存のカスタムイメージをベースに派生イメージを作る場合、見落としやすいのが有効期限です。GitHub Docs では、カスタムイメージから作られた派生イメージは、ベースイメージの有効期限タイムラインを引き継ぐと説明されています。つまり、派生イメージを作った日ではなく、ベースイメージが作られた日を基準に期限が計算されます。(GitHub Docs)

たとえば、ベースイメージAを月曜日に作り、水曜日に派生イメージBを作った場合でも、保持ポリシーによってはBの期限がAに引きずられます。派生イメージだけを新しく作ったつもりでも、ベースが古いままだと想定より早く期限切れになる可能性があります。

このため、レイヤー型のイメージ運用を始めるなら、次の順序で更新するのが安全です。

  1. 共通ベースイメージを更新する
  2. ベースイメージのテストを実行する
  3. チーム別の派生イメージを再生成する
  4. 主要リポジトリのCIで検証する
  5. runner の image version を切り替える

コストとストレージ使用量の見直しも必要

custom images は CI の高速化に役立ちますが、作成頻度を上げすぎるとイメージバージョンが増え、ストレージ使用量も増えます。GitHub Docs では、custom images を使うジョブは対象の larger runner と同じ分単位料金で課金され、custom images のストレージは GitHub Actions storage として別途課金されると説明されています。(GitHub Docs)

特に、snapshot を含むジョブが成功するたびに新しいイメージバージョンが作成される点は重要です。不要なブランチや検証用コミットで毎回イメージを作る設定にすると、短期間で古いバージョンが増えます。今回の snapshot 条件分岐は、この問題を抑えるためにも活用できます。

セキュリティ面で確認すべきこと

custom images は、CI 環境の土台そのものです。悪意あるコードや不適切な設定がイメージに入ると、そのイメージを使う複数のリポジトリに影響します。GitHub Docs では、image-generation runner を専用 runner group に分けること、本番用と開発・検証用の runner group を共有しないこと、public repository に image-generation runner へのアクセスを許可しないことなどがベストプラクティスとして示されています。(GitHub Docs)

実務では、少なくとも次の3点を確認してください。

確認項目推奨対応
image-generation runner にアクセスできるリポジトリ必要最小限に限定し、定期的に棚卸しする
本番用イメージ生成ワークフローprotected branch、CODEOWNERS、レビュー必須の運用と組み合わせる
write 権限を持つユーザー任意ブランチからイメージ生成できないよう、権限とトリガー条件を見直す

特に、本番用イメージを生成できる runner group を開発・検証用リポジトリにも開放する運用は避けるべきです。便利に見えますが、意図しない変更が本番CI環境に混入するリスクが高くなります。

GitHub利用者が今すぐやるべきこと

今回の変更は、すぐに既存ワークフローを壊すタイプの変更ではありません。ただし、custom images をすでに使っている組織にとっては、CI環境の設計を整理する良いタイミングです。

まず、現在の custom images と runner group を棚卸ししてください。次に、共通化できる依存関係をベースイメージへ移し、チーム固有の依存関係は派生イメージに分ける構成を検討します。そのうえで、snapshot に条件分岐を追加し、不要なイメージ生成を抑えます。

最後に、バージョン固定、Latest 利用、有効期限、ストレージ使用量、アクセス権限をセットで確認してください。レイヤー型の custom images は便利ですが、管理者不在で増やすと、どのイメージが安全で最新なのか分からなくなります。小さく始めるなら、まずは「全社共通ベースイメージを1つ作り、1〜2チームで派生イメージを試す」運用から始めるのが現実的です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次