Lang x Lang

Route Segment Config

Route セグメントの options は、以下の変数を直接 export することにより、PageLayout、またはRoute Handlerの動作を設定することができます:

OptionTypeDefault
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デプロイメントプラットフォームによって設定されます
layout.tsx
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() {}
layout.js
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() {}

Good to know:

  • 現在、config options の値は静的に解析可能である必要があります。例えば、revalidate = 600は有効ですが、revalidate = 60 * 10は無効です。

Options

dynamic

layout またはページの dynamic 行動を完全に静的または完全に dynamic に変更します。

layout.tsx
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
layout.js
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'

Good to know: appディレクトリの新モデルは、pagesディレクトリのページレベルでのgetServerSidePropsgetStaticPropsによる binary な全てか無かのモデルよりも、fetchの request レベルでの細かいキャッシング制御を優先します。 dynamicオプションは、以前のモデルに便利に戻るための方法であり、より簡単な移行の path を提供します。

  • 'auto' ( default ):可能な限り多くの cache を行いつつ、どの components も dynamic な動作を選択できるようにする default のオプション。

  • 'force-dynamic': フォースdynamic renderingにより、ユーザーごとに routes が request 時間にレンダリングされます。このオプションは pages ディレクトリの getServerSideProps() と同等です。

  • 'error': 静的 rendering を強制し、 layout やページのデータを cache することで、dynamic 関数やキャッシュされていないデータを使用する components がある場合には error を引き起こします。このオプションは次に等しいです:

    • pagesディレクトリのgetStaticProps()
  • すべてのfetch()の request を、 layout またはページに{ cache: 'force-cache' }として設定する。

  • セグメント config を fetchCache = 'only-cache', dynamicParams = false に設定します。

  • dynamic = 'error'は、dynamicParamsの default をtrueからfalseに変更します。generateStaticParamsによって生成されなかった dynamic params のページを動的にレンダリングするためには、手動でdynamicParams = trueを設定することで再オプトインすることができます。

  • 'force-static': 静的 rendering を強制し、cookies()headers()useSearchParams()が empty の values を返すよう強制することで、 layout またはページのデータを cache します。

Good to know:

dynamicParams

generateStaticParamsで生成されなかった dynamic セグメントが閲覧された時に何が起こるかを制御します。

layout.tsx
export const dynamicParams = true // true | false,
layout.js
export const dynamicParams = true // true | false,
  • true ( default ):generateStaticParamsに含まれていない Dynamic セグメントは、要求に応じて生成されます。
  • false: Dynamic segments not included in generateStaticParams will return a 404.

Good to know:

  • このオプションは、pagesディレクトリのgetStaticPathsfallback: true | false | blockingオプションを置き換えます。
  • dynamicParams = trueの場合、セグメントは Streaming Server Renderingを使用します。
  • dynamic = 'error'dynamic = 'force-static'が使われる場合、dynamicParamsの default はfalseに変わります。

revalidate

layout またはページの default の再認証時間を設定します。このオプションは、個々のfetchRequest によって設定されたrevalidateの value を上書きしません。

layout.tsx
export const revalidate = false
// false | 0 | number
layout.js
export const revalidate = false
// false | 0 | number
  • false:(default)default のヒューリスティックは、cacheオプションを'force-cache'に設定したfetchrequests や、動的関数が使用される前に発見されたものを cache します。これはrevalidate: Infinityと意味的に等しく、リソースが無制限にキャッシュされることを意味します。それでも、個々のfetchrequests がcache: 'no-store'を使用するか、revalidate: 0を使用してキャッシュを避け、route を動的に rendering することが可能です。または、リヴァリデーションの頻度を増やすために、revalidateをルート default よりも低い正の数 values に設定します。
  • 0: dynamic 関数やキャッシュされていないデータフェッチが見つからなくても、 layout またはページが常に動的にレンダリングされるようにします。このオプションは、cacheオプションを設定していないfetchリクエストの default を'no-store'に変更しますが、'force-cache'を適用したり、revalidateを正に設定したfetchリクエストについてはそのままです。
  • number: (秒単位) layout またはページの default 再検証頻度を n 秒に設定します。

Good to know: revalidateオプションは、Node.js Runtimeを使用している場合にのみ利用可能です。つまり、runtime = 'edge'と共にrevalidateオプションを使用することはできません。

再検証の頻度

  • 単一の route の各 layout とページごとの最低の revalidate が、 全体の route の再検証頻度を決定します。これにより、子ページが親レイアウトと同じ頻度で再検証されることが保証されます。
  • 個別のfetchリクエストでは、ルートの default のrevalidateよりも低いrevalidateを設定して、全体の route の再検証頻度を上げることができます。これにより、一部の基準に基づいて特定の routes でより頻繁な再検証を選択することができます。

