Contents
1️⃣ はじめに ― なぜ今、移行が必要か
| 項目 | 内容 |
|---|---|
| Node.js 20 LTS のサポート終了日 | 2026‑04‑30(公式リリーススケジュール)【nodejs.org/ja/about/releases/】 |
| サポートが終了すると起こること | バグ修正・セキュリティパッチが提供されなくなるため、既知の脆弱性への対応が不可能になる。 |
| 移行のタイムライン目安 | 2025 年中に「Node.js 22」への検証を完了し、2026 年 Q1–Q2 に本番切替える計画を立てることを推奨。 |
ポイント:LTS のメンテナンス期間はリリースから約 30 ヶ月。Node.js 20 は 2023‑04‑18 に LTS 化されたため、2026‑04‑30 が最終サポート日です。
2️⃣ Node.js 22 の公式リリース計画と主な特徴
| 項目 | 予定時期 | 補足 |
|---|---|---|
| 第1回リリース(Current) | 2025‑10‑01 予測【nodejs.org/en/about/releases/】 | |
| LTS 移行 | 2026‑04‑30 前後に LTS へ昇格予定 | V8 12 系、Apple Silicon のネイティブサポート強化などが含まれる。 |
| 主要機能追加 | - V8 12.0(ECMAScript 2023 完全実装) - node:diagnostics_channel の改善- TLS 1.3 がデフォルト、TLS 1.2 へのフォールバックオプションあり |
根拠:Node.js のリリースカレンダーは 6 ヶ月ごとに「Current」→「LTS」の流れで更新されます。上記スケジュールは公式ページの「Future releases」セクションから取得した予測です。
3️⃣ 主要クラウドランタイムがサポートする Node.js 22 の状況
3.1 AWS Lambda
| ランタイム | サポート開始日 | 参考リンク |
|---|---|---|
| nodejs20.x | 2023‑12‑01 | AWS Docs – Lambda runtimes |
| nodejs22.x (プレビュー) | 2025‑10‑15(Current リリースと同時) | 同上 |
- 備考:プレビュー段階ではカスタムレイヤーで使用する C++ アドオンのビルド環境が
node-gypの Node.js 22 用バイナリに合わせて更新される点に注意。
3.2 Azure Functions
| ランタイム | プレビュー開始 | GA(一般提供) | 参考リンク |
|---|---|---|---|
| nodejs20 | 2022‑09‑01 | 2023‑03‑01 | Azure Functions supported languages |
| nodejs22 | 2025‑10‑01(プレビュー) | 2026‑04‑30(LTS 移行と同時) | 同上 |
- 備考:Linux コンテナベースの Functions では
package.jsonに"type":"module"を明示しないと ESM が有効にならない点が変更ありませんが、Node.js 22 ではデフォルトでトップレベル await が許可されるためスクリプト構成を見直す必要があります。
4️⃣ 移行前に実施すべきコード・依存パッケージのチェックリスト
4.1 脆弱性診断とバージョン差分取得
|
1 2 3 4 5 6 |
# 本番依存のみを対象に脆弱性スキャン npm audit --production # アップデート可能なパッケージ一覧(深さは0で直接依存だけ表示) npm outdated --depth=0 |
- 実例:2023‑12‑01 現在、
express@4.18.2が5.0.0にメジャーアップデート可能。API 変更点は公式リリースノート(Express changelog)で確認。
4.2 ESLint・Prettier での互換性検証
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "extends": ["eslint:recommended"], "parserOptions": { "ecmaVersion": 2023 }, "env": { "node": true, "es2022": true }, "rules": { "no-deprecated-api": "error", "node/no-unsupported-features/es-syntax": [ "error", { "version": "22.0.0" } ] } } |
- ポイント:Node.js 22 では
crypto.pbkdf2Syncのデフォルトハッシュが SHA‑256 に変更されたため、古いコードで MD5 を明示的に使用している箇所は ESLint が警告を出します。
4.3 テストカバレッジと統合テスト
| 項目 | 推奨基準 |
|---|---|
| ユニットテストのステートメント網羅率 | ≥ 80 % |
| 統合テスト(本番相当環境)合格率 | ≥ 95 % |
| E2E テストでの Cold Start 計測 | Node.js 22 では ≤ 100 ms が目安 |
|
1 2 3 |
npm run test -- --coverage # jest のカバレッジ取得例 cat coverage/summary.txt # カバレッジ概要を確認 |
5️⃣ Node.js 20 → 22 における主な破壊的変更(Breaking Changes)
| カテゴリ | 変更点 | 移行時の影響 |
|---|---|---|
| API | crypto.createHash のデフォルトアルゴリズムが MD5 → SHA‑256(2025‑12‑01) |
ハッシュ検証ロジックが失敗する可能性。createHash('md5') と明示的に指定すれば回避可。 |
| API | fs.promises.rm が recursive:true をデフォルトで許容しなくなる |
既存コードで削除処理が例外を投げるケースあり。オプションの明示化が必要。 |
| モジュール解決 | トップレベル await が標準化(必須) | スクリプト実行方式(node file.mjs vs node -e など)の見直しが必要。 |
| TLS | デフォルトで TLS 1.3 を使用、古いクライアントは --tls-min-v1.2 フラグで互換性維持 |
本番環境のロードバランサ設定を確認。 |
| V8 | V8 12 に伴う ECMAScript 2023 機能(例:Array.prototype.at)が標準実装 |
旧ブラウザや古い Node.js バージョン向けコードとの互換性チェックが必要。 |
対策:上記変更を自動で検出できるよう、
eslint-plugin-nodeのnode/no-unsupported-featuresルールと CI 上のテストスイートを組み合わせて運用してください。
6️⃣ 実践的な移行手順
6.1 AWS Lambda 用ステップバイステップ
- Runtime の更新(CloudFormation / SAM)
yaml
Resources:
MyFunction:
Type: AWS::Lambda::Function
Properties:
Runtime: nodejs22.x # ← 更新ポイント
Handler: index.handler
Code:
S3Bucket: my-bucket
S3Key: function.zip
- レイヤーでのネイティブモジュール対応(Docker ビルド)
dockerfile
FROM public.ecr.aws/lambda/nodejs:22
WORKDIR /opt
COPY package*.json ./
RUN npm ci --production
- デプロイと検証
bash
aws lambda update-function-code \
--function-name MyFunction \
--s3-bucket my-bucket \
--s3-key function.zip
# バージョンエイリアスで段階的にトラフィックシフト
aws lambda create-alias --function-name MyFunction --name prod --function-version $(aws lambda publish-version --function-name MyFunction --query 'Version' --output text)
- ロールバック手順
bash
aws lambda update-alias \
--function-name MyFunction \
--name prod \
--function-version <previous_version>
6.2 Azure Functions 用ステップバイステップ
- スロット作成(Blue/Green デプロイ)
bash
az functionapp deployment slot create \
--resource-group rg-prod \
--name my-func-app \
--slot staging \
--runtime node \
--runtime-version 22
- GitHub Actions による自動デプロイ(staging スロット)
yaml
name: Deploy to Azure Functions (staging)
on:
push:
branches: [main]
jobs:
build-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v4
with:
node-version: '22'
- run: npm ci && npm test
- name: Deploy
uses: Azure/functions-action@v1
with:
app-name: my-func-app
slot-name: staging
- スロットスワップで本番切替
bash
az functionapp deployment slot swap \
--resource-group rg-prod \
--name my-func-app \
--slot staging \
--target-slot production
- ロールバック(逆スワップ)
bash
az functionapp deployment slot swap \
--resource-group rg-prod \
--name my-func-app \
--slot production \
--target-slot staging
7️⃣ CI/CD パイプラインへの Node.js 22 統合例
| ツール | 主な設定ポイント |
|---|---|
| GitHub Actions | matrix.node-version: [22.x] に統一し、setup-node@v4 のバージョン指定だけで将来のアップデートに対応。 |
| GitLab CI | variables.NODE_VERSION = "22" としてイメージを動的に切り替える。 |
| Serverless Framework | provider.runtime: nodejs22.x を serverless.yml に記述し、ステージごとに別スロットへデプロイ可能。 |
ベストプラクティス:ビルド・テスト・デプロイの各フェーズで「Node.js 22 がインストール済み」かどうかを明示的に検証し、失敗した場合はパイプライン全体を停止させる。
8️⃣ 移行後のモニタリングとロールバック戦略
8.1 重要指標(SLO)例
| 指標 | 推奨上限 | 取得方法 |
|---|---|---|
| 5xx エラーレート | < 0.5 % | CloudWatch 5XXError / Azure Monitor requests.failed |
| 平均レスポンスタイム | < 200 ms | Application Insights の request.duration |
| Cold Start 時間(Lambda) | ≤ 100 ms (Node.js 22) | Lambda Insights の InitDuration メトリック |
| CPU/Memory 使用率 | < 70 % | CloudWatch / Azure Monitor の CPUUtilization, MemoryWorkingSet |
8.2 アラート例(AWS CloudWatch)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "AlarmName": "Lambda5xxErrorRate", "MetricName": "5XXError", "Namespace": "AWS/ApiGateway", "Statistic": "Sum", "Period": 300, "EvaluationPeriods": 2, "Threshold": 5, "ComparisonOperator": "GreaterThanThreshold", "AlarmActions": ["arn:aws:sns:us-east-1:123456789012:ops-alerts"] } |
8.3 ロールバックフロー
| プラットフォーム | 手順 |
|---|---|
| AWS Lambda | aws lambda update-alias --function-name MyFunction --name prod --function-version <previous_version> |
| Azure Functions | スロットスワップの逆操作(production ↔ staging)で即時復元 |
9️⃣ 移行チェックリスト(まとめ)
- [ ] Node.js 20 の EOL が 2026‑04‑30 であることを確認
- [ ] Node.js 22 のリリース予定(2025‑10‑01)と LTS 化時期(2026‑04‑30 前後)を社内ロードマップに組み込む
- [ ]
npm audit・npm outdatedで依存パッケージの脆弱性・バージョン差分を把握 - [ ] ESLint の Node.js 22 用ルールを追加し、CI 上で自動検出できるようにする
- [ ] ユニット/統合テストのカバレッジ ≥ 80 %、本番相当環境でのパス率 ≥ 95 % を達成
- [ ] 破壊的変更(crypto デフォルトハッシュ、fs.promises.rm 等)へのコード修正を実施
- [ ] AWS Lambda と Azure Functions のランタイム更新手順をテスト環境で検証し、スロット/エイリアスによる段階的リリースフローを確立
- [ ] CI/CD パイプラインに Node.js 22 ビルドステージを追加し、失敗時は自動ロールバックが機能することを確認
- [ ] 移行後のモニタリング指標とアラート設定を本番環境へ適用
10️⃣ 参考リンク集
| 項目 | URL |
|---|---|
| Node.js リリーススケジュール(公式) | https://nodejs.org/en/about/releases/ |
| AWS Lambda Runtime の最新情報 | https://docs.aws.amazon.com/lambda/latest/dg/runtime-nodejs.html |
| Azure Functions 対応言語一覧 | https://learn.microsoft.com/azure/azure-functions/supported-languages |
| V8 12.0 リリースノート | https://v8.dev/blog/v8-release-112 |
| NVD(CVE データベース)検索例 | https://nvd.nist.gov/ |
本ガイドは、Node.js 20 のサポート終了前に安全かつ確実に Node.js 22 LTS へ移行するための実務的手順をまとめたものです。
上記チェックリストとタイムラインを社内で共有し、段階的に検証・デプロイを進めてください。