ルートセグメント設定
このページで概説されているオプションは、
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)を有効にします。
dynamic
レイアウトまたはページの動的な動作を完全に静的または完全に動的に変更します。
補足:
app
ディレクトリの新しいモデルは、pages
ディレクトリのページレベルのgetServerSideProps
とgetStaticProps
のバイナリな all-or-nothing モデルよりも、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
に変更します。dynamicParams = true
を手動で設定することで、generateStaticParams
で生成されていない動的パラメータのページを動的にレンダリングできます。
-
'force-static'
:静的レンダリングを強制し、cookies
、headers()
、useSearchParams()
を空の値に設定することで、レイアウトまたはページのデータをキャッシュします。
補足:
getServerSideProps
とgetStaticProps
からdynamic: 'force-dynamic'
とdynamic: 'error'
への移行方法については、アップグレードガイドを参照してください。
dynamicParams
generateStaticParamsで生成されていない動的セグメントにアクセスした場合の挙動を制御します。
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
値を上書きしません。
false
(デフォルト):'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
オプションを上書きできます。
'auto'
(デフォルト): 動的APIの前にfetch
リクエストを提供されたcache
オプションでキャッシュし、動的API後のfetch
リクエストはキャッシュしないデフォルトオプション。'default-cache'
:fetch
に任意のcache
オプションを渡すことを許可しますが、オプションが提供されない場合は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'
:fetch
に任意のcache
オプションを渡すことを許可しますが、オプションが提供されない場合は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-*'
を持つ単一のセグメントは、'only-*'
によって引き起こされるエラーを防ぎます。'only-*'
と'force-*'
オプションの意図は、ルート全体を完全に静的または完全に動的にすることです。これは次のことを意味します:- 単一ルート内での
'only-cache'
と'only-no-store'
の組み合わせは許可されません。 - 単一ルート内での
'force-cache'
と'force-no-store'
の組み合わせは許可されません。
- 単一ルート内での
- 子が
'auto'
または'*-cache'
を提供する場合、親は'default-no-store'
を提供できません。これにより、同じフェッチが異なる動作を持つ可能性があるためです。
- 一般的に、共有される親レイアウトは
'auto'
のままにし、子セグメントが分岐する場所でオプションをカスタマイズすることをお勧めします。
runtime
アプリケーションのレンダリングには Node.js ランタイムを、ミドルウェアには Edge ランタイム(サポートされている唯一のオプション)を使用することをお勧めします。
'nodejs'
(デフォルト)'edge'
異なるランタイムについて詳しく学ぶ。
preferredRegion
preferredRegion
のサポートと対応リージョンは、デプロイメントプラットフォームに依存します。
補足:
preferredRegion
が指定されていない場合、最も近い親レイアウトのオプションを継承します。- ルートレイアウトはデフォルトですべてのリージョンになります。
maxDuration
デフォルトでは、Next.jsはサーバーサイドロジック(ページのレンダリングまたはAPIの処理)の実行を制限しません。
デプロイメントプラットフォームは、Next.jsのビルド出力からの maxDuration
を使用して、特定の実行制限を追加できます。
例えば、Vercelでは。
注意: この設定には Next.js 13.4.10
以降が必要です。
補足:
- Server Actionsを使用する場合、ページレベルで
maxDuration
を設定して、ページ上のすべてのServer Actionsのデフォルトタイムアウトを変更できます。
generateStaticParams
generateStaticParams
関数は、動的ルートセグメントと組み合わせて使用し、リクエスト時にオンデマンドで生成するのではなく、ビルド時に静的に生成されるルートセグメントパラメーターのリストを定義できます。
詳細はAPIリファレンスを参照してください。
バージョン履歴
バージョン | 内容 |
---|---|
v15.0.0-RC | export const runtime = "experimental-edge" は非推奨。codemodが利用可能です。 |