Route Segment Config
Route Segment オプションは、以下の変数を直接エクスポートすることで、ページ、レイアウト、または ルートハンドラ の動作を設定できます。
オプション | タイプ | デフォルト |
---|---|---|
dynamic | 'auto' | 'force-dynamic' | 'error' | 'force-static' | 'auto' |
dynamicParams | boolean | true |
revalidate | false | 'force-cache' | 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() {}
Good to know:
- 現在、設定オプションの値は静的に解析可能である必要があります。たとえば、
revalidate = 600
は有効ですが、revalidate = 60 * 10
は無効です。
Options
dynamic
レイアウトやページの動的な動作を、完全に静的または動的な動作に変更します。
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
Good to know:
app
ディレクトリは、pages
ディレクトリのページレベルでのgetServerSideProps
とgetStaticProps
の全てか無かの二項対立モデルよりも、フェッチリクエストレベルでのきめ細かいキャッシュ制御を優先します。dynamic
オプションは便宜上pages
ディレクトリのモデルに戻る方法であり、よりシンプルな移行手段を提供します。
auto
(デフォルト):デフォルトのオプションでは、コンポーネントの動的な動作を妨げることなく、可能な限りキャッシュしますforce-dynamic
: 動的なレンダリングを強制します。その結果、リクエスト時にそれぞれのユーザーに対してルートがレンダリングされます。このオプションはpages
ディレクトリにおけるgetServerSideProps()
と同等です。error
:静的レンダリングを強制し、動的関数やキャッシュされていないデータを使用しているコンポーネントがある場合、エラーを発生させてレイアウトやページのデータをキャッシュします。このオプションは以下と同じですpages
ディレクトリにおけるgetStaticProps()
- レイアウトまたはページ内のすべての
fetch()
リクエストのオプションを{ cache: 'force-cache' }
にする - Segment 設定を
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
で生成されなかった動的な Segment にアクセスしたときの動作を制御します。
export const dynamicParams = true // true | false,
true
(デフォルト):generateStaticParams
に含まれない動的な Segment がオンデマンドで生成されますfalse
:generateStaticParams
に含まれていない動的 Segment は404
を返します
Good to know:
- このオプションは、
pages
ディレクトリのgetStaticPaths
のfallback: true | false | blocking
オプションを置き換えますdynamicParams = true
の場合、Segment はストリーミング・サーバーレンダリングを使用しますdynamic = 'error'
とdynamic = 'force-static'
を使用すると、dynamicParams
のデフォルトがfalse
に変更されます
revalidate
レイアウトまたはページのデフォルトの再検証時間を設定します。このオプションは、個々のfetch
リクエストによって設定されたrevalidate
値は上書きしません。
export const revalidate = false
// false | 'force-cache' | 0 | number
false
: (デフォルト)キャッシュオプションを'force-cache'
に設定したfetch
リクエスト、あるいは動的関数が使われる前に発見されたfetch
リクエストをキャッシュするためのデフォルトのヒューリスティック。意味的にはrevalidate: Infinity
と同じで、リソースを無期限にキャッシュすることを意味します。個々のfetch
リクエストでcache: 'no-store'
またはrevalidate: 0
を使用してキャッシュを回避し、ルートを動的にレンダリングできます。あるいはrevalidate
をルートのデフォルトより低い正の数値に設定することで、ルートの再検証頻度を増やすことができます。0
: 動的関数やキャッシュされていないデータフェッチが検出されなくても、レイアウトやページが常に動的にレンダリングされます。このオプションは、キャッシュオプションを設定しないfetch
リクエストのデフォルトを'no-store'
に変更しますが、'force-cache'
を選ぶか、正のrevalidate
を使うfetch
リクエストはそのままにします。
number
:(秒単位)レイアウトまたはページのデフォルトの再検証頻度をn
秒に設定します。
Good to know:
revalidate
オプションは、Node.js ランタイムを使用している場合にのみ使用できます。つまり、runtime = 'edge'
でrevalidate
オプションを使用しても動作しません。
再検証の頻度
- 1 つのルートの各レイアウトとページでもっとも低い
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'
'auto'
:(デフォルト)動的関数の前に、その関数が提供するキャッシュオプションでfetch
リクエストをキャッシュし、動的関数の後のfetch
リクエストはキャッシュしないデフォルトのオプションです'default-cache'
:どのようなcache
オプションでもfetch
へ渡せるようにしますが、オプションが提供されない場合は、cache
オプションを'force-cache'
に設定します。これは、動的関数の後のfetch
リクエストも静的とみなすことを意味します'only-cache'
:オプションがない場合はデフォルトをcache: 'force-cache'
に変更し、cache: 'no-store'
のfetch
リクエストがあった場合はエラーにします'force-cache'
:すべてのfetch
リクエストのcache
オプションを'force-cache'
に設定することで、すべてのfetch
リクエストがキャッシュを利用するようにします'default-no-store'
:どのようなcacehe
オプションでもfetch
へ渡せるようにしますが、オプションが与えられない場合はcache
オプションを'no-store'
にします。これは、動的関数の前のfetch
リクエストも動的とみなすことを意味します'only-no-store'
:オプションがない場合はデフォルトをcache: 'no-store'
に変更し、cache: 'force-cache'
のfetch
リクエストがあった場合はエラーにします'force-no-store'
:すべてのfetch
リクエストのcache
オプションを'no-store'
に設定し、すべてのfetch
リクエストがキャッシュを使わないようにします。これにより、すべてのfetch
リクエストは、たとえ'force-cache'
オプションが指定されていても、リクエスト毎に再フェッチされます
ルートをまたぐ Segment の挙動
- 1 つのルートの各レイアウトとページに設定されたオプションは、互いに互換性を持つ必要があります
only-cache
とforce-cache
の 両方が指定された場合は、force-cache
が優先されます。'only-no-store'
と'force-no-store'
の両方が指定された場合は、'force-no-store'
が優先されます。force オプションはルート全体の動作を変更するので、'force-*'
を指定した単一の Segment は、'only-*'
によるエラーを防ぐことができます'only-*'
と'force-*'
オプションの意図は、ルート全体が完全に静的か、完全に動的であることを保証することです。つまり:- 1 つのルートで
'only-cache'
と'only-no-store'
を組み合わせることはできません - 1 つのルートで
'force-cache'
と'force-no-store
'を組み合わせることはできません
- 1 つのルートで
- 子で
auto
または*-cache
が設定されている場合、同じ fetch が異なる振る舞いを持つため、親はdefault-no-store
を使用できません
- 一般的には、共有の親レイアウトは
'auto'
のままにしておき、子 Segment が分岐する部分のオプションをカスタマイズすることを推奨します
runtime
export const runtime = 'nodejs'
// 'edge' | 'nodejs'
nodejs
(デフォルト)edge
Edge および Node.js ランタイムの詳細については、こちらを参照してください。
preferredRegion
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
preferredRegion
のサポートおよびサポートされるリージョンは、使用しているデプロイメント・プラットフォームに依存します。
Good to know:
preferredRegion
が指定されない場合、もっとも近い親レイアウトのオプションを継承します- ルートレイアウトのデフォルトは
all
リージョン です
maxDuration
デプロイメント・プラットフォームによっては、関数のデフォルト実行時間を長く設定できる場合があります。この設定により、プランの制限内でより長い実行時間を選択できます。注: この設定には、Next.js 13.4.10
以降が必要です。
export const maxDuration = 5
Good to know:
maxDuration
が指定されていない場合、デフォルト値はデプロイメント・プラットフォームとプランに依存します。
generateStaticParams
generateStaticParams
関数を動的なルート Segmentと組み合わせることで、リクエスト時に生成されるのではなく、ビルド時に静的に生成されるルート Segment のパラメータのリストを定義できます。
詳細はAPI リファレンスを参照してください。