Next.js 15
Next.js 15 がリリースされた。
https://nextjs.org/blog/next-15
マイグレーションガイドに加えて、codemod も公開されている。
https://nextjs.org/docs/app/building-your-application/upgrading/version-15
デフォルトキャッシュの無効化または変更
破壊的な変更として、fetch や GET ルートハンドラー、クライアントルーターのデフォルトのキャッシュ戦略に次のような変更が加えられた。
- Fetch のキャッシュオプションを
no-storeに変更- キャッシュを有効化したい場合は、fetch のキャッシュオプションに
force-cacheを指定するなどの対応が必要 - 余談:今までデフォルトが
force-cacheであるという説明が稀に見られたが、Dynamic functions 以降はno-storeになるなど最適だと思われるオプションが自動的に選択されていたため不正確
- キャッシュを有効化したい場合は、fetch のキャッシュオプションに
- GET ルートハンドラーのデフォルトキャッシュを無効化
- キャッシュを有効化したい場合は、GET ルートハンドラを定義したファイルで
export dynamic = 'force-static'を指定するなどの対応が必要
- キャッシュを有効化したい場合は、GET ルートハンドラを定義したファイルで
- クライアントルーターがデフォルトでページコンポーネントをキャッシュしないように変更
- ただし、一部の動作は変更されない
- Partial Rendering を引き続きサポートするため、共有レイアウトデータはサーバーから refetch されない
- ブラウザがスクロール位置を復元できるように、Back/forward navigation ではキャッシュが有効
- 余談:このキャッシュへの理解が不十分であり、例えば商品データを追加したのに一覧に反映されないバグが稀に見られた。
revalidatePathなどによる明示的な再検証が必要
- ただし、一部の動作は変更されない
Async Request APIs
cookiesやheaders、params、searchParamsなどの API が非同期関数に変更された。
Form Component
HTML のform要素の拡張であり、送信時に共有レイアウトとクライアントの状態を保持するクライアントナビゲーションなどをサポートしており、パフォーマンスや UX の向上が期待できる。
https://nextjs.org/blog/next-15#form-component
tsx
import Form from "next/form";
export default function Page() {
return (
<Form action="/search">
<input name="query" />
<button type="submit">Submit</button>
</Form>
);
}その他
その他のいくつかの変更点。
- React 19 のサポート
- 利用していない Server Action が公開されないように変更
- instrumentation.js が Stable に昇格