Firexportブログ

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-functions 7 では functions.config() がなくなり、firebase-admin 14 は Node.js 22 以降でしか動きません。SDK のバージョン

日付とその意味

Google Cloud のランタイム サポート スケジュールです。非推奨(deprecation)の期間中はまだデプロイでき、廃止(decommission)後は新しく作成することも更新することもできません。

ランタイム使える関数非推奨廃止
Node.js 18第 1 世代、第 2 世代2025-04-302025-10-30
Node.js 20第 1 世代、第 2 世代2026-04-302026-10-30
Node.js 22第 1 世代、第 2 世代2027-04-302027-10-31
Node.js 24第 2 世代のみ2028-04-302028-10-31

廃止されると次の点が変わります。

非推奨期間廃止後
新規デプロイ・更新できるできない
デプロイ済みの関数実行される実行されるが、無効にされる可能性あり
Node.js・OS のセキュリティ パッチ適用されるなし

無効にされる日付はポリシーに書かれていません。今は問題なく動いている関数も、バグを直そうとした瞬間にデプロイできなくなり、いつ止まるかもわかりません。回避策もありません。CLI のランタイム チェックをオフにしても、サーバーが別途ブロックします(CLI のソース)。

Node.js 24 か 22 に上げる

  1. 関数ごとに世代とランタイムを確認します。firebase functions:list を実行すると、Version 列が v1 なら第 1 世代、v2 なら第 2 世代で、Runtime 列が現在のランタイムです。
  2. バージョンを選びます。ランタイムは関数ごとではなく、コードベース(通常は functions フォルダ)ごとに 1 つです。第 1 世代の関数が 1 つでもあれば 22、すべて第 2 世代なら 24 を選んでください。24 は 2028 年 10 月 31 日まで使えますが、第 1 世代には対応していません。Firebase のドキュメントのバージョン一覧にはまだ 24 がありませんが、Google Cloud のスケジュールには第 2 世代向けとして載っていて、Firebase CLI は 14.26.0 から対応しています。
  3. 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"
      }
    }
  4. ローカルと CI の Node.js も同じバージョンにそろえます。エミュレータは、インストールされている Node.js で関数を実行します。バージョンが違うと Your requested "node" version "24" doesn't match your global version "20" という警告を出すだけで、そのまま 20 で実行するため、テストが本番環境とは違うバージョンで動くことになります。
  5. デプロイします。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-functions6.2.0 未満では、トップレベルの await を含む ESM コードが Node.js 22.12 以降で動かなくなります。7.0.0 で functions.config() が削除され、呼び出すと実行時エラーになります。
firebase-admin14 は 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 extensions

Firebase Extensions サービスは 2027 年 3 月 31 日に廃止されます。インストール済みの拡張機能はその後も実行されますが、更新などの管理機能は使えなくなります。ほとんどは第 1 世代の関数で作られているため、ランタイムが廃止されると停止したり無効にされたりする可能性があります。使い続ける機能なら、自分で作った関数に移す計画も立てておきましょう。

出典

すべての記事 →