期間: 2026-09-24 〜 2026-09-28 · PR 48 件(新機能 4 / 変更・修正 22 / その他 22)
実験的な
customWebpackは取り消し
新機能
Turbopack の additionalRoots がデプロイアダプターでも使えるように(#99015)
何ができるようになったか
#98003 の続きとして、Turbopack の
additionalRootsがvc deployなどアダプター API を使うデプロイでも動くようになった(破壊的変更ではない)。
- 仕組み: ルートをまたぐシンボリックリンクのターゲットを書き換える必要がある場合、「合成」シンボリックリンクを作成する
- ドキュメント:
next.config.jsのturbopackリファレンスも更新
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
バンドルアナライザーの比較画面が URL で共有できるように(#98530)
何ができるようになったか
バンドルアナライザーの比較機能を専用の
/compareルートに移し、選択したベースライン・比較スナップショット・ルート・表示を URL の検索パラメータに保存するようにした。
- 嬉しい場面: 比較結果の画面をリンクとして共有したいとき
- 補足: データ URL をルート相対にし、開発時は過去のスナップショットをプロキシすることで、ネストしたルートからもデータを読み込める
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
Git の無いアプリでもエージェントによるアップグレードが可能に(#99217)
何ができるようになったか
Git リポジトリが無いアプリでも、設定したリマインダーから始めたものを含め、エージェントによるアップグレード(agentic upgrade)を使えるようになった。
- 仕組み: Git が無い場合はその場でアップグレードするようエージェントに指示し、Git がある場合は worktree・コミット・プルリクエストを使う
- 重複作業の確認: アプリで使えるリポジトリ・プロバイダーの機能を使って確認する
📦 v16.4.0-canary.51 · トピック: AIアップグレード
アップグレードを別の worktree で行うかユーザーに確認するように(#99232)
何ができるようになったか
エージェントによるアップグレードを別の worktree で実行するかどうかを、ユーザーが選べるようになった。
- 仕組み: 既存のエージェント内ではアップグレード時の 1 回の質問の中で、新しくエージェントを起動する場合は起動前に確認し、その選択をアップグレードの指示に渡す
⏳ 未リリース · トピック: AIアップグレード
変更・修正
実験的な customWebpack サポートを revert(#99227)
Before
実験的な
customWebpackオプション(#98862)で、プロジェクトにインストールした webpack を使えた。
After
新しい依存チェーンによりモノレポ構成で Next.js のバージョンが重複しうること、内部同期が壊れていたことから、変更を取り消した。依存グラフの調整で直せる可能性はあるが、先に調査とドキュメント化が必要としている。
移行が必要
canary で
customWebpackを試していた場合、このオプションは使えなくなる。
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
PPR ページへ遷移した後に Server Action がハングする不具合を修正(#99252)
Before
Vercel 上で
/aから PPR の/bに遷移した後に/aが持つ Server Action を呼ぶと、転送処理が消費済みのリクエストストリームを再度読もうとし、関数がタイムアウトするまで待ち続けていた。
After
保存済みの
actionBodyがあればそれを転送し、転送元ルートの resume ヘッダーを取り除くようにした。actionBodyが無いリクエストは従来どおりリクエストストリームを使う(#99153 の修正)。
📦 v16.4.0-canary.51 · トピック: Server Actions
Edge SSR でメタデータのストリーミング方針が守られない不具合を修正(#99128)
Before
Edge ランタイムの App Router SSR では常にメタデータをストリーミングしていたため、既定の HTML 制限ボット一覧に該当するリクエストでも、最初の
<head>にメタデータが含まれないことがあった。
After
Node SSR と同じユーザーエージェントベースの方針を使い、該当するリクエスト(Twitterbot・TelegramBot など)には
</head>より前にメタデータを返す。ChatGPT-User・GPTBot・ClaudeBot やブラウザは引き続きストリーミング。既定のボット一覧は変更なし。
📦 v16.4.0-canary.51 · トピック: レンダリング・DevTools
% を含む URL がプリレンダー済みルートで 500 になる不具合を修正(#99121)
Before
プリレンダーのメタデータ選択時にルートパラメータを二重にデコードしており、
/open/docs/space%20here/with%2Fslash/fallback%25のような有効な URL がパラメータのデコードエラーで 500 を返していた(ビルド時生成・ランタイム生成の両方)。
After
ルートの正規表現を直接使ってマッチを判定するようにし、200 を返すようにした。マッチの優先順位やサーバー側のパラメータのエンコード挙動は変わらない。
📦 v16.4.0-canary.51 · トピック: キャッシュ・プリレンダリング
ensureStatic が "shell" / "prefetch" のときの Instant Validation を静的シェル基準に(#98249)
Before
Instant Validation は
ensureStaticの値にかかわらず、ランタイムシェル(ShellRuntimeステージ)を検証していた。
After
ensureStatic >= "shell"のときは、クライアントが静的リクエストからシェルを取り出すため、ShellStaticステージを検証するようにした。そのためアプリシェルからセッションデータにアクセスできないことを検出する。
📦 v16.4.0-canary.51 · トピック: キャッシュ・プリレンダリング
'use cache' の root params 静的追跡に向けて next/root-params を分割(#99239)
Before
生成される
next/root-paramsモジュールにすべての getter が含まれ、キャッシュされたモジュールの依存収集に無関係な root params まで含まれていた。
After
getter ごとに別の仮想モジュールから再エクスポートし、副作用なしと宣言するようにした。無関係な root params を追加してもコードハッシュが変わらない。ランタイムの root params 追跡は変更なし。
📦 v16.4.0-canary.51 · トピック: キャッシュ・プリレンダリング
本番ビルドで各レイアウトセグメントを 1 回だけチャンク化するように(#99100)
Before
Turbopack の本番ビルドで、App Router のレイアウトセグメントがその下のエンドポイントごとに繰り返しチャンク化されていた(出力は共有されていたため、バンドルは大きくならず、ビルド作業の無駄だった)。
After
手動で作るサーバーユーティリティのチャンクグループを開発時だけに限定し、本番では共有レイアウトセグメントを 1 回だけチャンク化するようにした。
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
パッケージ内のコードからプロジェクト全体がトレースされる不具合を修正(#99238)
Before
node-gyp-buildのpath.resolve(dir || '.')のような静的な'.'を含むコードを、アプリのルートからディレクトリとしてトレースしてしまい、無関係なアプリのアセットまで再帰的に含まれていた。
After
パッケージ由来のプロジェクトルートからのトレースは、静的に名前が決まる「ファイル」だけに限定し、元のリクエストはこれまでどおりパッケージ基準で解決する。パッケージが明示的に名前を指定したアプリの設定ファイルは引き続き見つけられる。
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
webpack ローダーが依存を読むときにファイルシステムのルートをまたげるように(#99202)
Before
Turbopack ではルートをまたぐのはシンボリックリンクの境界でしか許されず、シンボリックリンクをたどって別のルートの依存を読む webpack ローダーが失敗していた(#99157)。
After
webpack ローダーがシンボリックリンク経由でルートをまたいで依存を読むことを許可した。
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
エクスポート名マングリングのためだけのファサード分割をやめ、シングルトンの二重化を修正(#99285)
Before
After
エクスポートのマングリングのためだけの分割をやめた。実際に再エクスポートを持つモジュールは従来どおり分割され、分割しないモジュールも安全な場合はマングリングの対象になる。
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
クライアント参照プロキシと WASM ローダーのエクスポート使用判定を修正(#99115)
Before
RSC のクライアント参照プロキシと WebAssembly ローダーのコード生成が、グラフ上のラッパーとは別の仮想モジュールで行われ、エクスポート使用の判定が「全エクスポート使用」にフォールバックしていた。
sideEffects: falseのバレルでは、削除されたクライアントエクスポートを登録して存在しないモジュール ID を要求することがあった。
After
どちらもグラフ上のラッパーモジュールとしてコード生成するようにし、根本の不一致を解消した。#99102 の安全確認はそのまま残る。
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
turbo-tasks の GC に関する不具合を修正(#98591, #98614, #99145)
Before
GC 中に集約グラフの更新が競合して再試行上限を超えたり、削除中のノードを操作しようとしたりすることがあった。また、削除済みタスクの無効化や、削除済みタスクを参照する逆方向の依存エッジが残ることで、panic につながる穴があった。
After
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
バンドルアナライザーのスナップショット名オプションを --snapshot-name に改名(#99251)
Before
スナップショットに付けるカスタムラベルは、比較のベースライン用の名前(保存データでは
baselineName)として扱われていた。
After
CLI オプションを
--snapshot-name、保存されるメタデータをsnapshotNameに改名し、比較 UI の表示ラベルと検索にもこれを使う。
移行が必要
旧 CLI オプションとメタデータのフィールドは残されない。
baselineNameしか持たない既存のスナップショットでは、カスタムラベルが表示されなくなる。
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
バンドルアナライザーのツリーマップが低 DPI の画面でぼやける不具合を修正(#99197)
Before
ツリーマップのキャンバスのバッキングストアが枠付きコンテナに合わせて縮小され、低 DPI の画面でぼやけていた。
After
キャンバスをコンテンツボックスからサイズ決めし、デバイスピクセル比が変わったときはバッキングストアを作り直すようにした。
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
バンドルアナライザーで JavaScript のソースがアセット扱いになる不具合を修正(#98536)
Before
トレースされた TypeScript のソースが出力種別の分類でアセットと判定され、出力チャンクが JavaScript でもツリーマップで赤く表示されることがあった。
After
トレースされたプロジェクトファイルを出力種別の分類から除外した。
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
next internal trace サーバーのプロセス名を分かりやすく(#99257)
Before
長時間動く
next internal traceサーバーは、ただのnodeプロセスとして表示されていた。
After
Next.js のバージョンを含むプロセスタイトルを付け、WebSocket と MCP のサービスが同じ名前で表示されるようにした。動作は変わらない。
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
next lint を使っていないプロジェクトでは ESLint 移行をスキップ(#99103)
Before
アップグレード時の ESLint 移行コードモッドが、どの package script も
next lintを使っていない場合でも lint 設定と依存関係を変更していた。
After
next lintを使っていない場合は移行をスキップし、別のリンターや ESLint を直接使っているプロジェクトの設定を保つ。eslint-config-nextのプラグインが v9 に依存しているため、ESLint は最大 v9 に固定する。
📦 v16.4.0-canary.51 · トピック: ビルド・Turbopack
エージェントによるアップグレードに必要なコンテキストだけを渡すように(#99189)
Before
同じメジャー内のセキュリティ更新や最新版への更新でも移行手順全体が渡され、エージェントが不要なコードモッドや Pages Router の作業を行うことがあった。
After
ドキュメントを「異なるメジャー」「同じメジャー」「将来のデフォルト」「共通」に分割し、該当するコンテキストだけを渡すようにした。
📦 v16.4.0-canary.51 · トピック: AIアップグレード
AI アップグレードの引き継ぎに 1M コンテキストの Sonnet 5 を使用(#99183)
Before
引き継ぎ直後に Sonnet のコンテキスト上限に達していた。
After
引き継ぎに 1M コンテキストの Sonnet 5 を使うようにした。
📦 v16.4.0-canary.51 · トピック: AIアップグレード
npm のアドバイザリ照会を絞り込み、準備のできたアップグレードだけを通知(#99222)
Before
アドバイザリの確認で一括の audit リクエストを送り、GHSA の照会とフォールバックも行っていた。
After
インストール済みのバージョンと関係するアップグレード候補だけを npm アドバイザリに照会し、GHSA の照会とフォールバックを削除した。評価で準備のできたアップグレード先が見つかったときだけ通知(nudge)を表示する。
📦 v16.4.0-canary.51 · トピック: AIアップグレード
その他
- [cd] Tolerate 409 when uploading preview tarballs(#99091)📦 v16.4.0-canary.51
- [test] Skip flaky deploy tests(#99156)📦 v16.4.0-canary.51
- Fix flaky lazy-dynamic-imports.test(#99057)📦 v16.4.0-canary.51
- Turbopack: pass RcStr to AnalyzeIssue(#99166)📦 v16.4.0-canary.51
- docs: font per-call preload scope and the declarations font-family override(#99167)📦 v16.4.0-canary.51
- [test] Fix new deploy suites(#99162)📦 v16.4.0-canary.51
- Remove the page/layout distinction from RouteTree(#98970)📦 v16.4.0-canary.51
- Sequence CI for branch-based PR stacks(#99086)📦 v16.4.0-canary.51
- test: stabilize lazy dynamic import error overlay(#98730)📦 v16.4.0-canary.51
- [test] Adjust the prerender-encoding open fallback gate for non-adapter deploys(#99240)📦 v16.4.0-canary.51
- simplify
Transitionby removing dead members(#94467)📦 v16.4.0-canary.51 - Avoid obsolete pnpm overrides in pack-next(#99199)📦 v16.4.0-canary.51
- test: snapshot the proxy-runtime build error output(#99136)📦 v16.4.0-canary.51
- test: consolidate duplicate mode branches in build error tests(#99135)📦 v16.4.0-canary.51
- test: enable deploy coverage for asset and compiler errors(#98850)📦 v16.4.0-canary.51
- Reduce stacked PR gate polling and use ts-jest(#99215)📦 v16.4.0-canary.51
- bundle-analyzer: suspend while loading analyzer data(#98535)📦 v16.4.0-canary.51
- test: drop skipDeployment where another gate already excludes deploy(#99194)📦 v16.4.0-canary.51
- test: run the TypeScript version warning suites in deploy(#99195)📦 v16.4.0-canary.51
- docs: papercuts in image API reference(#99256)📦 v16.4.0-canary.51
- Hoist resolved pathname into app page route match(#99259)📦 v16.4.0-canary.51
- test: forward __NEXT_PARTIAL_PREFETCHING to test-deploy(#99275)📦 v16.4.0-canary.51