getStaticProps の詳細
getStaticProps
について知っておくべき重要な情報を以下に示します。
外部APIの取得またはデータベースのクエリ
lib/posts.js
では、ファイルシステムからデータを取得する getSortedPostsData
を実装しました。しかし、外部APIエンドポイントなど他のソースからデータを取得することも可能です:
注: Next.js はクライアントとサーバーの両方で
fetch()
をポリフィルします。インポートする必要はありません。
データベースを直接クエリすることもできます:
これは getStaticProps
がサーバーサイドでのみ実行されるため可能です。クライアントサイドでは決して実行されず、ブラウザ用のJSバンドルにも含まれません。つまり、データベースへの直接クエリのようなコードを、ブラウザに送信されることなく記述できます。
開発環境と本番環境
- 開発環境 (
npm run dev
またはyarn dev
) では、getStaticProps
は_リクエストごとに_実行されます。 - 本番環境では、
getStaticProps
は_ビルド時に_実行されます。ただし、この動作はgetStaticPaths
によって返されるfallback
キー を使用して拡張できます。
ビルド時に実行されることを意図しているため、クエリパラメータやHTTPヘッダーなど、リクエスト時にのみ利用可能なデータを使用することはできません。
ページでのみ許可
getStaticProps
は ページ からのみエクスポートできます。非ページファイルからエクスポートすることはできません。
この制限の理由の一つは、Reactがページをレンダリングする前にすべての必要なデータを持っている必要があるためです。
リクエスト時にデータを取得する必要がある場合は?
静的生成 (Static Generation) はビルド時に一度だけ行われるため、頻繁に更新されるデータやユーザーリクエストごとに変化するデータには適していません。
このような場合、データが頻繁に変更される可能性があるときは、サーバーサイドレンダリング (Server-side Rendering) を使用できます。次のセクションでサーバーサイドレンダリングについて詳しく学びましょう。