ルートセグメント設定
ルートセグメントオプションを使用すると、以下の変数を直接エクスポートすることで、ページ、レイアウト、またはルートハンドラの動作を設定できます:
オプション | 型 | デフォルト値 |
---|---|---|
dynamic | 'auto' | 'force-dynamic' | 'error' | 'force-static' | 'auto' |
dynamicParams | boolean | true |
revalidate | false | 'force-cache' | 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 | デプロイプラットフォーム依存 |
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
export default function MyComponent() {}
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
export default function MyComponent() {}
知っておくと便利:
- 設定オプションの値は現在、静的に解析可能である必要があります。例えば
revalidate = 600
は有効ですが、revalidate = 60 * 10
は無効です。
オプション
dynamic
レイアウトまたはページの動的動作を完全に静的または完全に動的に変更します。
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
リクエストのすべてのキャッシュを無効にし、常に再検証することで、レイアウトまたはページの動的レンダリングとキャッシュされていないデータ取得を強制します。このオプションは以下と同等です:pages
ディレクトリのgetServerSideProps()
- レイアウトまたはページ内のすべての
fetch()
リクエストのオプションを{ cache: 'no-store', next: { revalidate: 0 } }
に設定 - セグメント設定を
export const fetchCache = 'force-no-store'
に設定
'error'
: 動的関数またはキャッシュされていないデータを使用するコンポーネントがある場合にエラーを発生させ、レイアウトまたはページの静的レンダリングとデータのキャッシュを強制します。このオプションは以下と同等です:pages
ディレクトリのgetStaticProps()
- レイアウトまたはページ内のすべての
fetch()
リクエストのオプションを{ cache: 'force-cache' }
に設定 - セグメント設定を
fetchCache = 'only-cache', dynamicParams = false
に設定 dynamic = 'error'
はdynamicParams
のデフォルトをtrue
からfalse
に変更します。generateStaticParams
で生成されていない動的パラメータに対して動的レンダリングを行うには、手動でdynamicParams = true
を設定できます。
'force-static'
:cookies()
、headers()
、useSearchParams()
が空の値を返すように強制することで、レイアウトまたはページの静的レンダリングとデータのキャッシュを強制します。
知っておくと便利:
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
オプションを置き換えます。dynamicParams = true
の場合、セグメントはストリーミングサーバーレンダリングを使用します。dynamic = 'error'
とdynamic = 'force-static'
を使用すると、dynamicParams
のデフォルトがfalse
に変更されます。
revalidate
レイアウトまたはページのデフォルトの再検証時間を設定します。このオプションは個々の fetch
リクエストによって設定された revalidate
値を上書きしません。
export const revalidate = false
// false | 'force-cache' | 0 | number
export const revalidate = false
// false | 'force-cache' | 0 | number
false
: (デフォルト)'force-cache'
にcache
オプションを設定したfetch
リクエスト、または動的関数が使用される前に発見されたリクエストをキャッシュするデフォルトのヒューリスティック。意味的にはrevalidate: Infinity
と同等で、リソースは事実上無期限にキャッシュされます。個々のfetch
リクエストでcache: 'no-store'
またはrevalidate: 0
を使用してキャッシュを回避し、ルートを動的にレンダリングすることも可能です。または、ルートのデフォルトよりも小さい正の数をrevalidate
に設定して、ルートの再検証頻度を高めることもできます。0
: 動的関数やキャッシュされていないデータ取得が発見されない場合でも、レイアウトまたはページが常に動的にレンダリングされるようにします。このオプションは、cache
オプションを設定していないfetch
リクエストのデフォルトを'no-store'
に変更しますが、'force-cache'
を選択したfetch
リクエストや正のrevalidate
を使用したリクエストはそのままにします。number
: (秒単位) レイアウトまたはページのデフォルトの再検証頻度をn
秒に設定します。
知っておくと便利:
revalidate
オプションはNode.jsランタイムを使用している場合にのみ利用可能です。つまり、runtime = 'edge'
でrevalidate
オプションを使用しても機能しません。
再検証頻度
- 単一ルートの各レイアウトとページ全体で最も低い
revalidate
が、ルート全体の再検証頻度を決定します。これにより、子ページは親レイアウトと同じ頻度で再検証されます。 - 個々の
fetch
リクエストは、ルートのデフォルトのrevalidate
よりも低い値を設定して、ルート全体の再検証頻度を高めることができます。これにより、特定の条件に基づいて特定のルートに対してより頻繁な再検証を動的に選択できます。
fetchCache
これはデフォルトの動作を上書きする必要がある場合にのみ使用する高度なオプションです。
デフォルトでは、Next.jsは動的関数が使用される前に到達可能なすべての fetch()
リクエストをキャッシュし、動的関数が使用された後に発見された 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'
(デフォルト)- 動的関数の前にfetch
リクエストを提供されたcache
オプションでキャッシュし、動的関数の後のfetch
リクエストはキャッシュしないデフォルトオプション。'default-cache'
:fetch
に任意のcache
オプションを渡すことができますが、オプションが提供されない場合、cache
オプションを'force-cache'
に設定します。つまり、動的関数の後のfetch
リクエストも静的と見なされます。'only-cache'
: すべてのfetch
リクエストがキャッシュを選択するように、オプションが提供されない場合のデフォルトをcache: 'force-cache'
に変更し、cache: 'no-store'
を使用するfetch
リクエストがある場合はエラーを発生させます。'force-cache'
: すべてのfetch
リクエストのcache
オプションを'force-cache'
に設定することで、すべてのfetch
リクエストがキャッシュを選択するようにします。'default-no-store'
:fetch
に任意のcache
オプションを渡すことができますが、オプションが提供されない場合、cache
オプションを'no-store'
に設定します。つまり、動的関数の前のfetch
リクエストも動的と見なされます。'only-no-store'
: すべてのfetch
リクエストがキャッシュを選択しないように、オプションが提供されない場合のデフォルトをcache: 'no-store'
に変更し、cache: 'force-cache'
を使用する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'
を提供することはできません。これにより、同じfetchが異なる動作をする可能性があるためです。
- 一般的には、共有親レイアウトを
'auto'
のままにし、子セグメントが分岐する場所でオプションをカスタマイズすることをお勧めします。
runtime
export const runtime = 'nodejs'
// 'edge' | 'nodejs'
export const runtime = 'nodejs'
// 'edge' | 'nodejs'
nodejs
(デフォルト)edge
EdgeおよびNode.jsランタイムについて詳しく学びます。
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 13.4.10
以降が必要です。
export const maxDuration = 5
export const maxDuration = 5
知っておくと便利:
maxDuration
が指定されていない場合、デフォルト値はデプロイメントプラットフォームとプランに依存します。
generateStaticParams
generateStaticParams
関数は動的ルートセグメントと組み合わせて使用でき、ビルド時にオンデマンドではなく静的に生成されるルートセグメントパラメータのリストを定義します。
詳細についてはAPIリファレンスを参照してください。