openaijamodel: gpt-5-mini-2025-08-07
Next.jsでのComposable Caching('use cache' ディレクティブ)
Key Points
- コンパイラが依存を静的解析
- クロージャー依存を自動でキー化
- タグで部分無効化が可能
Summary
Next.js の 'use cache' は関数やコンポーネントをコンパイラがキャッシュ対象として扱うためのディレクティブです。コンパイラがクロージャー内の依存関係を静的解析してキャッシュキーに含めるため、手動でキーを管理する必要が減り、部分的(コンポーネント内の穴=children を除く)なキャッシュが可能になります。シリアライズ可能な引数はキー化され、非シリアライズ可能な値は参照(reference)として扱われ実行時に復元されます。cacheLife / cacheTag / revalidateTag によるライフサイクル管理とタグベースの無効化もサポートします。なお現状は実験的機能です。
Key Points
- 'use cache' を関数内に置くとコンパイラが専用のキャッシュ可能サーバー関数に変換する
- クロージャーの外部変数(親コンポーネントの props 等)も依存関係として静的に検出し、キャッシュキーに含める
- シリアライズ可能な引数はキーに含める。非シリアライズ可能な値は実行時参照に置き換えられ、キャッシュに含められない
- 子要素(children)は参照として扱われるため、ドーナツパターンのような部分キャッシュ(outer cached, inner dynamic)が安全にできる
- cacheLife() で生存時間を設定し、cacheTag()/revalidateTag() でタグ付け・個別無効化が可能
- ランタイムのみの cache() 関数はクロージャー依存の自動取り込みができないため、手動キー指定ミスによるコリジョンやステールのリスクがある
- 機能は experimental。導入前にドキュメントと互換性を確認すること
Practical notes
- 既存のデータ取得関数に 'use cache' を追加すると簡単にキャッシュ化できる
- 非シリアライズ可能な値をキーにしたい場合は明示的に設計し、参照復元の挙動を理解する
- タグ付けパターン(fetch → cacheTag)を使うと、CMSや編集フローからの部分的再検証が可能
詳細は公式ドキュメントを参照し、実験的である点を踏まえて段階的に導入してください。