fetchCache

これはデフォルトの動作を特に上書きする必要がある場合にのみ使用すべき高度なオプションです。

default では、fetch()requests は、dynamic 関数が使用される前に到達可能なものすべてがcache され、dynamic 関数が使用される後に発見された fetch requests は cache されません

fetchCacheは、すべてのfetchRequest の default のcacheオプションを、layout またはページで上書きすることができます。

layout.tsx
export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'
layout.js
export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'
  • 'auto' ( default ) - fetchrequests を cache するための default オプションは、cacheオプションが提供する前に dynamic 機能と共に行い、 dynamic 関数の後で fetchrequests を cache しません。
  • 'default-cache': 任意のcacheオプションをfetchに渡すことを許可しますが、オプションが提供されていない場合は、cacheオプションを'force-cache'に設定します。これは、 dynamic 関数の後にもfetchリクエストが静的とみなされることを意味します。
  • 'only-cache': すべての fetch リクエストでキャッシングを選択するようにし、 default を cache: 'force-cache' に変更し、オプションが提供されていない場合や、fetch リクエストで cache: 'no-store' を使用すると error を引き起こします。
  • 'force-cache': すべての fetch リクエストがキャッシュに適用されるように、すべての fetch リクエストの cache オプションを 'force-cache' に設定します。
  • 'default-no-store': 任意のcacheオプションをfetchに渡すことができますが、オプションが提供されていない場合は、cacheオプションを'no-store'に設定します。つまり、 dynamic 関数の前のfetchリクエストでさえも、 dynamic と見なされます。
  • 'only-no-store': すべてのfetchリクエストがキャッシングをオプトアウトするように保証し、オプションが提供されない場合は default をcache: 'no-store'に変更し、fetchリクエストがcache: 'force-cache'を使用すると error が発生します
  • 'force-no-store': すべてのfetchリクエストのcacheオプションを'no-store'に設定することで、キャッシングからのオプトアウトを保証します。これにより、'force-cache'オプションが提供されていても、すべてのfetchリクエストが毎回 request ごとに再フェッチされることを強制します。

クロスルートセグメントの振る舞い

  • 単一の route の各 layout やページで設定された全ての options は、互いに互換性を持つ必要があります。
    • 'only-cache''force-cache'の両方が提供された場合、'force-cache'が勝つ。'only-no-store''force-no-store'の両方が提供された場合、'force-no-store'が勝つ。force オプションは route 全体の振る舞いを変えるため、'force-*'の一つのセグメントは'only-*'によって引き起こされる error を防ぎます。
  • 'only-*'およびforce-*'の options の意図は、全体の route が完全に静的であるか、または完全に dynamic であることを保証することです。つまり:
    • 'only-cache''only-no-store'の組み合わせは単一の route では許可されていません。
    • 'force-cache''force-no-store'の組み合わせは、単一の route では許可されていません。
  • 親は、子が'auto'または'*-cache'を提供する場合、'default-no-store'を提供することはできません。なぜなら、それは同じ fetch が異なる振る舞いをする可能性があるからです。
  • 一般的には、共有親 Layout を'auto'のままにし、子セグメントが分岐する場所で options をカスタマイズすることを推奨します。

runtime

layout.tsx
export const runtime = 'nodejs'
// 'edge' | 'nodejs'
layout.js
export const runtime = 'nodejs'
// 'edge' | 'nodejs'
  • nodejs ( default )
  • edge

Edge や Node.js ランタイムについて詳しく学びましょう。

preferredRegion

layout.tsx
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
layout.js
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']

preferredRegionのサポート、およびサポートされている地域は、あなたのデプロイメントプラットフォームに依存します。

Good to know:

  • preferredRegionが指定されていない場合、最も近い親の layout のオプションを継承します。
  • root layout は default でallリージョンに設定されています。

maxDuration

default では、 Next.js build は server-side ロジック(ページの rendering や API の処理)の実行を制限しません。デプロイメントプラットフォームは、 Next.js build の出力からmaxDurationを使用して特定の実行制限を追加できます。例えば、Vercel などです。

注釈: この settings は Next.js のバージョン 13.4.10 以上が必要です。

layout.tsx
export const maxDuration = 5
layout.js
export const maxDuration = 5

Good to know:

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

generateStaticParams

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

詳細については、API referenceをご覧ください。

当社サイトでは、Cookie を使用しています。各規約をご確認の上ご利用ください:
Cookie Policy, Privacy Policy および Terms of Use