Node.js 26 の注目点 - Temporal 既定有効と「ビルドなしTS実行」の現在地

Node.js 26 の注目点 - Temporal 既定有効と「ビルドなしTS実行」の現在地

作成日:
更新日:

JavaScript ランタイムの「新標準を素直に取り込む」流れは、Deno だけのものではありません。Deno 2.7 が Temporal API を安定化したことを以前書きましたが、Node.js 26 では Temporal がデフォルトで有効になりました。つまり Temporal は、もう「どこか一つのランタイムの目玉機能」ではなく、JavaScript の新常識になりつつあります。

2026年5月5日にリリースされた Node.js 26 は、ほかにも「ビルドなしの TypeScript 実行」の安定化など、実務に効く更新が揃った版です。この記事では注目点を整理します。

Node.js 26 の注目点(早見表)

項目内容
Temporal APIデフォルト有効に。フラグ不要で新しい日時 API が使える
TypeScript 実行type stripping が安定化(実験フラグが外れた)。「消せる型」だけ実行できる
V814.6.202.33(Chromium 146)。Map.prototype.getOrInsert()Iterator.concat() など
Undici8.0.2 へ。fetch の土台が更新
削除ServerResponse.prototype.writeHeader()、レガシー _stream_* モジュール、--experimental-transform-types フラグ
ステータス2026年5月時点は Current。2026年10月に LTS 入り予定

Temporal API がデフォルト有効に

最大の注目点が Temporal API のデフォルト有効化です。これまで実験的な位置づけでしたが、Node.js 26 ではフラグなしで使えます。

Temporal は、JavaScript の長年の弱点だった日時操作を刷新する新しい標準 API です。従来の Date は、ミュータブル・タイムゾーン扱いが貧弱・月が0始まり、といった落とし穴だらけで、date-fnsdayjs で補うのが常でした。Temporal はイミュータブルで、タイムゾーンを第一級に扱い、日付・時刻・期間を明確な型で表現します。

NOTE

Temporal は Node 固有の機能ではなく、ECMAScript の標準提案です。Deno 2.7 や Chrome でも実装が進んでおり、Node.js 26 はそれをランタイムでデフォルト提供したものです。標準なので、覚えた知識はブラウザでも他ランタイムでも活きます。「Temporal はもう新常識」と捉えてよい段階です。

「ビルドなし TypeScript 実行」の現在地

Node.js は近年、.ts ファイルをそのまま実行する機能を進めてきました。Node.js 26 では、この type stripping(型の除去)が安定化し、実験フラグが外れました。仕組みは「TypeScript の型注釈を空白に置き換えて、純粋な JavaScript として実行する」というものです。tsconfig.json もソースマップも不要な、軽量な方式です。

ただし、ここには重要な線引きがあります。type stripping が扱えるのは「消せる型(erasable syntax)」だけです。コード生成を伴う構文はサポートされません。

type stripping が扱えない例(実行時エラー)
namespace A {
  export let x = 1; // ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX
}

具体的に、次の構文は type stripping では動きません。

  • enum 宣言
  • ランタイムコードを含む namespace(型だけの namespace は可)
  • パラメータプロパティ(コンストラクタ引数での private x 等)
  • デコレータ
  • インポートエイリアス

しかも Node.js 26 では、これらを変換していた --experimental-transform-types フラグが削除されました。つまり Node 本体の TypeScript 実行は、いよいよ「型を消すだけ」に一本化されたわけです。

WARNING

「Node がネイティブで TS を動かせるなら、もう tsxts-node は要らない」と早合点しないでください。enum・デコレータ・パラメータプロパティ・namespace を使うコードや、tsconfig.json の paths・古い JS ターゲットが必要なプロジェクトは、引き続き tsx / ts-node / tsc が必要です。Node の type stripping は「消せる型だけの軽量実行」と割り切るのが正解です。型チェック自体も行わない(あくまで実行)点にも注意。

設定スクリプトや小さな CLI など「消せる型」で書けるものは Node 単体で軽く回し、フル機能が要る本体コードは従来ツール、という使い分けが現実解です。ネイティブ言語で TS ツールチェーンを作り直す流れは TypeScript 7 の Go 移植とも地続きです。

その他の更新

V8 14.6(新しい言語機能)

V8 が 14.6.202.33(Chromium 146)に更新され、地味に効く新メソッドが入りました。

  • Map.prototype.getOrInsert() / getOrInsertComputed(): キーが無ければ挿入して返す。if (!map.has(k)) map.set(k, ...) の定番パターンが1行に
  • Iterator.concat(): イテレータの連結

Undici 8 と fetch

HTTP クライアントの Undici が 8.0.2 に更新されました。グローバルな fetch の実装を支える部分なので、HTTP まわりの挙動・性能に効きます。

削除されたもの(移行の関門)

メジャー更新なので破壊的変更があります。移行前に確認してください。

  • ServerResponse.prototype.writeHeader(): 削除。writeHead() を使う
  • レガシー stream モジュール: _stream_wrap / _stream_readable / _stream_writable / _stream_duplex / _stream_transform / _stream_passthrough が削除
  • --experimental-transform-types: 削除(前述)
  • ビルド要件: GCC 13.2 へ、Python 3.9 サポート終了、Windows SDK 11 へ

まとめ

  • Node.js 26(2026年5月5日)は Temporal がデフォルト有効。Deno に続き Node も標準提供で、Temporal は実質「JavaScript の新常識」に
  • type stripping が安定化.ts を素で実行できるが、扱えるのは「消せる型」だけ。--experimental-transform-types は削除された
  • enum・デコレータ・namespace・パラメータプロパティや tsconfig.json 依存があるなら、引き続き tsx / ts-node / tsc が必要
  • V8 14.6 で Map.prototype.getOrInsert()Iterator.concat()、Undici 8 で fetch 更新
  • writeHeader() やレガシー _stream_* 削除、ビルド要件の引き上げに注意。2026年10月に LTS 入り予定

派手な新機能というより「標準を素直に・軽く取り込む」更新が中心の版です。Temporal とビルドなし TS 実行という2つの“当たり前化”を、自分のプロジェクトでどこまで使えるか確認しておくと、次の LTS への移行がスムーズになります。

参考リンク