01. 基本的な use cache
「use cache」ディレクティブの3つのレベル(ファイル、コンポーネント、関数)を理解しましょう。
ファイルレベルキャッシュ
ファイルの先頭に 'use cache' を配置すると、ファイル全体がキャッシュされます
ファイルレベルの例
"use cache";
// このファイル全体がキャッシュされます
async function getData() {
return {
timestamp: new Date().toISOString(),
value: Math.random(),
};
}
export default async function Page() {
const data = await getData();
return <div>{data.timestamp}</div>;
}実行結果
HIT12:10:47
- タイムスタンプ:
- 2025-11-20T12:10:47.123Z
- ランダム値:
- 0.022252
💡 ページをリロードしても、同じタイムスタンプとランダム値が表示されます。 これはページ全体がキャッシュされているためです。
⚠️ 重要な動作
- • ビルド時に一度だけ実行されます
- • 同じ入力に対して同じ出力を返します
- • cacheLife()で再検証タイミングを制御できます
- • デフォルトでは無期限にキャッシュされます
コンポーネントレベルキャッシュ
特定のコンポーネントだけをキャッシュしたい場合に使用します
コンポーネントレベルの例
// コンポーネントレベルのキャッシュ
async function CachedComponent() {
"use cache";
const data = await fetchData();
return <div>{data.value}</div>;
}
export default function Page() {
return (
<div>
<CachedComponent /> {/* このコンポーネントだけキャッシュ */}
</div>
);
}使用ケース
- • 部分的なキャッシング: ページの一部だけキャッシュしたい
- • 再利用可能なコンポーネント: 複数のページで共通して使うコンポーネント
- • 条件付きレンダリング: 表示される場合のみキャッシュ
関数レベルキャッシュ
データ取得関数の結果をキャッシュする最も細かい制御
関数レベルの例
// 関数レベルのキャッシュ
async function getCachedData() {
"use cache";
return await fetchExpensiveData();
}
export default async function Page() {
const data = await getCachedData(); // この関数の結果がキャッシュ
return <div>{data}</div>;
}使用ケース
- • API呼び出し: 外部APIのレスポンスをキャッシュ
- • 重い計算: 計算結果を再利用
- • データベースクエリ: 同じクエリ結果をキャッシュ
✅ ベストプラクティス
- • 関数レベルは最も細かい制御ができるため、推奨されます
- • 関数の引数がキャッシュキーとして使われます
- • 複数の場所から同じ関数を呼んでもキャッシュを共有します
次のステップ
基本的な「use cache」の使い方を理解したら、次は「cacheLife()」でキャッシュの有効期限を制御する方法を学びましょう。
02. cacheLife() プロファイル →