9月16日、Antoine du Hamelが「Node.js — Node.js 26.9.0 (Current)」と題した記事を公開した。Node.js 26系の最新マイナーバージョン26.9.0では、長年の懸案だったベンチマーク実行基盤の標準搭載をはじめ、ネイティブライブラリ連携・仮想ファイルシステム・DTLS対応など、実用的な強化が一度に盛り込まれた。
Node.jsには既にv18でテストランナーnode:testが標準搭載されたが、「パフォーマンス計測」の領域は外部ライブラリ任せのままだった。今回のnode:benchはその空白を埋める試みで、エコシステムへの影響はnode:test登場時と同等以上になる可能性がある。
組み込みベンチマークモジュール node:bench
今回の目玉は、**node:benchモジュールの実験的追加**だ。--experimental-benchフラグで有効化できる。
これまでNode.jsには標準のベンチマーク機能がなく、開発者はbenchmark.jsやautocannonといった外部ライブラリに頼るしかなかった。node:benchはそうした外部依存を不要にする本格的なベンチマークフレームワークだ。node:testが単体テストを標準化したように、node:benchはパフォーマンス計測を標準化する位置づけにある。
主な機能は以下の通り:
createRunnerによる明示的なランナー生成bench:planイベントによるテスト計画の管理context.diagnosticAPIによる診断情報の付与runFileAPIによるファイル単位での実行(パーミッションシステムにも対応)- 複数のレポーター実装(
bench/reporters)
合わせてperf_hooks側にも**Histogram.meanCI API(信頼区間付きの平均値取得)とCBOR形式でのヒストグラムエクスポート/インポート**が追加された。計測精度と再現性を重視した設計で、コミットログにも「measurement integrity details」への言及がある。現時点では実験的フラグ必須であり、APIの安定性は保証されていないが、標準ベンチマーク基盤の登場はエコシステムに大きな影響を与えそうだ。
node:ffiがデフォルト有効化
node:ffi(Foreign Function Interface)モジュールがデフォルトで有効になった(PR #65475)。
FFIとは、JavaScriptからC/C++などで書かれたネイティブの共有ライブラリ(.soや.dll)を直接呼び出す仕組みだ。これまでNode.jsでネイティブコードを利用するには、Node-APIを使ったnative addonをビルドする必要があり、開発・配布の手間がかかっていた。DenoやBunが早期からFFIを標準搭載していたこともあり、Node.js側の対応は長らく待望されていた。
node:ffiを使えばビルドなしでネイティブライブラリを呼び出せるため、OpenCVや各種システムライブラリを手軽に活用できるようになる。フラグなしで使えるようになったことで、ネイティブ連携の敷居が大きく下がる。
Web Workers互換性の向上
workerモジュールにWeb Workers仕様のサポートが追加された(PR #64894)。ブラウザのWeb Workers APIとの互換性が向上することで、クライアント・サーバー間でWorkerを使ったコードを共有しやすくなる。アイソモーフィックなコードベースを持つプロジェクトにとって恩恵が大きい変更だ。
Virtual File System(VFS)とSEAの統合強化
vfs(仮想ファイルシステム)がCJSおよびESMのモジュールローダーと統合された(PR #63653)。さらに、**Single Executable Application(SEA)がバンドルアセットを仮想ファイルシステムとしてマウント**できるようになった(PR #65675)。
SEAはNode.jsアプリを単一バイナリとして配布する機能だ。今回のVFS統合により、SEA内に埋め込んだアセット(画像・設定ファイルなど)を通常のファイルシステムと同じAPIでアクセスできるようになる。配布用バイナリの利便性が一段と向上する。
実験的DTLS APIの追加
DTLS(Datagram Transport Layer Security)の実験的APIが実装された(PR #63182)。DTLSはTLSをUDPベースの通信に適用したプロトコルで、WebRTCやDTLS-SRTPといったリアルタイム通信で利用される。Node.js本体での実装は長らく要望があったもので、今回ようやく実験的ながら提供される。
crypto周りの強化
cryptoモジュールには複数の機能追加とバグ修正が入っている:
- 汎用MAC(Message Authentication Code)APIの追加(PR #65553)
- OpenSSLプロバイダーからの暗号アルゴリズム自動検出(PR #65484)——サードパーティのOpenSSLプロバイダーが提供する暗号・ハッシュアルゴリズムをNode.jsから透過的に利用できるようになる
Hmac.digest()が未初期化メモリを返す可能性があったバグの修正- RSA-PSSの過大なsalt値の処理修正
その他の変更
fsモジュール:fs.cp()がスレッドプール上でディレクトリツリーをコピーするように変更、ファイル書き込みの1往復化によるパフォーマンス改善、globへのmaxDepthオプション追加- 埋め込み向け改善:スナップショット不要でビルトインコードキャッシュを供給できるAPIの追加(PR #65352)
- **
http2**:ウィンドウサイズ拡大時に発生していた書き込みデッドロックの修正(PR #65440) - **
sqlite**:セッション管理周りの複数バグ修正
詳細はNode.js — Node.js 26.9.0 (Current)を参照していただきたい。