Cloud Functions for Firebase の Node.js 20 廃止: Node.js 24・22 に上げる方法
2026 年 10 月 30 日、Cloud Functions の Node.js 20 ランタイムが廃止(decommission)されました。Node.js 20 では関数を新しくデプロイすることも更新することもできなくなったため、firebase deploy は次のエラーで止まります。直すのは functions/package.json の 1 行です。第 2 世代の関数だけなら Node.js 24 に、第 1 世代の関数があるなら Node.js 22 に上げてください。
Error: Runtime Node.js 20 was decommissioned on 2026-10-30. To deploy you must
first upgrade your runtime version.要点
- 問題はデプロイだけではありません。デプロイ済みの関数はまだ動きますが、セキュリティ パッチはもう提供されず、日付は決まっていないものの無効にされる可能性があります。日付とその意味
- 1 行を変えて再デプロイします。
engines.nodeを"24"か"22"に変えます。firebase.jsonにruntimeがあれば、そちらが優先されます。変更方法 - 第 2 世代は 24、第 1 世代は 22。第 1 世代の関数は Node.js 22 が最後なので、22 が終わる 2027 年 10 月 31 日より前に第 2 世代へ移行する必要があります。第 1 世代の関数
- SDK を上げるなら、2 つの点を確認します。
firebase-functions7 ではfunctions.config()がなくなり、firebase-admin14 は Node.js 22 以降でしか動きません。SDK のバージョン
日付とその意味
Google Cloud のランタイム サポート スケジュールです。非推奨(deprecation)の期間中はまだデプロイでき、廃止(decommission)後は新しく作成することも更新することもできません。
| ランタイム | 使える関数 | 非推奨 | 廃止 |
|---|---|---|---|
| Node.js 18 | 第 1 世代、第 2 世代 | 2025-04-30 | 2025-10-30 |
| Node.js 20 | 第 1 世代、第 2 世代 | 2026-04-30 | 2026-10-30 |
| Node.js 22 | 第 1 世代、第 2 世代 | 2027-04-30 | 2027-10-31 |
| Node.js 24 | 第 2 世代のみ | 2028-04-30 | 2028-10-31 |
廃止されると次の点が変わります。
| 非推奨期間 | 廃止後 | |
|---|---|---|
| 新規デプロイ・更新 | できる | できない |
| デプロイ済みの関数 | 実行される | 実行されるが、無効にされる可能性あり |
| Node.js・OS のセキュリティ パッチ | 適用される | なし |
無効にされる日付はポリシーに書かれていません。今は問題なく動いている関数も、バグを直そうとした瞬間にデプロイできなくなり、いつ止まるかもわかりません。回避策もありません。CLI のランタイム チェックをオフにしても、サーバーが別途ブロックします(CLI のソース)。
Node.js 24 か 22 に上げる
- 関数ごとに世代とランタイムを確認します。
firebase functions:listを実行すると、Version 列がv1なら第 1 世代、v2なら第 2 世代で、Runtime 列が現在のランタイムです。 - バージョンを選びます。ランタイムは関数ごとではなく、コードベース(通常は
functionsフォルダ)ごとに 1 つです。第 1 世代の関数が 1 つでもあれば 22、すべて第 2 世代なら 24 を選んでください。24 は 2028 年 10 月 31 日まで使えますが、第 1 世代には対応していません。Firebase のドキュメントのバージョン一覧にはまだ 24 がありませんが、Google Cloud のスケジュールには第 2 世代向けとして載っていて、Firebase CLI は 14.26.0 から対応しています。 package.jsonの 1 行を変更します。値はメジャー バージョンの数字 1 つです。>=22や22.xのような範囲を書くと、CLI がDetected node engine ... which is not a supported versionというエラーを出します。{ "engines": { "node": "24" } }firebase.jsonにruntimeがあれば、CLI はその値を先に使います。その場合はそちらを変更してください。{ "functions": { "source": "functions", "runtime": "nodejs24" } }- ローカルと CI の Node.js も同じバージョンにそろえます。エミュレータは、インストールされている Node.js で関数を実行します。バージョンが違うと
Your requested "node" version "24" doesn't match your global version "20"という警告を出すだけで、そのまま 20 で実行するため、テストが本番環境とは違うバージョンで動くことになります。 - デプロイします。
firebase deploy --only functionsを実行したあと、firebase functions:listの Runtime 列がnodejs24(またはnodejs22)に変わったことを確認します。
SDK のバージョン
Node.js と一緒に SDK も上げるなら、次の点を確認してください。
| パッケージ | 確認すること |
|---|---|
firebase-tools(CLI) | nodejs22 は 13.11.0 から、nodejs24 は 14.26.0 からデプロイできます。 |
firebase-functions | 6.2.0 未満では、トップレベルの await を含む ESM コードが Node.js 22.12 以降で動かなくなります。7.0.0 で functions.config() が削除され、呼び出すと実行時エラーになります。 |
firebase-admin | 14 は Node.js 22 以降でしか動かず、firebase-functions 7.3.0 以降と一緒に使う必要があります(peer 依存関係)。13 は Node.js 18 以降で動作します。 |
functions.config() をまだ使っているなら、firebase-functions は 6.x のままにして Node.js だけを上げてください。functions.config() を使ったデプロイも 2027 年 3 月以降は失敗するので、それまでに環境変数か Secret Manager に移す必要があります。
第 1 世代の関数
第 1 世代の関数が使える最後のランタイムは Node.js 22 で、22 は 2027 年 10 月 31 日に廃止されます。それまでに第 2 世代へ移行する必要があります。Firebase CLI 15.35.0 の警告は 22 の廃止日を 2028-10-31 と表示しますが、基準は Google Cloud のランタイム サポート スケジュールにある 2027-10-31 です(CLI のソース)。同じ名前のままでは切り替えられないため、Firebase は、第 2 世代の関数を新しい名前でデプロイし、トラフィックを移してから第 1 世代の関数を削除するよう案内しています(アップグレード ガイド)。移行でつまずきやすい点は次のとおりです。
- URL が変わります。HTTP 関数、呼び出し可能関数、タスクキュー関数では、新しい名前がそのまま新しい URL になります。アプリと Webhook を新しい URL に切り替えてから、
firebase functions:deleteで古い関数を削除します。 - イベントが 2 回処理されます。Firestore や Storage などのイベント トリガーは、2 つの関数が共存している間、同じイベントに対して両方が実行されます。2 回実行されても結果が同じになるようにしてください。
- ないものがあります。第 2 世代には
functions.config()と Analytics のイベント トリガーがなく、Authentication のユーザー作成・削除トリガー(onUserCreated、onUserDeleted)はまだプレビュー版です。 - デフォルトが違います。1 つのインスタンスがデフォルトで最大 80 件のリクエストを同時に処理し、デフォルトのサービス アカウントが Compute Engine のデフォルトのサービス アカウントに変わります。グローバル変数にリクエストごとに異なる値を入れていたり、IAM の権限を App Engine のデフォルトのサービス アカウントに付与していたりする場合は、修正が必要です。
拡張機能(Extensions)
インストールした拡張機能も Cloud Functions で動いていて、そのランタイムは拡張機能のバージョンで決まります。Firebase は、拡張機能を最新バージョンに更新するよう案内しています。
firebase ext:update <instance-id>
firebase deploy --only extensionsFirebase Extensions サービスは 2027 年 3 月 31 日に廃止されます。インストール済みの拡張機能はその後も実行されますが、更新などの管理機能は使えなくなります。ほとんどは第 1 世代の関数で作られているため、ランタイムが廃止されると停止したり無効にされたりする可能性があります。使い続ける機能なら、自分で作った関数に移す計画も立てておきましょう。
出典
- ランタイム サポート スケジュール、Cloud Functions リリースノート: 日付、非推奨と廃止の意味、第 1 世代の Node.js 22 と第 2 世代の Node.js 24 のサポート
- 関数の管理(Node.js のバージョンの設定)、Cloud Functions のよくある質問:
enginesとruntime、拡張機能のランタイム - Firebase CLI 15.35.0 のソース: ランタイムのチェックとエラー メッセージ、ランタイムの日付、
enginesの読み取り、エミュレータによる Node.js の選択、サーバー側のチェック - firebase-tools、firebase-functions、firebase-admin 14.0.0 のリリースノート、環境の構成
- 第 1 世代から第 2 世代へのアップグレード、バージョンの比較、Authentication トリガー、拡張機能のよくある質問、extension.yaml リファレンス
