本文へ移動
技術を、自社の仕事に。
判断と実行を助けるメディア

記事を検索

Node.js 27の最初のAlpha 業務システムで先に試す変更点

目次 · 6項目

Node.js 26がLTSになったばかりで、次のメジャー版のことはまだ考えていない。そう感じている開発・保守の担当者も、27の変更点は今のうちに一度見ておく価値があります。2027年4月に出る予定の27.0.0に向けて、互換性を壊す変更が、最初のAlphaの時点でまとまって公開されたからです。

Node.jsは2026年10月29日、27の最初のAlphaとして「27.0.0-alpha.0.0.0」を公開しました。この記事では、Alphaの位置付けを確かめたうえで、業務システムやWebのバックエンドで影響が出やすい変更を、公式のリリースノート、APIドキュメント、11月5日の公式ブログから整理します。

Alphaは本番用ではなく、CIで試すための版

2026年3月10日の公式ブログの告知「Evolving the Node.js Release Schedule」で、27からメジャー版を年1回にすることが示されました。新しい流れは、10月〜3月がAlpha、4月〜10月がCurrent、その後30か月のLTSです。27は2027年4月に27.0.0、2027年10月にLTS、2030年4月に終了の予定です(告知は「This schedule is not final and may be amended.」としています)。

Alphaでは、互換性を壊す変更(semver-major)が認められています。告知はAlphaについて「Not intended for production use.」(本番での利用は想定していない)とし、版の間でAPIが変わりうること、Alphaを出す頻度はリリースチームが決めることを挙げています。ライブラリの作者には、Alphaを早くCIに組み込むよう求めています。

Alphaの使いどころと、26・24・22の版ごとの判断は、Node.js 24の保守期入りと26のLTS化の記事で整理しました。

業務システムで影響が出やすい変更

リリースノートの「Notable Changes」には、V8の15.6への更新(26は14.6)に続き、「Other notable changes」に50件のsemver-majorの変更が並んでいます。そのうち、業務システムやWebのバックエンドで動きが変わりやすいものを選びました。

Node.js 26.13.0と27.0.0-alpha.0.0.0で既定値や扱いが変わる5つの点を並べた図。HTTPサーバーのkeepAliveTimeoutの既定は5秒から65秒へ、ヒープの上限の既定は物理メモリまたはcgroupの上限の半分(256MB〜4GB)になりBufferとArrayBufferも数える、req.headersはプロトタイプを持たないオブジェクトに、v8.serializeとstructuredCloneの形式は古い版で読めない新形式に、Intel版macOSは試験的な扱いになり27のAlphaではdarwin-x64のtarが配布されていない

HTTPサーバーのkeep-aliveの既定が65秒に

http.Server の keepAliveTimeout の既定が5秒から65秒になりました。APIドキュメントの27.0.0-alpha.0.0.0の履歴に「the default value for http.Server.keepAliveTimeout is changed from 5 to 65 seconds」とあります。

ここからは編集部の補足です。ロードバランサーの後ろでNode.jsを動かしている場合、ロードバランサー側のアイドルの時間とNode.js側の時間の関係で、接続の再利用のされ方が変わります。今は5秒の前提で値を合わせている、または既定のまま動かしている構成は、27へ上げる前にロードバランサーの設定と並べて確かめます。同じ接続を長く保つため、同時に開いている接続の数が増えることもありえます。

ヒープの上限の既定が、4GB〜15GBのマシンで大きくなる

--max-old-space-size を指定していない場合、ヒープの上限の既定は、物理メモリまたはcgroup(コンテナのメモリを制限する仕組み)の上限の半分を、256MB〜4GBの範囲に収めた値になります。2026年11月5日の公式ブログ「Notable V8 changes from Node.js 26 to 27 (Alpha)」によると、これまでは物理メモリの半分で、上限は2GB(15GB以上のマシンは4GB)でした。8GBのマシンでは2GBから4GBに、6GBのマシンでは2GBから3GBに増えます。

