Next.js App Routerのデータ取得とキャッシュ戦略

← ホームに戻る

App Router では、デフォルトが静的化(キャッシュ)であること、fetch による キャッシュと ISR の制御、dynamic / revalidate / noStore の 組み合わせが要点です。落とし穴と設計パターンをまとめます。

基本の制御フラグ

// ルート単位の既定 export const revalidate = 3600 // 1時間ごとに再生成(ISR) // export const dynamic = 'force-dynamic' // 完全動的にしたい場合 // 関数内でキャッシュ回避 import { noStore } from 'next/cache' export async function getData() { noStore() const res = await fetch('https://api.example.com', { cache: 'no-store' }) return res.json() }

fetch のキャッシュ戦略

// リクエスト単位の ISR 指定 const res = await fetch('https://api.example.com/posts', { next: { revalidate: 600 }, // 10分 }) const posts = await res.json()

タグ/パスの再検証

ミューテーション後に対象だけを再生成するなら、タグやパスでの再検証が有効です。

import { revalidatePath, revalidateTag } from 'next/cache' // タグ付けして取得 await fetch('https://api.example.com/posts', { next: { tags: ['posts'] } }) // 変更後に再検証 await revalidateTag('posts') // or ページ単位 await revalidatePath('/blog')

Edge と Node の使い分け

// ルート直下の設定 export const runtime = 'edge' // or 'nodejs'

落とし穴とチェックリスト

まとめ: 既定は静的、変わる所だけ ISR/再検証、 常時最新が必要な箇所のみ no-store
これが App Router の現実解です。

← トップへ戻る