ダイナミックルートは、括弧付きのフォルダ名を使用して可変のURLセグメントにマッチし、**generateStaticParams**は、Next.jsがビルド時にどのページをプリレンダリングするかを指示します(SSG/ISR用)。
ダイナミックセグメント
tsx
() {
post = (params.);
;
}
// Tell Next.js the list of slugs to build statically
export async function generateStaticParams() {
const posts = await getAllPosts();
return posts.map(post => ({ slug: post.slug }));
// → builds /blog/post-1, /blog/post-2, ... as static HTML at build time
}
これがない場合、ダイナミックルートはオンデマンドで(SSR)レンダリングされます。これがある場合、Next.jsはビルド時に返された各パラメータに対して静的ページを事前生成します。これにより、既知のダイナミックページセット(すべてのブログ記事、すべての商品)に対してSSGの速度を得ることができます。
// what happens for a slug NOT returned by generateStaticParams?
export const dynamicParams = true; // (default) render unknown slugs on-demand (ISR-like)
// export const dynamicParams = false; // return 404 for any slug not pre-built
これにより、最初のページまたは最も一般的なページを事前構築し、それでも長いテール(ロングテール)を提供する(または404)ことができます。
app/shop/[...categories]/page.tsx → /shop/a/b/c (params.categories = ['a','b','c'])
app/[lang]/[slug]/page.tsx → multiple params: { lang, slug }
export async function generateStaticParams() {
return [{ lang: "en", slug: "about" }, { lang: "vi", slug: "about" }];
}
このペアは、ダイナミックページの大規模セット(ブログ、e-commerceカタログ、ドキュメント)を静的に生成するための方法であり、トップパフォーマンスとSEOを実現し、dynamicParamsは事前に構築されていないページのフォールバックを制御します。
generateStaticParams(どのページを事前構築するか)とキャッシング/revalidateオプションを理解することは、App Routerでダイナミックコンテンツに対してSSG/ISRを実施するための核となります。