ルートセグメント設定

ルートセグメントオプションを使用すると、以下の変数を直接エクスポートすることで、ページレイアウト、またはルートハンドラの動作を設定できます:

オプションデフォルト値
dynamic'auto' | 'force-dynamic' | 'error' | 'force-static''auto'
dynamicParamsbooleantrue
revalidatefalse | 'force-cache' | 0 | numberfalse
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'
maxDurationnumberデプロイプラットフォーム依存
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 ディレクトリでのページレベルの getServerSidePropsgetStaticProps の全か無かのバイナリモデルよりも、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() が空の値を返すように強制することで、レイアウトまたはページの静的レンダリングとデータのキャッシュを強制します。

知っておくと便利:

  • getServerSidePropsgetStaticProps から 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 ディレクトリの getStaticPathsfallback: 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リファレンスを参照してください。