期間: 2026-09-24 〜 2026-09-28 · PR 20 件(新機能 4 / 変更・修正 15 / その他 1)
新機能
エラーページをレンダラー内で直接描画(#36399)
何ができるようになったか
これまではレンダリング中にエラーが起きると、エラーをクエリにエンコードして
/__nuxt_errorへ新しいリクエストを送り、エラーページを改めて描画していた。これをレンダラーのfetch内の try/catch に移し、同じイベントのままエラーページを描画するようにした。
- 使い方:
experimental.inlineErrorRenderingで有効化。compatibilityVersion: 5ではデフォルトで有効- 仕組み: 捕捉したエラーを正規化して
captureErrorとonDevErrorに渡し、新しいNuxtSSRContextでerror.vueを描画する。失敗したレンダリングが書き込んだヘッダーや Cookie は同じイベントなのでそのまま残る。再帰の追跡も不要になる- JSON リクエスト:
error.vueを使わずにそのまま throw する
挙動の違い(非破壊的な変更の意図だが注意点あり)
- エラーの描画は Nitro のミドルウェアやルートルールを 2 回目には通らない
- エラーページの
render:htmlは元のイベントで発火し、x-nitro-prerenderのヒントも元のイベントから集められる- Nitro の
errorフックを使うモジュールはcaptureError経由で引き続き発火する/__nuxt_errorは使われなくなる
⏳ 未リリース · トピック: サーバーレンダリング
トップレベルの prerender オプションを追加(nitro.prerender の別名)(#32356)
何ができるようになったか
nuxt.configにトップレベルのprerenderオプションが追加された。nitro.prerenderの別名で、トップレベルのruntimeConfigやrouteRulesと同じ位置づけ。
- 使い方:
nuxt.configでprerender: { ... }と書く(nitro.prerenderの代わり)- 今後: Nuxt 独自のプリレンダリング用オプションを追加する場所にもなる予定
- #15440 を解決
⏳ 未リリース · トピック: 設定・スキーマ
クライアント側ナビゲーションで一致しない public ファイルへのリンクをハードリロードで表示(#36169)
何ができるようになったか
public/のファイルへのリンクにexternal属性を付け忘れても(nuxt/content の Markdown 内など、付けるのが難しい場合も含む)、Vue Router が知らないパスであればクライアント側の 404 ではなくハードリロードに切り替えて、そのファイルを表示するようになった。
- 設定:
experimentalにオプションが追加され、デフォルトで有効(ドキュメントの experimental features に記載)- 判定方法: 当初検討したブルームフィルターは見送り、一致しないパスでは常にハードリロードする方式を採用
- 嬉しい場面: Markdown などから public ファイルへ直接リンクしているとき
⏳ 未リリース · トピック: ルーティング・レイアウト
createUseFetch・createUseAsyncData にアドオン機能を追加(#35797)
何ができるようになったか
createUseFetch/createUseAsyncDataのファクトリーにaddonsオプションが追加され、useFetch・useAsyncDataの機能をユーザー側で拡張できるようになった。
- できること: 呼び出し側のオプションを独自に追加する、マージ後のオプションを書き換える、
middlewareでハンドラーを包む、戻り値にプロパティを追加・上書きする、watcher などで処理を足す- 定義方法:
defineUseFetchAddon({ setup })のsetupが内部のuseAsyncData呼び出しの前に実行され、返した関数が呼び出し後にasyncDataを受け取る(型はUseFetchAddonOptions<...>)- 再利用: 1 つのアドオンを複数のカスタムインスタンスで使い回せる
- 嬉しい場面: フォーカス時の再取得(
refreshOnFocus)のような、コアに入れるほどではない独自機能を足したいとき。多数の機能要望 issue(#15181、#26018 など)を解決するもの
⏳ 未リリース · トピック: データ取得
変更・修正
開発用のエラーチャンネルを本番ビルドから除外(#36407)
Before
4.x ブランチでは、開発用のエラーチャンネルが本番ビルドに入り込む問題があった(nuxt/ecosystem-ci で発見。main では発生していなかった)。
After
開発用のエラーチャンネルを本番ビルドに含めないようにし、ブランチ間の実装をそろえた。
⏳ 未リリース · トピック: 開発時エラー表示
アプリのルートルールを base からの相対パスで照合するよう修正(#36408)
Before
アプリ側のルートルールの照合が、base URL からの相対パスで行われていなかった(main のみで発生し、4.x では再現しない)。
After
ルートルールを base からの相対パスに対して照合するようにした。
⏳ 未リリース · トピック: ルーティング・レイアウト
ペイロードの URL をオリジン相対パスとして解釈するよう修正(#36409)
Before
//x/_payload.jsonのようなパスに対して誤ったペイロードを返していた。通常は利用者に影響しないが、設定の誤った CDN レイヤーがあるとページが壊れることがあった。
After
ペイロードの URL をオリジン相対パスとして解釈するようにした(レンダラーに URL 解析用の
url.tsを追加)。
⏳ 未リリース · トピック: サーバーレンダリング
Nuxt のセッションが発行していない封印値(sealed value)を拒否(#36413)
Before
新しい
nuxt/serverのセッションユーティリティは、Nuxt のセッションが発行したものではない封印値も受け付けうる状態だった。
After
Nuxt のセッションが発行していない封印値を拒否するようにした。今後の iron-webcrypto 2.1 リリースに備えたもので、ユーザーがセッションを失うのを防ぐ目的。ドキュメント(server imports)にも追記された。
⏳ 未リリース · トピック: サーバーセッション
レイアウト切り替え時に古いページの head エントリが残る不具合を修正(#36395)
Before
レイアウトが切り替わるナビゲーションで遷移先ページの suspense が pending になると、
NuxtLayoutのonBeforeLeaveがNuxtPageの作ったnuxtApp['~transitionPromise']を新しい promise で置き換えていた。最初の promise が解決されないため、離脱したページの head エントリが削除されず、古い title・meta が残り、エントリがナビゲーションごとに増えていた(#36394)。
After
onBeforeLeaveが pending 中の promise を再利用(||=)するようにした。onAfterLeaveがその promise を解決するので head エントリが正しく破棄される。スクロールのタイミングは変わらない。
⏳ 未リリース · トピック: ルーティング・レイアウト
シンボリックリンク経由のレイヤーディレクトリを実パスに解決(#36402)
Before
Vite はマニフェストのキーを作るときにシンボリックリンクを解決するため、シンボリックリンク経由で参照したレイヤー内のページがマニフェストと一致せず、すべてのルートでプリフェッチされていた(#36401)。
After
レイヤーディレクトリを
realpathで実パスに解決するようにした(packages/kit/src/loader/config.ts)。解決できないパスは元のまま扱う。
回避策
修正のリリース前は
vite: { resolve: { preserveSymlinks: true } }で回避できる、と PR に記載されている。
⏳ 未リリース · トピック: モジュール解決・ビルド
Nitro の初期化前に updateRuntimeConfig を呼んでも警告しないよう修正(#36403)
Before
4.5 以降、モジュールの
setup()からupdateRuntimeConfig()を呼ぶと、nuxt dev・nuxt buildのたびに[NUXT_B8003] Nitro is not initialized yet: useNitro() was called before the ready hook ran.という警告が出ていた。設定自体は反映されていた(#36396)。
After
内部で
useNitro()の代わりにtryUseNitro()?.updateConfig()を使うようにし、警告が出なくなった。Nitro に基づかないserver.builderの場合にも対応する。
⏳ 未リリース · トピック: 設定・スキーマ
hydrate されないデータの除去時にオプションを書き換えないよう修正(#36035)
Before
hydrate-never境界の中で呼ばれたときに付けるserialize: falseが、共有されたオプションオブジェクトに影響する可能性があった。
After
serialize: falseをローカルなスコープに留め、共有オプションを書き換えないようにした(asyncData.ts)。
⏳ 未リリース · トピック: データ取得
pages/ を使わないルーターで base URL の考慮とミドルウェアフラグのクリアを修正(#36034)
Before
pages/を使わない場合のルーター(plugins/router.ts)で、base URL が考慮されない、ミドルウェアのフラグがクリアされない、といった未検出の不具合があった。
After
base URL を尊重し、ミドルウェアのフラグをクリアするようにした。
⏳ 未リリース · トピック: ルーティング・レイアウト
node_modules にインストールしたレイヤーの依存関係を事前バンドル(#36208)
Before
レイヤーの依存関係の最適化に、実行されていないデッドコードが含まれていた。ユーザーのディレクトリにインストールされていない
optimizeDepsは pnpm で解決できなかった(#36135)。
After
レイヤーのエントリを明示的にスキャンして、設定なしで事前バンドルされるようにした(計測では、レイヤー内 300 ファイルあたり約 200ms のコスト)。ユーザーのディレクトリに無い
optimizeDepsも pnpm で解決できるようにした。
⏳ 未リリース · トピック: モジュール解決・ビルド
トップレベルと重複する nitro.* オプションを非推奨に(#36416)
Before
nitro.*のオプションのうち、Nuxt がトップレベルにも同じオプションを用意しているものについて、どちらを使うべきかの案内が無かった。
After
トップレベルに同じオプションがある
nitro.*を非推奨とし、ビルダーに依存しないトップレベルのオプションを使うよう利用者・モジュール作者に案内するようにした。
移行が必要
トップレベルに同等のオプションがある場合(
prerenderなど)は、nitro.*ではなくトップレベルのオプションに書き換える。
⏳ 未リリース · トピック: 設定・スキーマ
@nuxt/kit の peer dependency の範囲を実際に必要なバージョンまで広げた(#36417)
Before
peer dependency が各パッケージの最新バージョンを追う指定になっていた。
After
実際に必要なバージョンまで範囲を広げた(例:
c12は任意のバージョンのdotenvを受け付ける)。
⏳ 未リリース · トピック: モジュール解決・ビルド
error を持たないブラウザの通知で開発時エラーオーバーレイを開かないよう修正(#36415)
Before
ResizeObserver のループ制限のようなブラウザの通知は
event.error === nullの ErrorEvent を出すが、これで全画面のエラーオーバーレイが開いていた(#36405)。
After
dev-error-overlay.client.tsに null チェックを追加し、error を持たない通知ではオーバーレイを開かないようにした。
⏳ 未リリース · トピック: 開発時エラー表示
コンポーネントの名前変更後に import を更新するよう修正(#36165)
Before
開発中にコンポーネントの名前を変えると、モジュールに削除済みファイルへの import が残っていた(#31569)。
After
ローダーが変換したモジュールの ID を Set で保持し、コンポーネントの追加・削除時にレジストリを更新してから、それらのモジュールを変換し直すようにした。より複雑だった #34628 の代わりとなる実装。
⏳ 未リリース · トピック: モジュール解決・ビルド
ビルドディレクトリを移した場合でも型を保持するよう修正(#36418)
Before
別の場所に移したビルドディレクトリへビルドすると、型が失われていた(#36406)。
After
移したビルドディレクトリでも型が保持されるようにした(
kitのtemplate.ts、nuxtのcore/schema.tsを修正)。
⏳ 未リリース · トピック: モジュール解決・ビルド
その他
- docs: adjust spacing(#36262)⏳ 未リリース