該当するバージョンは nextjs@14です。
この例では 3600秒(1時間)サーバーサイドでキャッシュが有効になります。
page.tsx
/**
* Route Segment Config
*/
export const revalidate = 3600
export default async function Page() {
fetch('https://...')
unstable_cache を使ってキャッシュ関数を合成することで、キャッシュに対応できるようになります。
公式: https://nextjs.org/docs/app/api-reference/functions/unstable_cache
page.tsx
/**
* Route Segment Config
*/
export const revalidate = 3600
/**
* cached Function
*/
const getUserCached = unstable_cache(
(id:string) => { return getUser(id) } // データ取得関数をここに
[keyParts],
)
export default async function Page() {
const user = getUserCached('xxxxxxxx')
Route Segment Configは以下のデフォルト値を持ちます。
export const dynamic = 'auto'
export const dynamicParams = true
export const revalidate = false
export const fetchCache = 'auto'
export const runtime = 'nodejs'
export const preferredRegion = 'auto'
export const maxDuration = 5
| Option | Type | 説明 |
|---|---|---|
| dynamic | 'auto' | 'force-dynamic' | 'error' | 'force-static' | 'auto' |
| dynamicParams | boolean | true |
| revalidate | false | 0 | number | false |
| fetchCache | 'auto' | 'default-cache' | 'only-cache' | 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store' | 'auto' |
| runtime | 'nodejs' | 'edge' | 通常はnodejs。Cloudflareなどにデプロイする場合は edge |
| preferredRegion | 'auto' | 'global' | 'home' | string | string[] | 'auto' |
| maxDuration | number | サーバーの最大実行時間。これを超えるとエラーとなる。デプロイプラットフォームによって自動設定されます。 |
export const dynamic = 'force-static'を設定していると、仮にDynamic APIを使用していたとしても、それらは空の値として扱われ、ページは強制的に静的レンダリングされます。
Dynamic API の例
cookies()
headers()
searchParams
これらを使っているときにそのページは Dynamic になります。
ondemand ISR を有効にするには
以下を追加して ondemand ISR を有効にする
export async function generateStaticParams() {
return []; // 空の配列でも可
}
(ページが Dynamic なときにこれを指定するとエラーになります。)
または
export const dynamic = 'force-static';
検証方法
レスポンスヘッダに x-nextjs-cache があれば ISR です。
