社内の集計バッチや管理画面を Node.js で動かしている場合、マイナー版の更新は互換性を壊さない前提で適用を判断できます。ただ、Node.js 26.11.0(2026年10月7日)の見出しには「sqlite: rename DatabaseSync and StatementSync」という、既存のコードに関係しそうな一行があります。同じ版には、夜間バッチが終わらずに朝まで残る、といった場面で使える --process-timeout も加わりました。
26系は10月28日に LTS へ移る予定で(公式の schedule.json)、更新先として検討が始まる時期です。24.21.0・26.10.0・26.11.0 を手元で動かした結果とあわせて、保守で先に見る箇所を整理します。サポート期間と更新計画はNode.js 24の保守期入りと26 LTS化の記事で扱っているので、ここでは 26.11 の中身に絞ります。
26.11.0 と 26.11.1 で入ったもの
26.11.0 の「Notable Changes」16項目のうち、業務システムの保守に関係しそうなものは次のとおりです。
| 変更 | 内容 | 26.10.0 以前で同じコードを動かすと |
|---|---|---|
| node:sqlite の改名 | DatabaseSync → Database、StatementSync → Statement。古い名前は別名として残る | 新しい名前は存在しない |
--process-timeout | 起動から指定時間を過ぎたら、状況を表示して終了コード124で終わる | bad option で起動しない |
http.isValidHeaderName() / isValidHeaderValue() | ヘッダー名・値が正しいかを真偽値で返す | 関数が存在しない |
Buffer.stringLength() | バイト列を文字列にしたときの長さを、変換せずに返す | 関数が存在しない |
process.ref() / unref() | 実験的な扱いから安定版へ | 26.10.0 でも呼び出しは動いた |
| Alpine Linux | サポートの区分が Experimental から Tier 2 へ | ― |
Alpine Linux は、BUILDING.md の表で x64 の musl 環境が「kernel >= 6.12, musl >= 1.2.5」(例:Alpine 3.22)の Tier 2 になりました(26.10.0 の表では Experimental)。コンテナはホスト側のカーネルを使うため、Alpine のイメージで動かしている場合はホストの版も照らし合わせます(Alpine 上での動作は未検証)。
同じ日に出た 26.11.1 の変更は、ドキュメントのビルドに関する3件の取り消し(Revert)だけで、以下の検証も 26.11.0 と同じ結果でした。
node:sqlite の改名:古い名前は動き、警告も出ない
26.11.0 のドキュメントは、DatabaseSync を「a deprecated alias for Database, kept for backward compatibility」と説明しています。非推奨の番号は DEP0210(DatabaseSync)と DEP0211(StatementSync)で、種類は「Documentation-only」、つまりドキュメント上の非推奨です。
実際に動かした結果は次のとおりです(Ubuntu 24.04、公式の linux-x64 バイナリ)。
# 26.10.0
exports: DatabaseSync,Session,StatementSync,backup,constants,default
db.constructor.name: DatabaseSync
# 26.11.0
exports: Database,DatabaseSync,Session,Statement,StatementSync,backup,constants,default
same class: true Statement same: true
db.constructor.name: Database
instanceof Database: true instanceof DatabaseSync: true
DatabaseSync で書いた既存のコードは 26.11.0 でもそのまま動き、--pending-deprecation を付けても警告は出ませんでした。Database と DatabaseSync は同じクラスなので、instanceof の判定も両方の名前で通ります。
変わったのはクラスの名前
挙動が変わった点が1つあります。new DatabaseSync(...) で作っても、constructor.name が "DatabaseSync" から "Database" に変わりました。ログやエラーメッセージにクラス名を出している箇所、constructor.name === 'DatabaseSync' で判定している箇所、テストのスナップショットにクラス名が入っている箇所は、26.11 へ上げたときに結果が変わります。
新しい名前に書き換えると、古い版で起動しない
逆に、ドキュメントに合わせて Database へ書き換えると、26.10.0 以前と 24.x では動きません。

