GitHub Actionsランナーに同梱されるNode20は、2026年9月23日に削除される予定です。9月16日時点で残り1週間。古いJavaScript Actionや互換性回避設定を使っている環境は、期限前の検証が必要です。
この期限は2025年9月19日に公開された非推奨化告知の、2026年8月25日更新版に記載されています。新しい発表ではなく、迫る移行期限を踏まえた実務ガイドです。
GITHUB ACTIONS / MIGRATION
アプリのNode更新だけでは完了しない
9月23日Node20削除予定
Node24Action実行の既定
3層Action/アプリ/Runner
## 3行で分かる移行
- JavaScript Actionは6月16日からNode24が既定になり、Node20へ戻す回避設定は削除後に使えなくなります。
- `actions/setup-node`で指定するアプリ用Nodeと、Actionそのものを動かすNodeは別です。
- macOS 13.4以下やARM32のセルフホステッド環境は、Node24の対応条件も確認してください。
## 以前のランナー記事との違い
先日の[セルフホステッドランナー更新期限の記事](/github-actions-self-hosted-runner-brownout-2026)は、ランナー本体の最低版と30日以内の追随要件を扱いました。今回は、そのランナーがJavaScript Actionを起動する際のNodeランタイム削除です。両方の条件を満たす必要があります。
| 層 | 設定・管理先 | 確認するもの |
| JavaScript Action | action.yml → runs.using | Node24宣言、依存ライブラリ、実行互換性 |
| アプリのNode | setup-node → node-version | アプリのビルド・テスト対象版 |
| ランナー本体 | RunnerソフトとOS | 更新期限、OS・CPUアーキテクチャ対応 |
アプリのNodeを24にしても、依存Actionの`runs.using`は変わりません。逆にActionがNode24へ移行しても、アプリ側の実行版は別途指定できます。
## まず棚卸しする
```bash
# 自作Actionと回避設定を探す
rg -n 'node20|ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION|FORCE_JAVASCRIPT_ACTIONS_TO_NODE24' \
.github action.yml action.yaml
# 利用するActionを列挙
rg -n 'uses:' .github/workflows
```
存在しないファイルのエラーは対象パスを調整してください。外部Actionは、実際に参照しているタグまたはコミットの`action.yml`を確認します。最新ブランチだけを見ると、ワークフローで固定した古い版を見落とします。
## 自作JavaScript Actionの更新
```yaml
name: internal-check
description: Validate internal rules
runs:
using: node24
main: dist/index.js
```
宣言を書き換えるだけでは不十分です。依存パッケージを確認し、配布用`dist`を再生成して、実際のGitHub Actions上で検証します。ネットワーク、証明書、プロキシ、ファイル操作、ネイティブ依存は特に重点確認します。
Composite ActionやDocker Actionは`runs.using: node20`のJavaScript Actionとは構造が異なります。ただし内部で呼ぶJavaScript Actionや、コンテナ内のNode依存は別途棚卸しが必要です。
## 外部Actionを安全に更新する
1. リリースノートでNode24対応とランナー最低版を確認する。
2. 検証ブランチで対応版へ更新する。
3. 成功パスだけでなく、失敗、キャンセル、後処理を試す。
4. 権限や入力値の変更をレビューする。
5. 本番ではレビュー済みコミットSHAで固定する運用も検討する。
`@vN`を更新するだけで別の破壊的変更が入る場合があります。メジャー番号、ランタイム対応、Runner要件を分けて評価してください。
## 互換性回避設定を残さない
公式告知の`ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true`は、Node20へ戻す一時的な回避策です。9月23日の削除後まで動作を保証する設定ではありません。
```yaml
# 検証用。Node24が既定なので、恒久的な移行策ではありません。
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
```
回避フラグがなくても正常に動く状態を合格条件にしてください。Node24は既定になっているため、上のフラグを付けるだけで未対応Actionや古いOSが修復されるわけではありません。
## OS・アーキテクチャの注意点
GitHubの公式告知は、Node24がmacOS 13.4以下と互換性がなく、ARM32の公式サポートもないと説明しています。古いMacや32ビットARMのセルフホステッドランナーは、ランナーアプリ更新だけで解決しない可能性があります。
OS更新や64ビット対応機への移行を検討し、署名、Docker、VPN、社内証明書などの運用依存も試験してください。GitHub-hosted環境へ移す場合は、社内ネットワークへの接続方式と秘密情報の権限を見直します。
## 開発・保守への影響
期限当日に重要なリリースが止まると、復旧のために未検証のAction更新や権限拡大を行いがちです。移行を通常の変更管理として先に実施すれば、緊急対応のリスクを減らせます。
特に、社内共通Actionは多数のリポジトリへ影響します。呼び出し元の台帳、対応版、移行期限、検証結果を共有し、利用部門ごとに進捗を追うことが重要です。
## 期限前チェックリスト
- [ ] 自作・外部・再利用ワークフローの全Actionを確認した
- [ ] 固定コミットの`runs.using`を確認した
- [ ] 配布コードを再生成し、依存パッケージを検証した
- [ ] Node20回避設定なしで動くことを確認した
- [ ] macOS・ARM32・ランナー最低版を確認した
- [ ] 認証、プロキシ、成果物、キャンセル後処理を試した
- [ ] 共通Actionの利用部門へ対応版を案内した
## リスクと今後注目すべき点
削除日は公式予定であり、過去に更新されています。作業時は告知の最新編集注記を再確認してください。今回の移行はアプリ用Node20の一律削除ではありませんが、アプリ側のEOL対応を免除するものでもありません。
今後はランナー、Actionの実行ランタイム、アプリのランタイムを別々の台帳で管理し、更新を定期的に検証する仕組みが必要です。単一の「Nodeバージョン」項目でCI全体を管理する設計は避けましょう。
## 参照元
- [GitHub Changelog:Deprecation of Node 20 on GitHub Actions runners](https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/)
- [GitHub Docs:Metadata syntax for GitHub Actions](https://docs.github.com/en/actions/reference/workflows-and-actions/metadata-syntax)
- [GitHub:actions/setup-node](https://github.com/actions/setup-node)
最終確認日:2026年9月16日