本文へ移動

Node.js 26.10.0 に util.throttle と debounce、LTS 22.23.3 にはない

Node.js 26.10.0 に util.throttle と util.debounce が入った。呼ばなければ影響しない追加と、node:sqlite のように扱いが変わる項目を分ける。LTS 22.23.3 にはない。

Node.js 26.10.0 が2026年9月22日に出た。Current 版で、util.throttle と util.debounce が同じ PR (#65899) で標準に入っている。LTS を本番に置いているチームが今日やることはない。翌日付の22.23.3 LTS の変更一覧に、この2つは載っていない。

26系を追っているなら、読む順番は新しい API からではない。node:sqlite と ffi を触っているコードが先だ。

呼ばなければ何も起きない追加と、既存の呼び出しに効く変更

項目モジュール分類
util.throttle / util.debounce (#65899)util新規追加
util.markPromiseAsHandled (#65805)src,lib新規追加
crypto.parsePKCS12() (#65627)crypto新規追加
openAsBlobSync (#65644)fs新規追加
SlidingWindowHistogram (#65825) / Histogram の qrde 解析 (#65806)perf_hooks新規追加
net.BoundSocket をスレッドと子プロセスへ送付 (#64725)net既存 API の適用範囲が広がる
マウント済み VFS からのライブラリ読み込み (#65909)ffi既存 API の適用範囲が広がる
undefined を NULL としてバインド (#65709)sqlite既存の呼び出しの扱いが変わる

出典:Node.js 26.10.0 (Current) の Notable Changes。分類は各項目の表題から判断したもので、リリースノートに分類が書かれているわけではない。

新規追加に分類した項目は、コードを変えずにバージョンを上げるだけなら関係しない。名前が増えるだけだ。util.throttle と util.debounce が入っても、setTimeout で書いた自前実装や lodash の呼び出しが壊れることはない。

置き換えられるかどうかは、この一覧からは決まらない。リリースノートに現れるのは実装が入ったという行と PR 番号だけで、引数の形、戻り値、待機中の呼び出しをどう畳むか、キャンセルできるかは書かれていない。自前実装や依存パッケージを外す判断は、そこを確かめた後の話になる。

node:sqlite に undefined を渡している経路

undefined を NULL としてバインドする変更 (#65709) は SEMVER-MINOR として並んでいる。変更前に undefined がどう扱われていたかは、この一覧には書かれていない。例外だったものが通るようになったのか、別の値が入っていたのかは、ここでは言えない。言えるのは、undefined が値として渡りうる経路があるなら、26.10.0 の前後で書き込まれる内容が変わりうるということだ。オプショナルなフィールドをそのままバインドしているクエリが該当する。

同じリリースには sqlite のもう1つの変更がある。不正な URL パスで abort する代わりに例外を投げるようになった (#66026)。プロセスごと落ちていた入力が、捕まえられるエラーになる。

ffi は VFS の中のライブラリを読む

26.10.0 の ffi は、マウント済みの VFS からライブラリを読み込めるようになった (#65909)。周辺の部品は直前のリリースで揃っている。26.9.0 で ffi モジュールが既定で有効になり、vfs が CJS と ESM のローダーに統合され、sea が同梱アセットを仮想ファイルシステムとしてマウントするようになった。26.9.0 側の内容は別の記事で書いた。

並べると、単一実行ファイルに共有ライブラリを同梱して VFS 経由で読ませる形が見えてくる。ただし、どちらのリリースノートもその組み合わせが動くとは書いていない。ここは推測にとどまる。

ffi にはもう1つ、既存コードに当たる変更がある。型の合わないポインタとサイズに ERR_INVALID_ARG_TYPE を投げるようになった (#65842)。数値と Buffer を曖昧に渡していた呼び出しは、ここで例外になる。

LTS 側の一覧では API がほとんど増えていない

22.23.3 ‘Jod’ は2026年9月23日付で、Notable Changes は root 証明書の NSS 3.125 への更新、corepack 0.36.0、npm 10.9.9、ICU 78.3、OpenSSL 3.5.8、Undici 6.28.1、そして node-api の2件(napi_create_typedarray の SharedArrayBuffer 対応と napi_create_external_sharedarraybuffer の追加)だ。API が増えているのはこの node-api の2件で、util.throttle も crypto.parsePKCS12() も入っていない。26系のこれらが22系に降りるのか、降りるならいつかは、2つのリリースノートからは読めない。

ここで確認できるのは、この22.23.3に対象のAPIが入っていないことまでだ。

26.10.0 に上げる前に見る3か所

  • node:sqlite に undefined が渡る経路。NULL としてバインドされる。
  • ffi に渡しているポインタとサイズの型。合っていなければ例外になる。
  • UTF-16LE のデコードと、リクエスト完了後のソケットに依存した処理。前者は不整列時のデコード修正 (#65905)、後者は完了後にソケットを破棄しない修正 (#65952) が入っている。

util.throttle が標準に入ったことと、26系を本番に置けるかは別の判断だ。26.10.0 のラベルは Current のままである。

出典 種別について