getStaticProps
getStaticProps
という関数をエクスポートすると、関数から返されるpropsを使用してビルド時にページをプリレンダリングできます:
getStaticProps
で使用するためにトップレベルのスコープでモジュールをインポートできます。使用されたインポートはクライアントサイド用にバンドルされるありません。これは、データベースからデータをフェッチするなど、getStaticProps
で直接サーバーサイドのコードを記述できることを意味します。
コンテキストパラメーター
context
パラメーターは、以下のキーを含むオブジェクトです:
名前 | 説明 |
---|---|
params | 動的ルーティングを使用しているページのルートパラメーターを含みます。例えば、ページ名が[id].js の場合、params は{ id: ... } のようになります。これは後で説明するgetStaticPaths と一緒に使用する必要があります。 |
preview | (draftMode で非推奨)ページがプレビューモードの場合はtrue 、それ以外の場合はfalse となります。 |
previewData | (draftMode で非推奨)setPreviewData によって設定されたプレビューデータ。 |
draftMode | ページがドラフトモードの場合はtrue 、それ以外の場合はfalse となります。 |
locale | アクティブなロケールを含みます(有効な場合)。 |
locales | サポートされているすべてのロケールを含みます(有効な場合)。 |
defaultLocale | 設定されているデフォルトロケールを含みます(有効な場合)。 |
revalidateReason | 関数が呼び出された理由を提供します。以下のいずれかです:「build」(ビルド時に実行)、「stale」(再生成期間が期限切れ、または開発モードで実行)、「on-demand」(オンデマンド再生成によってトリガー) |
getStaticPropsの戻り値
getStaticProps
関数は、props
、redirect
、またはnotFound
のいずれかを含むオブジェクト、およびオプションのrevalidate
プロパティを返す必要があります。
props
props
オブジェクトは、各値がページコンポーネントによって受け取られるキーと値のペアです。[JSON.stringify
](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)でシリアライズできる[シリアライザブルオブジェクト](https://developer.mozilla.org/docs/Glossary/Serialization)である必要があります。
revalidate
revalidate
プロパティは、ページの再生成が可能になるまでの秒数です(デフォルトはfalse
、または再生成なし)。
Incremental Static Regenerationの詳細をご覧ください。
ISRを活用するページのキャッシュステータスは、x-nextjs-cache
レスポンスヘッダーの値を読むことで判断できます。可能な値は以下のとおりです:
MISS
- パスがキャッシュにない(最初の訪問時に最大1回発生)STALE
- パスがキャッシュにあるが、再検証時間を超過しているため、バックグラウンドで更新されるHIT
- パスがキャッシュにあり、再検証時間を超過していない
notFound
notFound
ブール値により、ページは 404
ステータスと 404ページ を返すことができます。notFound: true
の場合、以前に正常に生成されたページであっても 404
を返します。これは、ユーザー生成コンテンツが作成者によって削除されるようなユースケースをサポートすることを目的としています。なお、notFound
はここで説明されていると同じ revalidate
の動作に従います。
補足:
fallback: false
モードでは、notFound
は不要です。getStaticPaths
から返されたパスのみがプレレンダリングされるためです。
redirect
redirect
オブジェクトにより、内部または外部リソースへのリダイレクトが可能です。{ destination: string, permanent: boolean }
の形式に一致する必要があります。
まれに、古い HTTP
クライアントが適切にリダイレクトするためにカスタムステータスコードを割り当てる必要がある場合があります。そのような場合、permanent
プロパティの代わりに statusCode
プロパティを使用できますが、両方は使用できません。また、next.config.js
のリダイレクトと同様に、basePath: false
を設定することもできます。
リダイレクトがビルド時に判明している場合は、代わりに next.config.js
に追加する必要があります。
ファイル読み込み: process.cwd()
を使用
getStaticProps
では、ファイルシステムから直接ファイルを読み込むことができます。
そのためには、ファイルへの完全なパスを取得する必要があります。
Next.jsがコードを別のディレクトリにコンパイルするため、__dirname
は Pages Router と異なるパスを返します。
代わりに、process.cwd()
を使用できます。これは Next.js が実行されているディレクトリを提供します。
バージョン履歴
バージョン | 変更点 |
---|---|
v13.4.0 | App Router が簡略化されたデータフェッチと共に安定版になりました |
v12.2.0 | オンデマンド増分静的再生成 が安定版になりました |
v12.1.0 | オンデマンド増分静的再生成 が追加されました(ベータ版)。 |
v10.0.0 | locale 、locales 、defaultLocale 、notFound オプションが追加されました。 |
v10.0.0 | fallback: 'blocking' 戻り値オプションが追加されました。 |
v9.5.0 | 安定版 増分静的再生成 |
v9.3.0 | getStaticProps が導入されました。 |