2026年10月21日に出たNode.jsの脆弱性(悪用されうるセキュリティ上の欠陥)の修正版は、26、24、22の3つの系統向けだけでした。Node.js 20には出ていません。20のサポートは、2026年4月30日に終わっているからです。

Node.js(ノードジェイエス)は、JavaScriptをサーバーやパソコンで動かすためのソフトです。系統ごとに、修正を受けられる期限が決まっています。この記事では、Node.js 20のサポート終了後も20を使い続けている場合に、何をどの順で進めるかをまとめます。10月23日時点の情報です。

今回の脆弱性そのものの中身は、別の記事に書きました。

問題 20には今回の修正が届かない

Node.jsの公式発表は、サポートが終わった版は今回の欠陥の影響を受け、修正版も出ないとしています。いちばん重い欠陥は、細工した圧縮データを展開させると外からプログラムを動かされうるものでした。

Node.js 20のサポート終了から半年たち、20で動いているサーバーは、今回の欠陥を抱えたまま直す手段がない状態になりました。手当てはただ1つ、新しい系統に上げることです。

調べたこと 20は意外なところに残っている

自分のパソコンでnode -vを打てば、使っている版はすぐわかります。厄介なのは、それ以外の場所です。外注している場合は、制作会社に「Node.js 20のままの場所はないか」と聞くのが最初の一歩です。

私がこのサイトの周りを確かめたときは、次の順に見ていきました。

  • 本番のサーバーや、Docker(アプリを箱に詰めて動かす仕組み)の箱のひな形(Dockerfileという設定ファイルに書かれた版)
  • GitHub ActionsなどのCI(コードを自動で検査・公開する仕組み)の設定にあるnode-version
  • ホスティング(サイトを置いて公開するサービス)の管理画面で指定しているNode.jsの版
  • リポジトリ(プログラム一式の保管場所)にある.nvmrcやpackage.jsonのengines(使う版を書いておくファイルや欄。どちらを読むかはサービスによって違う)

このサイトはCloudflare Pagesで公開していますが、調べてみると.nvmrcもenginesも置いていませんでした。つまり、ビルド(公開用のファイルに組み立てる作業)に使うNode.jsの版は、Cloudflare側の既定値に任せていたことになります。Cloudflareの説明によると、いまのビルド環境の既定値は22.16.0です。今回の修正版の22.23.4より前の版で、私のサイトは作られていました。サイトは出来上がったページを置いているだけで、閲覧のときにNode.jsは動かないので、公開中のページが今回の欠陥の入口になることはありません。それでも、どの版で作っているかを自分で答えられないのは気持ちが悪いと感じました。

どの系統に上げるか

いまサポートされている系統と、サポートが終わる日は次のとおりです。Node.jsのリリース計画の表から抜き出しました。

系統

サポート終了

22

2027年4月30日

24

2028年4月30日

26

2029年4月30日

22は、あと半年でまた同じ立場になります。20からの移行なら、24を選ぶのが無難だと思います。期限が1年半ほどあり、ライブラリ(よく使う機能をまとめた部品)の対応も進んでいるからです。

26は10月28日に長期サポート版(LTS)になる予定で、期限はいちばん長くなります。ただ、出てまだ半年ほどなので、使っている部品が対応しているかを確かめてからのほうが安全です。

上げるときにつまずきやすい点

Node.js 20から24への移行で、引っかかりやすいのは次の3つです。

1つ目は、ネイティブモジュール(C++などで書かれ、Node.jsの版ごとに組み立て直す必要がある部品)です。画像の処理やデータベースの接続に使う部品に多く、node_modules(入れた部品が置かれるフォルダ)を消して入れ直さないと起動しないことがあります。

rm -rf node_modules
npm ci

アプリのフォルダで打ちます。消えるのは入れ直せる部品だけです。npm ciはpackage-lock.json(入れる部品の版を記録したファイル)がある前提の命令です。ない場合はnpm installを使います。

2つ目は、古い部品の警告です。新しい系統では、昔の書き方に警告が出たり、動かなくなったりします。警告が出たら、その部品を新しい版に上げられないかを先に確かめます。

3つ目は、作った箱(Dockerのイメージ)の作り直し忘れです。Dockerfileの版を20から24に書き換えても、作り直して入れ替えるまでは古い版のまま動いています。

移行のあとは、アプリの主な画面や機能をひととおり触って確かめてください。テスト(動作を自動で確かめるプログラム)があるなら、新しい版で一度全部通しておきます。

わかった答え まず版を書いて固定する

Node.js 20のサポート終了への対応で、いちばん効くのは、使う版をリポジトリに書いておくことだと思います。リポジトリのいちばん上のフォルダで次を打ち、.nvmrcに24と1行書いておくと、それが使う系統の目印になります。

echo "24" > .nvmrc

自分で決められない場合は、サイトを管理している人に「使うNode.jsの版をどこに書いているか」を聞くのが早道です。このファイルを読むかどうかは環境によって違います。Cloudflare Pagesは.nvmrcを読みます。Vercelはプロジェクトの設定かpackage.jsonのenginesで決まります。GitHub Actionsは、設定にnode-version-fileとして.nvmrcを指定したときに読みます。手元のnvm(複数のNode.jsを切り替える道具)は、nvm useと打つと切り替わります。

版を書いておけば、次に系統のサポートが終わるときも、どこを直せばいいかがすぐわかります。

残った疑問 20の延長サポートはないのか

Node.jsの公式発表は、サポートの切れた版を使い続けたい場合の選択肢として、OpenJS財団(Node.jsを支える団体)の協力企業による有料の延長サポートを挙げています。どうしてもすぐに上げられない事情があるなら、こうした保守サービスに相談するのも1つの手です。

ただ、それも上げるまでの時間稼ぎです。サポートの切れた言語やソフトを使い続けるとどうなるかは、PHPの古い版を使っていたサイトが今回まさに経験しました。