8月26日、Antoine du Hamelが「Node.js — Node.js 26.8.0 (Current)」と題した記事を公開した。Node.js 26系(Currentリリース)の最新版となる26.8.0では、長年の要望だったREPLへの構文ハイライト追加を筆頭に、ZIPファイル操作の標準サポート、SQLite APIのusing構文対応、暗号モードの拡張など、実用性の高い変更が複数含まれている。
Node.jsのCurrentリリースは最新機能をいち早く取り込むトラック(LTSへの昇格前の段階)であり、26系は2026年10月にLTSになる予定だ。今回のリリースはその前段階として機能の充実が続いている段階にあたる。
REPLの構文ハイライトがついに標準搭載
今回のリリースで最も多くのエンジニアの目を引くのが、REPLへの基本的な構文ハイライト追加(Aviv Keller、#64591)だ。nodeコマンドで対話環境を起動したとき、コードに色がつくようになった。
Node.js REPLは長らく素っ気ないモノクロ表示のままで、他の対話環境と比べて見劣りするという声が多かった。追加設定なしで色付きになることで、特に学習用途やちょっとした動作確認時の使い勝手が向上する。
ZIPファイル操作が標準で扱えるように
zlibモジュールにZipEntry・ZipFile・ZipBufferが追加された(Philipp Dunkel、#64339)。これまでNode.jsでZIPファイルを扱うにはadm-zipやjszipなどのサードパーティライブラリが事実上必須だったが、標準APIとして利用できる選択肢が生まれた形だ。依存ライブラリを減らしたいプロジェクトや、セキュリティ上の理由でサードパーティ依存を避けたいケースでの採用が期待できる。
SQLite APIにusing構文対応
Node.js 22.5.0(2024年7月)から実験的に導入されたSQLite組み込みサポートに、今回2つの追加がある。
StatementSync.prototype.close()の追加(#64232)StatementSync.prototype[Symbol.dispose]()の追加(同上)
Symbol.disposeはTC39で策定が進むExplicit Resource Management提案に対応したもので、using構文と組み合わせることでステートメントのリソース解放を宣言的に記述できるようになる。
// using構文でステートメントを自動クローズ
{
using stmt = db.prepare('SELECT * FROM users');
const rows = stmt.all();
} // ブロック終了時に stmt.close() が自動呼び出される
using構文はTypeScript 5.2以降でも利用可能で、JavaScriptへのネイティブ対応が広がりつつある。SQLiteステートメントのclose忘れによるリソースリーク防止に直結する実用的な追加だ。
暗号まわりの強化
Cipher/Decipher APIにSIVとGCM-SIVモードが追加された(Filip Skokan、#63411)。
GCM-SIVは「Synthetic IV(合成初期化ベクトル)」を用いた認証付き暗号モードだ。AES-GCMはノンス(nonce)を同一鍵で再利用した際に鍵ストリームが漏洩するという深刻な弱点を持つが、GCM-SIVはノンスの再利用が起きても機密性への影響が限定される設計になっており、ノンス管理が難しい状況での採用が進んでいる方式だ。
あわせてNSS 3.126へのルート証明書更新も含まれている(#65495)。TLS通信の信頼チェーンに使われるルートCAバンドルの最新化で、古いバージョンを使い続けることによる証明書検証エラーを防ぐ上で重要な定期更新だ。
パフォーマンス改善
ファイルシステム操作に複数の改善が入った(Shelley Vohr)。再帰的readdirでの不要なstat()呼び出しを削減、大ファイルのreadFileUtf8をサイズ指定読み込みに変更、小ファイルをスレッドプール1往復で読み込むよう最適化、という3点が含まれる。ファイルI/Oが多いアプリケーションでは体感できる改善になる可能性がある。
net.BlockListの性能も向上した(James M Snell、#64974)。BlockListはIPアドレスのフィルタリングに使うAPIで、大量のIPレンジを扱うアプリケーションで効果が期待できる。
さらに**perf_hooksのHistogramに統計的仮説検定を追加**(#65416)し、compare.jsへの--analyzeモードも加わった。2つのベンチマーク結果に統計的有意差があるかをt検定などで判定できるようになる。「速くなったように見えるが誤差の範囲かもしれない」という状況を定量的に判断できる機能で、性能検証を丁寧に行いたいプロジェクトでも活用できる。
そのほかの主な変更
diagnostics_channelのTracingChannelがStableに昇格した(#64525)。Experimentalだった診断チャンネルAPIが安定版になり、本番環境での採用がしやすくなった。
util.MIMEType.parse()(例外を投げない版)も追加された(#64965)。不正なMIMEタイプ文字列を渡したとき、従来のnew MIMEType()は例外を投げるが、MIMEType.parse()はnullを返す。try-catchを書かずに済むため、入力値の検証フローがシンプルに書ける。
詳細はNode.js — Node.js 26.8.0 (Current)を参照していただきたい。