期間: 2026-09-24 〜 2026-09-28 · PR 48 件(新機能 4 / 変更・修正 22 / その他 22)

実験的な customWebpack は取り消し

前回追加された実験的な customWebpack オプション(#98862)は、モノレポで Next.js が重複する依存チェーンを生むため revert された(#99227)。この期間のリリースは canary(v16.4.0-canary.43〜.51)のみで、安定版は出ていない。

新機能

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

#97770 で導入されたファサード分割により、動的 import と静的な名前付き import が混在するローカル ESM モジュールが 2 つのランタイム上の実体を持ち、共有シングルトンが壊れていた(remote-components のリグレッション、#99279)。

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

GC 中は集約グラフのリバランスをバッファし、GC が落ち着いてからまとめて処理する(#98591)。削除済みタスクの無効化は何もしないようにし(#98614)、タスク回収時に逆方向の依存エッジも取り除く(#99145)。

📦 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 Transition by 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