Node.js 26 リリース:Temporal API とランタイムの近代化

Node.js 26 のリリースは、コア API とエンジンを近代化しようとするプラットフォームの取り組みにおける重要な一歩となります。バージョンの更新に伴い、通常のパフォーマンス向上や依存関係の更新も行われますが、最も注目すべき追加要素は Temporal API がデフォルトで有効になったことです。これにより、JavaScript エコシステムにおける長年の課題であった日付と時間の扱いに対応します。

「Current」リリースとして標準的なように、Node.js 26 は、10月に長期サポート (LTS) に入る前の 6 か月間、最先端の機能を提供します。開発者にとって、このリリースは単一の「キラー機能」というよりも、現代的な TC39 プロポーザルを統合しながら、レガシーな負債を整理していく累積的な効果にあります。

Temporal API の登場

Node.js 26 で最も期待されていた変更は、現在デフォルトで有効になっている Temporal API です。長年、JavaScript 開発者は、その混乱を招く API やタイムゾーンおよびカレンダーシステムのサポート不足により、広く批判されてきたレガシーな Date オブジェクトに依存してきました。このギャップを埋めるために、コミュニティは Moment.js、Luxon、および date-fns のようなサードパーティライブラリに大きく依存してきました。

Temporal を使用することで、Node.js はランタイムに直接組み込まれた、堅牢で機能豊富な代替手段を提供します。Hacker News のコミュニティメンバーが指摘したように、これはプラットフォームネイティブの日付/時間処理への歓迎すべき移行です。

"Moment と Luxon はかなり良いですが、理にかなった日付/時間処理は、プラットフォームに標準で組み込まれているべきものです。"

V8 14.6 と新しい言語機能

Node.js 26 は、V8 JavaScript エンジンをバージョン 14.6.20.33 に更新しました。この更新は単なる速度向上だけではありません。いくつかの注目すべき TC39 プロポーザルをランタイムに導入しています。

Map Upsert

[Weak]Map.prototype.getOrInsert() および getOrInsertComputed() メソッドは、キャッシュのようなパターンをより効率的に扱う方法を導入します。興味深いことに、一部の開発者は、ここでの「upsert」の定義における意味的な変化に気づいています。伝統的に「Update or Insert(更新または挿入)」と見なされてきましたが、V8 の実装は「Get or Insert(取得または挿入)」に焦点を当てています。

Iterator Sequencing

Iterator.concat() の追加により、イテレータのシーケンシングが容易になり、開発者がデータストリームや複雑な反復ロジックを処理する方法が効率化されます。

プラットフォームの近代化:削除と非推奨化

Node.js 26 は、レガシーなコードを削除し、コアチームのメンテナンス負担を軽減するために、積極的な「SEMVER-MAJOR」変更の傾向を継続しています。主な削除内容は以下の通りです。

  • http.Server.prototype.writeHeader(): すでに完全に削除されました。開発者は writeHead() に移行する必要があります。
  • レガシーな Stream モジュール: 内部の _stream_wrap, _stream_readable, _stream_writable, _stream_duplex, _stream_transform, および _stream_passthrough モジュールが削除されました。
  • TypeScript Transforms: --experimental-transform-types フラグが削除されました。これは、ランタイムが型変換をどのように扱うかにおける転換を示しています。
  • Corepack: Corepack のドキュメントが削除されました。また、ユーザーからは、Corepack が Node.js 26 と共に提供されなくなったことが指摘されており、これは pnpm のインストールを主要な方法として使用しているユーザーに影響を与える可能性があります。

その他の注目すべき更新

  • Undici 8: デフォルトの HTTP クライアントがバージョン 8.0.2 に更新され、ネットワークリクエストのパフォーマンスと信頼性が継続的に向上しています。
  • ビルド要件: 最小 GCC 要件が 13.2 に引き上げられ、Python 3.9 のサポートが終了しました。
  • Crypto Enhancements: リリースには、crypto モジュールへのいくつかの更新が含まれています。これには、KeyObject API 用の raw key フォーマットのサポートや、非対称鍵のインポートの統一が含まれます。

コミュニティの視点

リリースは概ね好意的に受け入れられていますが、コミュニティは、コアに含まれていないと感じる機能への要求を継続しています。一部の開発者は、組み込みの SQLite モジュールが依然として実験的(experimental)なタグが付いていることに失望し、他の開発者は、デプロイを簡メント化しセキュリティを改善するために、ネイティブな WebSocket サーバーの実装がないことを嘆いています。

アップグレードを検討している方は、破壊的な変更を避けるために、レガシーな http および stream メソッドの使用状況を監査することをお勧めします。Temporal を使用する準備が完了すれば、重い日付操作ライブラリの必要性は、ついに減少し始めるかもしれません。

Sources