TL;DR
- Next.js 16 の目玉は Cache Components で、キャッシュがオプトインになり、動的なコードはデフォルトでリクエストごとに実行されるようになった。
- ほかに、Turbopack のデフォルト化、React 19.2 の機能のサポート、
middleware.tsからproxy.tsへのリネーム、React Compiler のサポートなどがある。
内容
Turbopack がデフォルトになった
バンドラが Turbopack になった。Webpack を選ぶこともできる。また、Next.js DevTools MCP が導入された。
Cache Components
Cache Components は実験的な機能だった PPR(Partial Prerendering)に代わる機能である。v15 以前のキャッシュと違い、キャッシュはオプトインになり、動的なコードはデフォルトでリクエストごとに実行されるようになった。キャッシュの種類は、静的、動的、ユーザー固有の 3 つである。動的なデータには Suspense が必須になった。
export default function Page() {
return (
<>
{/* 静的部分 */}
<NavBar />
{/* 動的部分 */}
<Suspense fallback={<div>Loading...</div>}>
<SearchResults />
</Suspense>
</>
)
}有効にするには、next.config.ts に次のように書く。
const nextConfig = {
cacheComponents: true,
}
export default nextConfig3 種類のディレクティブ
use cache はビルド時にキャッシュされる。全ユーザーで共有するデータに使う。
use cache: remote はリクエスト時にキャッシュされる。全ユーザーで共有できるデータに使う。use cache が使えない connection、cookies、headers などを呼び出した後でもキャッシュできる。
use cache: private はリクエスト時にキャッシュされる。ユーザーごとに異なるデータに使う。cookies、headers、searchParams などにアクセスでき、ランタイムプリフェッチに対応している。
キャッシュに関する API
新しく次の API が追加された。
cacheTag: キャッシュしたデータにタグを付けるupdateTag: 引数で受け取ったタグに紐づくキャッシュを、同じリクエストの中で更新する。Server Actions でのみ使えるrefresh: Server Actions の中からクライアントをリフレッシュするcacheLife: キャッシュの有効期限を設定する。secondsやminutesなどの定義済みのプロファイルを指定するか、独自に値を指定する
cacheLife("minutes")
cacheLife({
stale: 3600, // クライアントサイドでサーバに確認せずにキャッシュを利用する期間
revalidate: 900, // サーバサイドでキャッシュを更新する頻度
expire: 86400, // キャッシュの最大有効期間
})また、引数で受け取ったタグに紐づくキャッシュを無効にする revalidateTag は、第 2 引数に cacheLife と同じプロファイルを渡せるようになった。
React 19.2 の機能のサポート
React 19.2 で追加された次の機能に対応した。
useEffectEvent: 副作用から、リアクティブでないロジックを Effect Event と呼ばれる再利用可能な関数に切り出す<ViewTransition>: クライアントでのナビゲーション時にアニメーションを付けられる<Activity>: クライアントでのナビゲーション時にステートを保持できる
middleware.ts から proxy.ts へのリネーム
ネットワークの境界をはっきりさせ、Node.js ランタイムで動くことを明示するために、middleware.ts は proxy.ts に名前が変わった。
React Compiler のサポート
React Compiler はビルド時にコードを解析して useMemo や useCallback を自動で挿入する。有効にするには、next.config.ts に次のように書く。
const nextConfig = {
reactCompiler: true,
}
export default nextConfig非同期リクエスト API への完全な移行
cookies、headers、draftMode、layout.js などの params、page.js の searchParams が、完全に非同期の API になった。
キーワード
- Next.js
- Cache Components
- Turbopack
- React Compiler
- Suspense
- Server Actions
- Next.js の 4 種類のキャッシュ
- React
自分の理解
今回の目玉は Cache Components だと思う。v13 から v15 まではキャッシュのデフォルトの挙動が変わるたびに追いかけるのが辛かったので、オプトインになって認知的負荷がだいぶ下がった印象である。ただし、これまでの知識のアンラーンは必要になる。それでも、Nuxt や SvelteKit と比べると、キャッチアップのコストはまだとても高い。