ES モジュールの import { Database } from 'node:sqlite' は、24.21.0 と 26.10.0 では「does not provide an export named ‘Database’」の SyntaxError で起動しませんでした。CommonJS の require では、new Database() の行で TypeError: Database is not a constructor になります。
TypeScript では、検証時点で最新の型定義 @types/node 26.6.5(npm の公開日時 2026年10月9日)に Database がなく、tsc は「has no exported member ‘Database’」を返しました。同じ型定義には isValidHeaderName と Buffer.stringLength もまだありません。
開発機は 26.11 でも CI や本番が 24.x のまま、という構成は起こりえます。編集部の整理としては、動かす環境がすべて 26.11 以降になり、型定義も追いつくまでは DatabaseSync のままにしておくのが安全です。どうしても先に新しい名前を使いたい場合は、次のように両方の版で動く書き方ができます(24.21.0・26.10.0・26.11.0 で動作を確認)。
import * as sqlite from 'node:sqlite';
const Database = sqlite.Database ?? sqlite.DatabaseSync;
const db = new Database('jobs.db');
なお node:sqlite の安定度は 26.11.0 のドキュメントでも「1.2 - Release candidate」です。SQLite を組み込んで使うときのデータ破損の話題はSQLiteのWALのバグを扱った記事も参考になります。
—process-timeout:終わらないバッチを止めて、理由を残す
夜間の集計や外部サービスとの同期が、閉じ忘れた接続やタイマーのせいで終わらない場面を想定します。--process-timeout は、起動から指定時間を過ぎても動いているプロセスを終了させます。
終了コードは timeout(1) と同じ124で、終了前にメインスレッドの状態とイベントループを生かしているリソースを標準エラーに出します(ドキュメントより)。HTTPサーバーとタイマーを残したスクリプトで試した結果です。
$ node --process-timeout=2s hang.mjs
listening 33757
(node:5172) Process timed out after 2s (--process-timeout). Exiting with code 124.
Main thread was not executing JavaScript.
Resources keeping the event loop alive:
TCPServerWrap (listening on 0.0.0.0:33757, fd 21)
Timeout (next due in 79ms)
$ echo $?
124
無限ループの場合は、止まっていた関数のスタックトレースが出ました。終わらなかった理由がログに残る点が、外側から kill するのとの違いです。
試した範囲で、運用に組み込む前に知っておきたい点は次のとおりです。
- 単位が必須。 リリースノートの見出しは
--process-timeout=Nですが、--process-timeout=3は「Expected a positive integer followed by a unit (ms, s, m or h), e.g. 30s」で起動しませんでした。30s、5m、1hのように書きます process.on('exit')は呼ばれない。 ドキュメントにも「without emitting the'beforeExit'and'exit'events」とあり、実際にexitの処理は動きませんでした。終了時の後片付けをそこに書いている場合は、別の方法が必要ですNODE_OPTIONSでは指定できない。 コマンドラインに直接書きます。--inspectとも同時に使えません(「either —process-timeout or —inspect can be used, not both」)- 26.10.0 以前では起動しない。 24.21.0 と 26.10.0 は
bad option: --process-timeout=2sと終了コード9で終わりました(前の図の4行目)。cron や systemd のユニットに書く場合、実行する Node.js の版が 26.11 以降であることを先に確かめます
node --run と組み合わせられないこと、--report-on-process-timeout で診断レポートも出せることもドキュメントにあります(未検証)。処理の置き場所ごとの時間の上限については、Lambdaの90分の上限とバッチの置き場所の記事でも整理しています。
ヘッダーを書き込む前に確かめる
http.isValidHeaderName() と http.isValidHeaderValue() は、ヘッダーの名前と値が正しいかを true / false で返します。これまでも http.validateHeaderValue() で同じ確認はできましたが、こちらは不正なときに例外を投げます。
業務システムで想定しやすいのは、CSV のダウンロードで日本語のファイル名をそのまま Content-Disposition に入れる場合です。26.10.0 と 26.11.0 の両方で、res.setHeader() が ERR_INVALID_CHAR で失敗しました。
raw validateHeaderValue: ERR_INVALID_CHAR isValidHeaderValue: false
rfc5987 validateHeaderValue: ok isValidHeaderValue: true
setHeader(raw) -> 500 ERR_INVALID_CHAR
raw は filename="請求書_2026年10月.csv"、rfc5987 は filename*=UTF-8'' の後ろに encodeURIComponent() で変換した名前を付けた形です。この結果は 26.10.0 と同じで、新しい関数は「書き込む前に判定して別の値に切り替える」処理を例外なしで書けるようにするものです。日本語の値(「山田」で確認)は httpValidation: 'relaxed' でも false でした。
26.11 へ上げる前の確認(編集部の整理)
grep -rn "DatabaseSync\|StatementSync"でnode:sqliteの利用箇所を洗い出し、constructor.nameを使う判定・ログ・スナップショットがないか確かめる- 新しい名前(
Database/Statement)への書き換えは、CI・本番・バッチ用サーバーの版と@types/nodeが揃ってからにする --process-timeoutを使う場合は、cron などの起動コマンドに単位付きで直接書き、exitイベントに頼る後片付けがないかを見直す- ヘッダーにファイル名や利用者の入力を入れている箇所は、
isValidHeaderValue()で事前に判定するか、filename*=UTF-8''形式に変換する
本番への投入時期は、26系が LTS に移る10月28日以降を前提に、24の保守期入りと26 LTS化の記事の手順で決めてください。
確認した範囲
2026年10月13日に、Node.js 26.11.0 のリリースページ、CHANGELOG_V26.md、タグ v26.11.0 のドキュメント(sqlite・deprecations・cli・process・http・buffer・BUILDING.md)、schedule.json を確認しました(資料調査)。Ubuntu 24.04(x64)で公式バイナリの 24.21.0・26.10.0・26.11.0・26.11.1 を動かし、
@types/node26.6.5 を TypeScript 5.8.2 で型チェックしました(実機検証)。Alpine 上の動作、--report-on-process-timeout、Windows・macOS は確認していません。2026年10月16日に、10月14日公開の 26.12.0 と 24.22.0 の CHANGELOG も確認しました。24.22.0 にはnode:sqliteの改名と--process-timeoutは入っていません。
Node.js で動く業務システムの更新や保守は、開発・AI・自動化のご相談からお問い合わせください。
参考資料
- Node.js 26.11.0 (Current)
- nodejs/node — doc/changelogs/CHANGELOG_V26.md
- nodejs/node — doc/api/sqlite.md(v26.11.0)
- nodejs/node — doc/api/deprecations.md(DEP0210・DEP0211)
- nodejs/node — doc/api/cli.md(—process-timeout)
- nodejs/node — doc/api/http.md(isValidHeaderName・isValidHeaderValue)
- nodejs/node — BUILDING.md(v26.11.0)
- nodejs/Release — schedule.json









