ルートセグメントの設定
ルートセグメントのオプションを使用すると、以下の変数をエクスポートすることで、ページ、レイアウト、またはルートハンドラーの動作を設定できます。
オプション | 型 | デフォルト |
---|---|---|
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 | false
dynamic
レイアウトまたはページの動的動作を完全に静的または完全に動的に変更します。
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
重要なポイント:
app
ディレクトリの新しいモデルは、pages
ディレクトリのページレベルでのgetServerSideProps
とgetStaticProps
のバイナリ的なオールオアナッシングモデルよりも、fetch
リクエストレベルでのきめ細かいキャッシュ制御を優先します。dynamic
オプションは、以前のモデルを便宜上再び利用するための方法であり、より簡単な移行パスを提供します。
-
'auto'
(デフォルト):可能な限り多くのデータをキャッシュし、動的な動作を選択するコンポーネントを妨げないデフォルトのオプションです。 -
'force-dynamic'
: 動的レンダリングを強制します。これにより、リクエスト時に各ユーザーに対してルートがレンダリングされます。このオプションは、pages
ディレクトリのgetServerSideProps()
と同等です。- レイアウトまたはページ内のすべての
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()
が空の値を返すように強制することで、レイアウトまたはページのデータをキャッシュします。
重要なポイント:
getServerSideProps
とgetStaticProps
からdynamic: 'force-dynamic'
とdynamic: 'error'
に移行する方法については、アップグレードガイドを参照してください。
dynamicParams
generateStaticParamsで生成されなかった動的セグメントにアクセスした際の動作を制御します。
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
の場合、セグメントはストリーミングサーバーレンダリングを使用します。dynamic = 'error'
とdynamic = 'force-static'
が使用されている場合、dynamicParams
のデフォルトはfalse
に変更されます。
revalidate
レイアウトまたはページのデフォルトの再検証時間を設定します。このオプションは、個々のfetch
リクエストで設定されたrevalidate
値を上書きしません。
export const revalidate = false
// false | 0 | number
false
(デフォルト):cache
オプションを'force-cache'
に設定した、または動的APIが使用される前に検出されたすべてのfetch
リクエストをキャッシュするためのデフォルトのヒューリスティック。意味的にはrevalidate: Infinity
と同等であり、リソースは事実上無期限にキャッシュされることを意味します。個々のfetch
リクエストでは、cache: 'no-store'
またはrevalidate: 0
を使用してキャッシュを回避し、ルートを動的にレンダリングすることができます。または、revalidate
をルートのデフォルトよりも小さい正の数値に設定して、ルートの再検証頻度を高めることができます。0
:動的APIまたは未キャッシュのデータフェッチが検出されなくても、レイアウトまたはページが常に動的にレンダリングされるようにします。このオプションは、cache
オプションを設定していないfetch
リクエストのデフォルトを'no-store'
に変更しますが、'force-cache'
を選択するか、正のrevalidate
を使用するfetch
リクエストはそのままにします。number
:(秒単位)レイアウトまたはページのデフォルトの再検証頻度をn
秒に設定します。
重要なポイント:
revalidate
値は、静的に解析可能である必要があります。たとえば、revalidate = 600
は有効ですが、revalidate = 60 * 10
は無効です。runtime = 'edge'
を使用している場合、revalidate
値は使用できません。- 開発中は、ページは常にオンデマンドでレンダリングされ、キャッシュされません。これにより、再検証期間を待つことなく、すぐに変更を確認できます。
再検証頻度
- 単一ルートの各レイアウトとページの最小
revalidate
値が、ルート全体の再検証頻度を決定します。これにより、子ページが親レイアウトと同じ頻度で再検証されます。 - 個々の
fetch
リクエストは、ルートのデフォルトのrevalidate
よりも低い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'
'auto'
(デフォルト):動的APIの前は提供された`cache`オプションで、動的APIの後にはキャッシュしないという、`fetch`リクエストをキャッシュするデフォルトのオプションです。'default-cache'
:任意のcache
オプションをfetch
に渡すことができますが、オプションが提供されない場合は、cache
オプションを'force-cache'
に設定します。つまり、動的APIの後でもfetch
リクエストは静的と見なされます。'only-cache'
:オプションが提供されない場合はデフォルトをcache: 'force-cache'
に変更し、fetch
リクエストがcache: 'no-store'
を使用している場合はエラーを引き起こすことで、すべてのfetch
リクエストがキャッシングを選択するようにします。'force-cache'
:すべてのfetch
リクエストのcache
オプションを'force-cache'
に設定することで、すべてのfetch
リクエストがキャッシングを選択するようにします。'default-no-store'
:任意のcache
オプションをfetch
に渡すことができますが、オプションが提供されない場合は、cache
オプションを'no-store'
に設定します。つまり、動的APIの前でもfetch
リクエストは動的と見なされます。'only-no-store'
:オプションが提供されない場合はデフォルトをcache: 'no-store'
に変更し、fetch
リクエストが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'
を組み合わせることはできません。
- 単一ルートで
- 子要素が
'auto'
または'*-cache'
を提供する場合、親要素は'default-no-store'
を提供できません。これは、同じフェッチで異なる動作が発生する可能性があるためです。
- 共有親レイアウトは
'auto'
のままにして、子セグメントが異なる場所でオプションをカスタマイズすることをお勧めします。
runtime
アプリケーションのレンダリングにはNode.jsランタイムを、ミドルウェアにはEdgeランタイムを使用することをお勧めします(サポートされている唯一のオプションです)。
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
'nodejs'
(デフォルト)'edge'
異なるランタイムの詳細については、こちらをご覧ください。
preferredRegion
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
preferredRegion
とサポートされているリージョンは、デプロイメントプラットフォームによって異なります。
重要なポイント:
preferredRegion
が指定されていない場合、最も近い親レイアウトのオプションを継承します。- ルートレイアウトはデフォルトですべてのリージョンになります。
maxDuration
デフォルトでは、Next.jsはサーバーサイドロジックの実行(ページのレンダリングまたはAPIの処理)を制限しません。デプロイメントプラットフォームは、Next.jsビルド出力からmaxDuration
を使用して、特定の実行制限を追加できます。たとえば、Vercelなど。
注記:この設定には、Next.js 13.4.10
以降が必要です。
export const maxDuration = 5
重要なポイント:
- サーバーアクションを使用する場合は、ページレベルで
maxDuration
を設定して、ページで使用されるすべてのサーバーアクションのデフォルトのタイムアウトを変更します。
generateStaticParams
generateStaticParams
関数は、動的ルートセグメントと組み合わせて使用して、リクエスト時にオンデマンドで生成するのではなく、ビルド時に静的に生成されるルートセグメントパラメータのリストを定義できます。
詳細については、APIリファレンスを参照してください。
バージョン履歴
バージョン | |
---|---|
v15.0.0-RC | export const runtime = "experimental-edge" は非推奨になりました。codemodが利用可能です。 |
役に立ちましたか?