BufferとArrayBufferが持つメモリも数えられるようになりました。リリースノートは「heap limit」に数えると書き、ブログは「V8’s global allocation limit」に数えるとしたうえで、Bufferを多く使うアプリケーションではガベージコレクションの時期が変わると説明しています。どちらも、従来の既定に頼っていたアプリケーションは --max-old-space-size を明示するよう求めています。

ここからは編集部の補足です。これまで既定の上限でメモリの使用量が抑えられていたサービスは、上限が上がると、より多くのメモリを使う可能性があります。大きなCSVや画像をBufferで扱うバッチは、ガベージコレクションの時期が変わることで、メモリの使われ方が変わるかもしれません。27で試すときは、本番と同じメモリの割り当てで、ピーク時の処理を流して確かめます。

req.headers がプロトタイプを持たないオブジェクトに

リリースノートに「http: make req.headers have a null prototype」とあり、APIドキュメントは message.headers について「The object has a null prototype」と書いています。

編集部の補足です。プロトタイプを持たないオブジェクトには hasOwnProperty などのメソッドがありません。req.headers.hasOwnProperty('authorization') のように書いたコードは、27ではエラーになると考えられます。Object.hasOwn(req.headers, 'authorization') に置き換えておけば、26でも27でも動きます。認証や監査のミドルウェアを自社で書いている場合は、検索して確かめておきます。

structuredClone などの形式が古い版で読めない

v8.serialize()・structuredClone()・postMessage() が新しい形式を使います。11月5日の公式ブログによると、27で書いた値を古いNode.jsで読むと「invalid or unsupported version」のエラーになります。逆に、古い版で書いた値は27で読めます。

編集部の補足です。v8.serialize() の結果をキャッシュやキューに保存する構成では、27と26を並べて動かす移行の間、27が書いた値を26が読めません。版を混在させる期間がある場合は、JSONなどの形式に変えるか、読む側を書く側より先に27へ上げる計画が必要です。

その他、確認しておきたい変更

  • OpenSSL: 27のAlphaはOpenSSL 4.1.0を同梱し(26.13.0は3.5.9)、ビルドにはOpenSSL 3以降が必要になりました。OpenSSLのエンジンの対応は終わり、同梱のFIPSのプロバイダーのビルドもなくなります
  • 暗号の入力の検証: crypto のdigestやupdateの文字コードの指定を検証するようになりました
  • domain モジュール: 実行時に非推奨の警告(DEP0032)が出るようになりました
  • HTTPのヘッダーの上限: クライアント側で、応答のヘッダーの数が maxHeadersCount を超えると、切り詰めずに HPE_HEADER_OVERFLOW で拒否するようになりました
  • npm: 12.1.0を同梱します(26.13.0は11.20.0)
変更影響が出やすい場面先に見る場所
keepAliveTimeoutの既定65秒ロードバランサーの後ろのAPIサーバーロードバランサーのアイドルの時間、server.keepAliveTimeout の明示の有無
ヒープの上限の既定と、Bufferの数え方4GB〜15GBのメモリで動くサービス、大きなファイルを扱うバッチ起動の引数の --max-old-space-size、コンテナのメモリの割り当て
req.headers のプロトタイプなし自社のミドルウェアheaders.hasOwnProperty の呼び出し

Intel版のMacで開発している場合

