getStaticPaths
ページに動的ルートがあり、getStaticProps
を使用する場合、静的に生成されるパスのリストを定義する必要があります。
動的ルートを使用するページからgetStaticPaths
(静的サイト生成) という関をエクスポートすると、Next.jsはgetStaticPaths
で指定されたすべてのパスを静的にプリレンダリングします。
pages/repo/[name].tsx
import type {
InferGetStaticPropsType,
GetStaticProps,
GetStaticPaths,
} from 'next'
type Repo = {
name: string
stargazers_count: number
}
export const getStaticPaths = (async () => {
return {
paths: [
{
params: {
name: 'next.js',
},
}, // See the "paths" section below
],
fallback: true, // false or "blocking"
}
}) satisfies GetStaticPaths
export const getStaticProps = (async (context) => {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const repo = await res.json()
return { props: { repo } }
}) satisfies GetStaticProps<{
repo: Repo
}>
export default function Page({
repo,
}: InferGetStaticPropsType<typeof getStaticProps>) {
return repo.stargazers_count
}
getStaticPaths
APIリファレンスでは、getStaticPaths
で使用できるすべてのパラメータとプロパティについて説明しています。
getStaticPathsはいつ使うべきですか?
動的ルートを使用するページを静的にプリレンダリングする場合、かつ以下の条件に該当する場合にgetStaticPaths
を使用する必要があります。
- データがヘッドレスCMSからのものである場合
- データがデータベースからのものである場合
- データがファイルシステムからのものである場合
- データが公開キャッシュできる場合 (ユーザー固有ではない)
- ページがプリレンダリングされる必要がある場合 (SEOのため) 、かつ非常に高速である必要がある場合 —
getStaticProps
はHTML
とJSON
ファイルを生成し、どちらもCDNによってキャッシュされてパフォーマンスが向上します
getStaticPathsはいつ実行されますか
getStaticPaths
は、本番環境のビルド時のみ実行され、実行時には呼び出されません。 getStaticPaths
内に記述されたコードがクライアントサイドバンドルから削除されていることをこのツールで検証できます。
getStaticPathsに関してgetStaticPropsはどのように実行されますか
getStaticProps
は、ビルド時に返されたpaths
に対してnext build
中に実行されますgetStaticProps
は、fallback: true
を使用している場合、バックグラウンドで実行されますgetStaticProps
は、fallback: blocking
を使用している場合、初期レンダリングの前に呼び出されます
getStaticPathsはどこで使用できますか
getStaticPaths
はgetStaticProps
と一緒に使用しなければなりませんgetStaticPaths
をgetServerSideProps
と一緒に使用することはできませんgetStaticProps
も使用する 動的ルート からgetStaticPaths
をエクスポートできます- ページ以外のファイル (例:
components
フォルダ) からgetStaticPaths
をエクスポートすることはできません getStaticPaths
は、ページコンポーネントのプロパティとしてではなく、スタンドアロン関数としてエクスポートする必要があります
開発環境ではすべてのリクエストで実行されます
これは役に立ちましたか?