ソースコードを変えていないのに、CIが突然失敗する。原因がアプリではなく、実行環境の更新にあることもあります。GitHub Actionsでubuntu-latestを使っているチームは、次のOS移行を確認しておきましょう。
GitHubは2026年9月17日、Ubuntu 26.04のGitHub-hosted runnerを一般提供に移したと発表しました。x64とarm64が対象です。本稿はこの発表を基に、実行環境を段階的に検証する方法を整理します。GitHub公式発表
<style> .u26-summary,.u26-note{padding:1.2rem;margin:1.5rem 0;border:1px solid #cad5e6;border-radius:16px;background:#eef4ff;color:#172d45}.u26-summary p:last-child,.u26-note p:last-child{margin-bottom:0}.u26-cards,.u26-timeline{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));gap:12px;margin:1.5rem 0}.u26-card,.u26-stage{padding:1.15rem;border:1px solid #cad5e6;border-radius:14px;background:#fff;color:#172d45}.u26-stage strong{display:block;font-size:1.7rem;color:#a63713}.u26-stage h3,.u26-card h3{margin-top:0}.u26-table{overflow-x:auto;margin:1.5rem 0}.u26-table table{border-collapse:collapse;width:100%;min-width:650px}.u26-table th,.u26-table td{padding:.85rem;border:1px solid #cad5e6;text-align:left}.u26-table th{background:#e8effc;color:#172d45}.u26-note{background:#fff5e6;border-left:5px solid #9d5c00}.u26-flow{padding:1.2rem;border:1px solid #cad5e6;border-radius:16px;background:#f3f7fc;color:#172d45}.u26-flow li{margin:.65rem 0} </style>① 新OSを明示的に選べるようになりました。既存CIは先に比較試験を行えます。
② latestの切替は段階的。全ワークフローが同じ日に変わるわけではありません。
③ 旧OSへの一時固定は猶予策。互換性試験と移行担当をセットにします。
公式発表によると、ubuntu-latestはUbuntu 24.04から26.04へ、2026年10月19日~11月19日に段階移行する予定です。準備が間に合わない場合は、ubuntu-24.04の明示指定が案内されています。移行期間と回避策
26.04を明示選択して検証。
24.04から段階的に切替。
公式に案内された期間の終了予定。
これは24.04イメージ自体の廃止日を示すものではありません。また、一般提供は「自分たちのアプリが動作保証される」という意味でもありません。
GitHub Docsは、-latestをGitHubが提供する最新の安定イメージと説明しています。OSベンダーの最新リリースと常に一致するラベルではなく、実行されたランナーはワークフローログで確認できます。ランナー仕様とログの確認
runner-imagesの公式告知では、選抜された比較項目として次の値が掲載されています。これは告知時点の表であり、以後のイメージ更新を固定するものではありません。公式のソフトウェア比較
| 項目 | 24.04側 | 26.04側 | 読み方 |
|---|---|---|---|
| OS | 24.04.5 LTS | 26.04.1 LTS | OS世代が変わる。 |
| カーネル | 6.17.0-1022-azure | 7.0.0-1012-azure | 低レベル依存の動作も確認。 |
| systemd | 255.4-1ubuntu8.17 | 259.5-0ubuntu3.4 | サービス制御を使う処理は検証対象。 |
| Docker Buildx | 0.37.0 | 0.37.0 | この比較時点では同じ。 |
数字が同じツールがあっても、システムライブラリやアーキテクチャまで同じとは限りません。例えば、ネイティブ拡張、配布バイナリ、ブラウザー試験の依存関係、aptで導入するパッケージなどを、検証対象として洗い出すのが実務上の出発点です。これは本稿の確認提案であり、特定の障害が発生したという報告ではありません。
先日のNode20削除・Node24移行の記事では、JavaScript Actionの実行ランタイムを整理しました。今回の更新点はホストOSイメージの一般提供とlatestラベルの切替日程です。
Actionの更新を済ませても、OS互換性試験が終わったことにはなりません。逆にOSを24.04に固定しても、Actionの実行ランタイム移行への対応を代替できません。変更項目を分けて管理すると、失敗原因を切り分けやすくなります。
`runs-on`で選択。システム依存関係を検証する。
プロジェクトの要件に合わせて設定。既定値への暗黙依存を減らす。
依存Actionと自作Actionの互換性を別途確認する。
次は手動実行する環境診断専用のワークフロー例です。リポジトリのコードは取得せず、デプロイもしません。実際のアプリ試験を代替するものではなく、OSとツールの差を可視化する最初の一歩です。本記事制作時にこの例をGitHub Actions上で実行したわけではありません。
マトリクスは同じジョブ定義を複数条件で実行する仕組みです。fail-fast: falseを使い、一方で失敗しても他方の診断結果を取得できるようにします。GitHub Docsのマトリクス仕様
name: Compare Ubuntu runner environments
on:
workflow_dispatch:
permissions: {}
jobs:
inventory:
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, ubuntu-26.04]
runs-on: ${{ matrix.os }}
timeout-minutes: 10
steps:
- name: Inspect OS and selected tools
shell: bash
run: |
cat /etc/os-release
uname -srmo
for tool in git node npm docker; do
if command -v "$tool" >/dev/null 2>&1; then
"$tool" --version
else
printf '%s: not installed\n' "$tool"
fi
done
手動実行には、対象ワークフローをデフォルトブランチに置くなどGitHub側の要件があります。実行権限や組織のActionsポリシーも確認してください。手動実行の要件 環境変数を丸ごとログへ出す必要はありません。
診断後は、同じコミット・同じ依存関係でビルドと試験を比較します。既存のチェックアウト、ツール設定、インストール、テストの手順を検証用ジョブへ適用し、アクション参照や言語バージョンは比較の途中でむやみに変更しないようにします。
移行検証のマトリクスへ、公開・本番デプロイをそのまま複製しないでください。 新旧の2ジョブが同じ公開先へ書き込むと、重複リリースや上書きが起きるおそれがあります。成果物の検証とリリース承認を分けてください。
以下は本稿の実務提案です。「緑のチェックが出た」だけでなく、何を比較したかを記録します。
| 確認項目 | 24.04 | 26.04 | 合格条件の例 |
|---|---|---|---|
| 必須試験 | 結果を記入 | 結果を記入 | 同じ必須試験が成功。 |
| 成果物の動作 | 実行結果を記入 | 実行結果を記入 | 実際の配布先相当で正常動作。 |
| 実行時間 | 複数回の値を記入 | 複数回の値を記入 | 事前に決めた時間予算内。 |
| キャッシュなし | 結果を記入 | 結果を記入 | キャッシュに隠れた依存問題がない。 |
開発者は、同じアプリを新旧OSで比較するジョブを用意します。保守担当は、暗黙に使っているツールやパッケージを洗い出します。運用担当は、実際に使われたイメージをログから確認し、戻す際の承認と担当を決めます。
導入支援やコンサルでは、「最新へ変更した」だけで完了にせず、対象ワークフロー、試験範囲、未解決項目、固定期限を成果物として残すと、顧客の判断につながります。比較ジョブを増やす場合は、実行枠と利用時間の増加も計画に含めましょう。
ubuntu-24.04のようにOS世代を固定しても、その世代のイメージやパッケージが永遠に同じ内容になるわけではありません。再現性が重要なら、使用ツール、依存関係、コンテナイメージなども個別に管理する必要があります。
また、ホストOSを変えれば、コンテナ内でビルドするジョブでも影響が完全にゼロとは言えません。ホスト側で行うチェックアウト、Docker操作、マウント、ネットワークなど、実際の境界を確認してください。
本稿は速度や費用の改善を測定していません。一般提供になったことと、既存環境より速いことは別です。arm64での検証も、x64の成功結果から推測せず別に行います。
公式の移行告知に変更がないか、runner-imagesのソフトウェア一覧や既知の問題、自社の実行ログを継続確認します。特に段階移行期間中は、latestという設定名だけで原因を判断しないことが重要です。
今日できる一歩は、26.04の検証ジョブを本番デプロイから分離して追加すること。 自動切替を待つ前に、動く条件と戻す条件を明確にしておきましょう。
最終確認日:2026年9月18日(日本時間)。日程と掲載バージョンは提供元の情報、検証手順と判断表は本稿の提案です。