ルートセグメント設定

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

オプションデフォルト値
dynamic'auto' | 'force-dynamic' | 'error' | 'force-static''auto'
dynamicParamsbooleantrue
revalidatefalse | 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': 動的レンダリングを強制し、リクエスト時に各ユーザーに対してルートがレンダリングされます。このオプションは pages ディレクトリの getServerSideProps() と同等です。
  • '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 | 0 | number
export const revalidate = false
// false | 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' を提供することはできません。これにより、同じフェッチが異なる動作を持つ可能性があるためです。
  • 一般的には、共有親レイアウトを 'auto' のままにし、子セグメントが分岐する場所でオプションをカスタマイズすることをお勧めします。

runtime

export const runtime = 'nodejs'
// 'nodejs' | 'edge'
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
  • '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はサーバーサイドロジック(ページのレンダリングやAPIの処理)の実行時間を制限しません。 デプロイメントプラットフォームは、Next.jsのビルド出力から maxDuration を使用して特定の実行制限を追加できます。 例えば、Vercel では。

: この設定にはNext.js 13.4.10 以降が必要です。

export const maxDuration = 5
export const maxDuration = 5

知っておくと良いこと:

  • Server Actions を使用している場合、ページレベルで maxDuration を設定して、そのページで使用されるすべてのServer Actionsのデフォルトタイムアウトを変更できます。

generateStaticParams

generateStaticParams 関数は、動的ルートセグメント と組み合わせて使用し、ビルド時に静的に生成されるルートセグメントパラメータのリストを定義できます。リクエスト時にオンデマンドで生成されるのではなく、ビルド時に生成されます。

詳細については、APIリファレンスを参照してください。