概要

Node.js開発チームは9月16日、最新のCurrentリリースとなる「Node.js 26.9.0」を公開した。今回のリリースの目玉は、これまで--experimental-ffiフラグを指定しないと使えなかった外部関数インターフェース(FFI)モジュールがデフォルトで有効化されたことだ。JavaScriptからネイティブライブラリの関数を直接呼び出せるFFIが標準機能となったことで、C言語などで書かれた既存資産をNode.jsから利用するハードルが下がる。あわせてFFI周りでは、メモリヘルパー引数が欠けている場合に例外を投げる修正や、SharedArrayBufferをエラーメッセージに含める改善など、堅牢性を高める細かな修正も複数取り込まれている。

暗号・パフォーマンス計測まわりの強化

node:cryptoモジュールには、メッセージ認証コード(MAC)を統一的な方式で扱う「Generic MAC API」が新設されたほか、これまでハードコードされていた利用可能な暗号アルゴリズムやハッシュアルゴリズムの一覧を、OpenSSLプロバイダーから動的に検出する仕組みが導入された。あわせてFIPS関連では、--force-fipsに厳密モードを追加し、FIPS準拠状況を診断チャネル経由で通知する機能も加わっている。パフォーマンス計測領域では、ベンチマークを標準化して実行するための新モジュールnode:benchが実装された。ただし同モジュールは開発途中で挙動が調整され、最終的に--experimental-benchフラグの背後に置かれており、現時点では明示的な有効化が必要な実験的機能という位置づけになっている。またperf_hooksのヒストグラムには、平均値の信頼区間を計算するmeanCI APIや、計測データをプロセス間でやり取りするためのCBOR形式でのエクスポート・インポート機能が追加された。

DTLS・VFS・Web Workersなど実験的機能の拡充

ネットワーク領域では、UDP上でセキュアな通信を実現するDTLS(Datagram TLS)の実験的APIが実装された。TLSやQUICと証明書検証のロジックを共通化する取り組みも並行して進められており、IoT用途などUDPベースの暗号化通信を必要とする場面での活用が見込まれる。また、CommonJSおよびESMのモジュールローダーと統合される仮想ファイルシステム(VFS)機能も追加され、ZIPアーカイブをファイルシステムとしてマウントするZipProviderや、マウントされたファイルシステムからネイティブアドオンを読み込む機能が実装された。Single Executable Applications(SEA)機能でも、バンドルされたアセットをこのVFS経由でマウントするよう変更されている。さらに、ブラウザ互換のWeb Workers APIのサポートも今回のリリースで加わり、ワーカーのref/unref制御も可能になった。

そのほかの修正と非推奨化

バグ修正では、Buffer.prototype.indexOfにlone surrogateを検索語として渡した際のクラッシュ、Hmac.digest()が未初期化メモリを返す可能性があった問題、RSA-PSSの過大なsalt処理エラー、HTTP/2で大きなウィンドウサイズ時に発生していた書き込みデッドロックなど、セキュリティやデータ整合性に関わる複数の不具合が修正された。HTTP/2に関しては、RSTによる不完全な読み取りに対するエラー処理と自動ドレインが導入されるのに合わせて、abortedイベントが非推奨となっており、今後はエラーハンドリングベースの実装への移行が推奨される。今回のリリースは実験的機能が多く、FFIのようにデフォルト有効化されたものがある一方、node:benchのように依然としてフラグが必要なものも混在しているため、利用する際はドキュメントで各機能の安定度を確認しておくとよいだろう。