Route Segment Config
このページで説明されているオプションは、
dynamicIO
フラグがオンの場合は無効になり、将来的には廃止される予定です。
Route Segmentオプションを使用すると、Page、Layout、またはRoute Handlerの動作を、次の変数を直接エクスポートすることで設定できます:
Option | Type | Default |
---|---|---|
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 | デプロイプラットフォームによって設定されます |
Options
experimental_ppr
レイアウトまたはページに対してPartial Prerendering (PPR)を有効にします。
- TypeScript
- JavaScript
export const experimental_ppr = true
// true | false
export const experimental_ppr = true
// true | false
dynamic
レイアウトまたはページの動的な動作を完全に静的または完全に動的に変更します。
- TypeScript
- JavaScript
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
のバイナリのオールオアナッシングモデルよりも、fetch
リクエストレベルでの細かいキャッシュ制御を優先します。dynamic
オプションは、以前のモデルに戻るための便利な方法であり、より簡単な移行パスを提供します。
-
'auto'
(default): 可能な限りキャッシュするデフォルトオプションで、動的な動作にオプトインするコンポーネントを妨げません。 -
'force-dynamic'
: 動的レンダリングを強制し、リクエスト時に各ユーザーのためにルートがレンダリングされるようにします。このオプションは次の設定と同等です:- レイアウトまたはページ内のすべての
fetch()
リクエストのオプションを{ cache: 'no-store', next: { revalidate: 0 } }
に設定します。 - segment configを
export const fetchCache = 'force-no-store'
に設定します。
- レイアウトまたはページ内のすべての
-
'error'
: 静的レンダリングを強制し、Dynamic APIsやキャッシュされていないデータを使用するコンポーネントがある場合にエラーを発生させることで、レイアウトまたはページのデータをキャッシュします。このオプションは次の設定と同等です:pages
ディレクトリのgetStaticProps()
。- レイアウトまたはページ内のすべての
fetch()
リクエストのオプションを{ cache: 'force-cache' }
に設定します。 - segment configを
fetchCache = 'only-cache', dynamicParams = false
に設定します。 dynamic = 'error'
はdynamicParams
のデフォルトをtrue
からfalse
に変更します。generateStaticParams
によって生成されない動的パラメータのページを動的にレンダリングするには、手動でdynamicParams = true
を設定してオプトインできます。
-
'force-static'
: 静的レンダリングを強制し、cookies
、headers()
、useSearchParams()
が空の値を返すようにします。
Good to know:
getServerSideProps
とgetStaticProps
からdynamic: 'force-dynamic'
とdynamic: 'error'
への移行方法の手順は、アップグレードガイドに記載されています。
dynamicParams
generateStaticParamsで生成されていない動的セグメントが訪問されたときの動作を制御します。
- TypeScript
export const dynamicParams = true // true | false,
- JavaScript
export const dynamicParams = true // true | false,
true
(default):generateStaticParams
に含まれていない動的セグメントはオンデマンドで生成されます。false
:generateStaticParams
に含まれていない動的セグメントは404を返します。
Good to know:
- このオプションは、
pages
ディレクトリのgetStaticPaths
のfallback: true | false | blocking
オプションを置き換えます。- 初めて訪問されたときにすべてのパスを静的にレンダリングするには、
generateStaticParams
で空の配列を返すか、export const dynamic = 'force-static'
を利用する必要があります。dynamicParams = true
の場合、セグメントはStreaming Server Renderingを使用します。dynamic = 'error'
とdynamic = 'force-static'
が使用される場合、dynamicParams
のデフォルトはfalse
に変更されます。
revalidate
レイアウトまたはページのデフォルトの再検証時間を設定します。このオプションは、個々のfetch
リクエストによって設定されたrevalidate
値を上書きしません。
- TypeScript
- JavaScript
export const revalidate = false
// false | 0 | number
export const revalidate = false
// false | 0 | number
false
(default):fetch
リクエストがcache
オプションを'force-cache'
に設定しているか、Dynamic APIが使用される前に発見された場合にキャッシュするデフォルトのヒューリスティック。意味的にはrevalidate: Infinity
と同等で、リソースは無期限にキャッシュされるべきことを意味します。それでも、個々のfetch
リクエストがcache: 'no-store'
またはrevalidate: 0
を使用してキャッシュされないようにし、ルートを動的にレンダリングすることが可能です。また、ルートのデフォルトよりも低い正の数にrevalidate
を設定して、ルートの再検証頻度を増やすこともできます。0
: Dynamic APIsやキャッシュされていないデータフェッチが発見されなくても、レイアウトまたはページが常に動的にレンダリングされることを保証します。このオプションは、cache
オプションを設定していないfetch
リクエストのデフォルトを'no-store'
に変更しますが、'force-cache'
にオプトインするfetch
リクエストや正のrevalidate
を使用するfetch
リクエストはそのままにします。number
: (秒単位)レイアウトまたはページのデフォルトの再検証頻度をn
秒に設定します。
Good to know:
revalidate
値は静的に解析可能である必要があります。たとえば、revalidate = 600
は有効ですが、revalidate = 60 * 10
は無効です。runtime = 'edge'
を使用している場合、revalidate
値は利用できません。- 開発中は、ページは常にオンデマンドでレンダリングされ、キャッシュされることはありません。これにより、再検証期間が経過するのを待たずに変更をすぐに確認できます。
Revalidation Frequency
- 単一ルートの各レイアウトとページの中で最も低い
revalidate
が、ルート全体の再検証頻度を決定します。これにより、子ページが親レイアウトと同じ頻度で再検証されることが保証されます。 - 個々の
fetch
リクエストは、ルートのデフォルトのrevalidate
よりも低いrevalidate
を設定して、ルート全体の再検証頻度を増やすことができます。これにより、特定のルートに対して、ある基準に基づいてより頻繁な再検証に動的にオプトインすることができます。
fetchCache
これはデフォルトの動作を上書きする必要がある場合にのみ使用するべき高度なオプションです。
デフォルトでは、Next.jsは、Dynamic APIsが使用される前に到達可能なfetch()
リクエストをキャッシュし、Dynamic APIsが使用された後に発見されたfetch
リクエストをキャッシュしません。
fetchCache
を使用すると、レイアウトまたはページ内のすべてのfetch
リクエストのデフォルトのcache
オプションを上書きできます。
- TypeScript
- JavaScript
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): Dynamic APIsの前にfetch
リクエストをキャッシュし、提供されたcache
オプションを使用し、Dynamic APIsの後にfetch
リクエストをキャッシュしないデフォルトオプション。'default-cache'
:fetch
に任意のcache
オプションを渡すことを許可しますが、オプションが提供されない場合はcache
オプションを'force-cache'
に設定します。これにより、Dynamic APIsの後のfetch
リクエストも静的と見なされます。'only-cache'
: すべてのfetch
リクエストがキャッシュにオプトインすることを保証し、オプションが提供されない場合はデフォルトをcache: 'force-cache'
に変更し、cache: 'no-store'
を使用するfetch
リクエストがある場合はエラーを発生させます。'force-cache'
: すべてのfetch
リクエストがキャッシュにオプトインすることを保証し、すべてのfetch
リクエストのcache
オプションを'force-cache'
に設定します。'default-no-store'
:fetch
に任意のcache
オプションを渡すことを許可しますが、オプションが提供されない場合はcache
オプションを'no-store'
に設定します。これにより、Dynamic APIsの前のfetch
リクエストも動的と見なされます。'only-no-store'
: すべてのfetch
リクエストがキャッシュからオプトアウトすることを保証し、オプションが提供されない場合はデフォルトをcache: 'no-store'
に変更し、cache: 'force-cache'
を使用するfetch
リクエストがある場合はエラーを発生させます。'force-no-store'
: すべてのfetch
リクエストがキャッシュからオプトアウトすることを保証し、すべてのfetch
リクエストのcache
オプションを'no-store'
に設定します。これにより、すべてのfetch
リクエストが'force-cache'
オプションを提供しても、毎回再フェッチされるようになります。
Cross-route segment behavior
- 単一ルートの各レイアウトとページに設定されたオプションは互換性がある必要があります。
'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'
の組み合わせは許可されていません。
- 単一ルートで
- 親は、子が
'auto'
または'*-cache'
を提供する場合、'default-no-store'
を提供することはできません。これは、同じフェッチが異なる動作をする可能性があるためです。
- 共有される親レイアウトは一般的に
'auto'
のままにし、子セグメントが分岐する場所でオプションをカスタマイズすることをお勧めします。
runtime
アプリケーションのレンダリングにはNode.jsランタイムを使用し、ミドルウェアにはEdgeランタイムを使用することをお勧めします(唯一サポートされているオプション)。
- TypeScript
- JavaScript
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
'nodejs'
(default)'edge'
異なるランタイムについて詳しく学びましょう。
preferredRegion
- TypeScript
- JavaScript
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
preferredRegion
のサポートとサポートされているリージョンは、デプロイプラットフォームに依存します。
Good to know:
preferredRegion
が指定されていない場合、最も近い親レイアウトのオプションを継承します。- root レイアウトはデフォルトで
all
リージョンです。
maxDuration
デフォルトでは、Next.jsはサーバーサイドロジック(ページのレンダリングやAPIの処理)の実行を制限しません。デプロイプラットフォームは、Next.jsのビルド出力からmaxDuration
を使用して特定の実行制限を追加できます。たとえば、Vercelでは。
Note: この設定にはNext.js 13.4.10
以上が必要です。
- TypeScript
- JavaScript
export const maxDuration = 5
export const maxDuration = 5
Good to know:
- Server Actionsを使用している場合、ページレベルで
maxDuration
を設定して、ページで使用されるすべてのServer Actionsのデフォルトのタイムアウトを変更します。
generateStaticParams
generateStaticParams
関数は、dynamic route segmentsと組み合わせて使用することで、ビルド時に静的に生成されるルートセグメントパラメータのリストを定義し、リクエスト時にオンデマンドで生成されるのではなく、ビルド時に静的に生成されるようにします。
詳細については、APIリファレンスを参照してください。
バージョン履歴
Version | |
---|---|
v15.0.0-RC | export const runtime = "experimental-edge" は廃止されました。codemodが利用可能です。 |