Route Segment Config
Route セグメントの options は、以下の変数を直接 export することにより、Page、Layout、またはRoute Handlerの動作を設定することができます:
Option | Type | Default |
---|---|---|
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 | デプロイメントプラットフォームによって設定されます |
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() {}
Good to know:
- 現在、config options の値は静的に解析可能である必要があります。例えば、
revalidate = 600
は有効ですが、revalidate = 60 * 10
は無効です。
Options
dynamic
layout またはページの dynamic 行動を完全に静的または完全に dynamic に変更します。
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
Good to know:
app
ディレクトリの新モデルは、pages
ディレクトリのページレベルでのgetServerSideProps
やgetStaticProps
による 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:
getServerSideProps
およびgetStaticProps
からdynamic: 'force-dynamic'
およびdynamic: 'error'
への移行方法の手順については、 アップグレードガイドで確認できます。
dynamicParams
generateStaticParamsで生成されなかった dynamic セグメントが閲覧された時に何が起こるかを制御します。
export const dynamicParams = true // true | false,
export const dynamicParams = true // true | false,
true
( default ):generateStaticParams
に含まれていない Dynamic セグメントは、要求に応じて生成されます。false
: Dynamic segments not included ingenerateStaticParams
will return a 404.
Good to know:
- このオプションは、
pages
ディレクトリのgetStaticPaths
のfallback: true | false | blocking
オプションを置き換えます。dynamicParams = true
の場合、セグメントは Streaming Server Renderingを使用します。dynamic = 'error'
とdynamic = 'force-static'
が使われる場合、dynamicParams
の default はfalse
に変わります。
revalidate
layout またはページの default の再認証時間を設定します。このオプションは、個々のfetch
Request によって設定されたrevalidate
の value を上書きしません。
export const revalidate = false
// false | 0 | number
export const revalidate = false
// false | 0 | number
false
:(default)default のヒューリスティックは、cache
オプションを'force-cache'
に設定したfetch
requests や、動的関数が使用される前に発見されたものを cache します。これはrevalidate: Infinity
と意味的に等しく、リソースが無制限にキャッシュされることを意味します。それでも、個々のfetch
requests が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
は、すべてのfetch
Request の default のcache
オプションを、layout またはページで上書きすることができます。
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'
( default ) -fetch
requests を cache するための default オプションは、cache
オプションが提供する前に dynamic 機能と共に行い、 dynamic 関数の後でfetch
requests を 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
export const runtime = 'nodejs'
// 'edge' | 'nodejs'
export const runtime = 'nodejs'
// 'edge' | 'nodejs'
nodejs
( default )edge
Edge や Node.js ランタイムについて詳しく学びましょう。
preferredRegion
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
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
以上が必要です。
export const maxDuration = 5
export const maxDuration = 5
Good to know:
- Server Actionsを使用する場合、ページレベルで
maxDuration
を設定して、ページで使用されるすべての Server Actions の default タイムアウトを変更します。
generateStaticParams
generateStaticParams
関数は、dynamic route segmentsと組み合わせて使用でき、build 時に静的に生成される route セグメントパラメータのリストを定義するのに使用できます。これは、request 時にオンデマンドで生成されるのではなく。
詳細については、API referenceをご覧ください。