Next16 新機能 - Cache Components
2025-11-26
a month ago
開発環境
- next 16.0.3
- react 19.2.0
- react-dom 19.2.0
前提
Next.js 16 で導入された Cache Components はオプトインで有効化するキャッシュ機構です。サーバーコンポーネント単位で「コンポーネント出力のキャッシュ」を明示的に有効にでき、従来の Next.js の自動キャッシュによる「意図しない古いデータ利用」や制御困難さを軽減します。
本題
有効化(next.config.js)
next.config.jsでオプトインを有効にします。
import type { NextConfig } from 'next'
const nextConfig: NextConfig = {
cacheComponents: true,
}
export default nextConfig"use cache" ディレクティブの使い方(サンプル)
サーバーコンポーネントファイルの先頭に文字列ディレクティブ "use cache" を置くことで、そのファイル(コンポーネント)の出力が Next 側でキャッシュされます。
// app/components/Posts.tsx
"use cache";
export default async function Posts() {
const res = await fetch("https://api.example.com/posts", { next: { revalidate: 60 } });
const posts = await res.json();
return (
<ul>
{posts.map(p => (
<li key={p.id}>{p.title}</li>
))}
</ul>
);
}- "use cache" を付けたコンポーネントはサーバーで生成された HTML の結果をキャッシュ対象にできます。
- fetch() の next オプション(revalidate など)やタグ再検証 API(revalidateTag / updateTag)と組み合わせて、再検証戦略をより細かく制御できます。
キャッシュの粒度と挙動
- コンポーネント単位でオプトイン
👉 キャッシュを有効化したいコンポーネントにだけ "use cache" を付ける。全体の挙動を変えずに、影響範囲を限定できる。
- 入力依存のキャッシュ
👉 コンポーネントに props を渡す場合、同一の入力(props)に対して同じキャッシュが使われる設計。必要ならキー設計やタグで制御する。
なぜオプトインが良いのか(利点)
- 従来の自動キャッシュは「いつ・どの結果がキャッシュされるか」が分かりづらく、期待しない古いデータが出ることがありました。
- オプトインにより、キャッシュを使う場所を明示的に制御でき、キャッシュ失効・再検証の戦略を局所的に設計でき、結果として運用やデバッグが容易になります。
さいごに
Next.js 16 の Cache Componentsは、従来 Next が行ってきた自動的なキャッシュ挙動に悩まされていたケースを解消するための改善です。オプトインである点を活かし、影響範囲を限定して安全にキャッシュを導入することができます。実装の際は revalidate やタグ再検証 API と合わせ、必要な一貫性と鮮度を担保する設計が重要です。