ルートセグメント設定
このページで説明するオプションは、
dynamicIOフラグが有効な場合には無効化され、将来的に廃止される予定です。
ルートセグメントオプションを使用すると、以下の変数を直接エクスポートすることで、ページ、レイアウト、またはルートハンドラーの動作を設定できます:
| オプション | 型 | デフォルト値 |
|---|---|---|
experimental_ppr | boolean | |
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' |
preferredRegion | 'auto' | 'global' | 'home' | string | string[] | 'auto' |
maxDuration | number | デプロイプラットフォームにより設定 |
オプション
experimental_ppr
レイアウトまたはページに対して部分的な事前レンダリング (PPR) を有効にします。
export const experimental_ppr = true
// true | falseexport const experimental_ppr = true
// true | falsedynamic
レイアウトまたはページの動的動作を完全に静的または完全に動的に変更します。
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'豆知識:
appディレクトリの新しいモデルでは、pagesディレクトリでのページレベルのgetServerSidePropsやgetStaticPropsの全か無かのバイナリモデルよりも、fetchリクエストレベルでの細かいキャッシュ制御が優先されます。dynamicオプションは、利便性のために以前のモデルに戻る方法を提供し、より簡単な移行パスを提供します。
'auto'(デフォルト): コンポーネントが動的動作を選択するのを妨げずに、可能な限りキャッシュするデフォルトオプション。'force-dynamic': 動的レンダリングを強制し、リクエスト時に各ユーザーに対してルートがレンダリングされます。このオプションは以下と同等です:- レイアウトまたはページ内のすべての
fetch()リクエストのオプションを{ cache: 'no-store', next: { revalidate: 0 } }に設定。 - セグメント設定を
export const fetchCache = 'force-no-store'に設定。
- レイアウトまたはページ内のすべての
'error': 静的レンダリングを強制し、動的API またはキャッシュされていないデータを使用するコンポーネントがある場合にエラーを発生させることで、レイアウトまたはページのデータをキャッシュします。このオプションは以下と同等です:pagesディレクトリのgetStaticProps()。- レイアウトまたはページ内のすべての
fetch()リクエストのオプションを{ cache: 'force-cache' }に設定。 - セグメント設定を
fetchCache = 'only-cache', dynamicParams = falseに設定。 dynamic = 'error'はdynamicParamsのデフォルトをtrueからfalseに変更します。generateStaticParamsで生成されていない動的パラメータに対して動的にページをレンダリングするには、手動でdynamicParams = trueを設定できます。
'force-static': 静的レンダリングを強制し、cookies、headers()、useSearchParams()が空の値を返すようにすることで、レイアウトまたはページのデータをキャッシュします。force-staticでレンダリングされたページまたはレイアウトでrevalidate、revalidatePath、revalidateTagを使用することが可能です。
豆知識:
getServerSidePropsとgetStaticPropsからdynamic: 'force-dynamic'およびdynamic: 'error'への移行方法については、アップグレードガイドを参照してください。
dynamicParams
generateStaticParams で生成されていない動的セグメントにアクセスしたときの動作を制御します。
export const dynamicParams = true // true | false,export const dynamicParams = true // true | false,true(デフォルト):generateStaticParamsに含まれていない動的セグメントはオンデマンドで生成されます。false:generateStaticParamsに含まれていない動的セグメントは404を返します。
豆知識:
- このオプションは
pagesディレクトリのgetStaticPathsのfallback: true | false | blockingオプションを置き換えます。- 初回アクセス時にすべてのパスを静的にレンダリングするには、
generateStaticParamsで空の配列を返すか、export const dynamic = 'force-static'を使用する必要があります。dynamicParams = trueの場合、セグメントはストリーミングサーバーレンダリングを使用します。
revalidate
レイアウトまたはページのデフォルトの再検証時間を設定します。このオプションは個々の fetch リクエストで設定された revalidate 値を上書きしません。
export const revalidate = false
// false | 0 | numberexport const revalidate = false
// false | 0 | numberfalse(デフォルト):'force-cache'にcacheオプションを設定したfetchリクエスト、または動的API が使用される前に発見されたリクエストをキャッシュするデフォルトのヒューリスティック。意味的にはrevalidate: Infinityと同等で、リソースは実質的に無期限にキャッシュされます。個々のfetchリクエストでcache: 'no-store'またはrevalidate: 0を使用してキャッシュを回避し、ルートを動的にレンダリングすることも可能です。または、ルートのデフォルトよりも小さい正の数値をrevalidateに設定して、ルートの再検証頻度を上げることができます。0: 動的レンダリングを強制し、動的APIやキャッシュされていないデータフェッチが発見されない場合でも、レイアウトまたはページが常に動的にレンダリングされるようにします。このオプションは、cacheオプションを設定していないfetchリクエストのデフォルトを'no-store'に変更しますが、'force-cache'を選択したfetchリクエストや正のrevalidateを使用したリクエストはそのままにします。number: (秒単位) レイアウトまたはページのデフォルトの再検証頻度をn秒に設定します。
豆知識:
- revalidate値は静的に解析可能である必要があります。例えば
revalidate = 600は有効ですが、revalidate = 60 * 10は無効です。runtime = 'edge'を使用している場合、revalidate値は利用できません。- 開発環境では、ページは常にオンデマンドでレンダリングされ、キャッシュされません。これにより、再検証期間を待たずにすぐに変更を確認できます。
再検証頻度
- 単一ルートの各レイアウトとページ全体で最も低い
revalidate値が、ルート全体の再検証頻度を決定します。これにより、子ページが親レイアウトと同じ頻度で再検証されます。 - 個々の
fetchリクエストで、ルートのデフォルトのrevalidateよりも低い値を設定することで、ルート全体の再検証頻度を上げることができます。これにより、特定の条件に基づいて、特定のルートに対してより頻繁な再検証を動的に選択できます。
fetchCache
これはデフォルトの動作を上書きする必要がある場合にのみ使用する高度なオプションです。
デフォルトでは、Next.jsは動的APIが使用される前に到達可能なすべてのfetch()リクエストをキャッシュし、動的APIが使用された後に発見されたfetchリクエストはキャッシュしません。
fetchCacheを使用すると、レイアウトまたはページ内のすべてのfetchリクエストのデフォルトのcacheオプションを上書きできます。
export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store''auto'(デフォルト): 動的APIの前にfetchリクエストを提供されたcacheオプションでキャッシュし、動的APIの後はキャッシュしないデフォルトオプション。'default-cache':fetchに任意のcacheオプションを渡すことを許可しますが、オプションが提供されていない場合、cacheオプションを'force-cache'に設定します。これにより、動的APIの後でもfetchリクエストが静的と見なされます。'only-cache': デフォルトをcache: 'force-cache'に変更し、オプションが提供されていない場合、cache: 'no-store'を使用するfetchリクエストがあるとエラーを発生させることで、すべてのfetchリクエストがキャッシュに参加するようにします。'force-cache': すべてのfetchリクエストのcacheオプションを'force-cache'に設定することで、すべてのfetchリクエストがキャッシュに参加するようにします。'default-no-store':fetchに任意のcacheオプションを渡すことを許可しますが、オプションが提供されていない場合、cacheオプションを'no-store'に設定します。これにより、動的APIの前でもfetchリクエストが動的と見なされます。'only-no-store': デフォルトをcache: 'no-store'に変更し、オプションが提供されていない場合、cache: 'force-cache'を使用するfetchリクエストがあるとエラーを発生させることで、すべてのfetchリクエストがキャッシュに参加しないようにします。'force-no-store': すべてのfetchリクエストのcacheオプションを'no-store'に設定することで、すべてのfetchリクエストがキャッシュに参加しないようにします。これにより、'force-cache'オプションを提供した場合でも、すべてのfetchリクエストが毎回再フェッチされます。
クロスルートセグメントの動作
- 単一ルートの各レイアウトとページに設定されたオプションは互いに互換性がある必要があります。
'only-cache'と'force-cache'の両方が提供された場合、'force-cache'が優先されます。'only-no-store'と'force-no-store'の両方が提供された場合、'force-no-store'が優先されます。forceオプションはルート全体の動作を変更するため、'force-*'を持つ単一のセグメントがあれば、'only-*'によるエラーを防ぎます。'only-*'と'force-*'オプションの意図は、ルート全体が完全に静的または完全に動的であることを保証することです。つまり:- 単一ルートでの
'only-cache'と'only-no-store'の組み合わせは許可されません。 - 単一ルートでの
'force-cache'と'force-no-store'の組み合わせは許可されません。
- 単一ルートでの
- 親が
'default-no-store'を提供している場合、子が'auto'または'*-cache'を提供することはできません。これにより、同じフェッチが異なる動作をする可能性があるためです。
- 一般的には、共有親レイアウトを
'auto'のままにし、子セグメントが分岐する場所でオプションをカスタマイズすることをお勧めします。
runtime
アプリケーションのレンダリングにはNode.jsランタイム、ミドルウェアにはEdgeランタイムを使用することを推奨します。
export const runtime = 'nodejs'
// 'nodejs' | 'edge'export const runtime = 'nodejs'
// 'nodejs' | 'edge''nodejs'(デフォルト)'edge'
preferredRegion
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']preferredRegionのサポートとサポートされているリージョンは、デプロイメントプラットフォームに依存します。
豆知識:
preferredRegionが指定されていない場合、最も近い親レイアウトのオプションを継承します。- ルートレイアウトはデフォルトで
allリージョンに設定されます。
maxDuration
デフォルトでは、Next.jsはサーバーサイドロジック(ページのレンダリングやAPIの処理)の実行時間を制限しません。
デプロイメントプラットフォームは、Next.jsのビルド出力からmaxDurationを使用して特定の実行制限を追加できます。
注: この設定にはNext.js 13.4.10以降が必要です。
export const maxDuration = 5export const maxDuration = 5豆知識:
- サーバーアクションを使用する場合、ページレベルの
maxDurationを設定して、ページで使用されるすべてのサーバーアクションのデフォルトタイムアウトを変更できます。
generateStaticParams
generateStaticParams関数は動的ルートセグメントと組み合わせて使用でき、ビルド時に静的に生成されるルートセグメントパラメータのリストを定義します。リクエスト時にオンデマンドで生成されるのではなく、ビルド時に静的に生成されます。
詳細についてはAPIリファレンスを参照してください。
バージョン履歴
| バージョン | |
|---|---|
v15.0.0-RC | export const runtime = "experimental-edge" は非推奨となりました。コードモッドが利用可能です。 |