リリースノートに「build: downgrade Intel macOS support to experimental」とあります。この変更のプルリクエスト(#65427)は、27.0.0-alpha.0.0.0からIntel版macOS向けの公式のバイナリの提供をやめるのがよいとし、Intel版のMacの利用者は非公式のバイナリに頼ることになると説明しています。BUILDING.md の「Experimental」も、コアチームがリリースを作らない対象という定義です。

配布物も、この説明と合っています。公式の配布の一覧(index.json)では、26.13.0にあるIntel版macOS向けのtar(osx-x64-tar)が27.0.0-alpha.0.0.0にはなく、SHASUMS256.txt にも darwin-x64 のtarは含まれていません。index.json には osx-x64-pkg の項目が残っていますが、配布されている .pkg を2026年11月6日に展開して調べると、中の node はarm64用の実行ファイルだけでした(実行はしていません)。名前だけを見てIntel版が配布されていると判断しないよう注意が必要です。

nvmなどのtarを取ってくる道具でIntel版のMacに27のAlphaを入れようとすると、取得に失敗する可能性があります。開発チームにIntel版のMacが残っている場合は、27のCurrentが出る2027年4月までに、Apple シリコンのMacか、Linuxのコンテナでの開発に移せるかを検討しておきます。

CIに27のAlphaを足すときの考え方

ここからは編集部の提案です。本番の版は26(または24)のまま変えず、CIのテストに27のAlphaを1つ足して、失敗しても全体を止めない扱いにします。取得は公式の配布元から行い、SHASUMS256.txt で照合します。

V=v27.0.0-alpha.0.0.0
F=node-$V-linux-x64.tar.xz
curl -fsSLO https://nodejs.org/dist/$V/$F
curl -fsSL https://nodejs.org/dist/$V/SHASUMS256.txt | grep " $F\$" | sha256sum -c -
tar xf $F && export PATH="$PWD/node-$V-linux-x64/bin:$PATH"
node -v && npm test

失敗したテストは、上に挙げた変更のどれに当たるかで分けて記録しておくと、27.0.0が出たときの作業量の見積もりに使えます。Alphaは版の間でAPIが変わりうるため、Alphaで直したコードは27.0.0でもう一度確かめます。版の一括更新の進め方は、Node.js 22.23.4への一括更新の記事も参考になります。

本番の版を据え置く場合も、セキュリティ更新は別に当てます。Node.jsは2026年11月3日に、26.x・24.x・22.xの新しい版を11月11日以降に出すと予告しました。最も高い深刻度はHIGHです。この予告の対象に27のAlphaは挙げられていません。

確認した範囲

2026年10月31日に、nodejs.orgのリリースノート「Node.js 27.0.0-alpha.0.0.0 (Alpha)」、告知「Evolving the Node.js Release Schedule」、27.0.0-alpha.0.0.0のAPIドキュメント(HTTP、Deprecated APIs、Domain)、配布の一覧(index.json と SHASUMS256.txt)を直接取得して確認しました(資料調査)。2026年11月6日に同じ資料を確かめ直し、新しいAlphaが出ていないことと、11月5日の公式ブログ、11月11日のセキュリティ更新の予告、nodejs/nodeのプルリクエスト(#65427、#65010)、BUILDING.md を確認しました。.pkg は展開して実行ファイルの種類だけを調べました。27のAlphaのバイナリは実行しておらず、keep-alive・ヒープ・req.headers・直列化の形式の実際の挙動は確かめていません。hasOwnProperty がエラーになる点はJavaScriptの仕様からの推測で、ロードバランサーとの関係、CIへの組み込み方は編集部の提案です。上のコマンドの配布元のURLと照合のファイルが存在することは確かめています。

Node.jsで動く業務システムの版の更新計画や、移行前の影響の洗い出しは、開発・AI・自動化のご相談からお問い合わせください。

参考資料

この記事を共有XFacebook
鈴木 翔

技術の可能性に魅了され、学生時代からプログラミングとデジタルアートの分野に深い関心を持つ

この記事のテーマを、自社の次の一歩へ

自社での進め方を、具体的に。

つくりたい仕組み、既存システム、運用の条件を整理し、実現に向けた次の一歩を考えます。

  • 実現したい仕組み
  • 既存環境との接続
  • 運用の条件
開発・運用の構想を相談する

構想段階からご相談いただけます。この記事の情報を相談フォームに引き継ぎます。

最新記事をメールで受け取る