カテゴリ: Next.js 更新日: 2026/03/30

Next.js App RouterでSSGを完全理解!初心者でもわかるgenerateStaticParamsの使い方

Next.js App RouterでSSGする方法(generateStaticParams)
Next.js App RouterでSSGする方法(generateStaticParams)

先生と生徒の会話形式で理解しよう

生徒

「先生、Next.jsでサイトを事前に作っておく方法ってありますか?」

先生

「はい、それがSSG、Static Site Generationという仕組みです。ページを事前に作っておくので、表示がとても速くなります。」

生徒

「具体的にどうやって使うんですか?」

先生

「Next.jsのApp Routerでは、generateStaticParamsを使うと、事前にどのページを作るか指定できます。これから詳しく見ていきましょう。」

1. SSGとは何か?初心者向けに解説

1. SSGとは何か?初心者向けに解説
1. SSGとは何か?初心者向けに解説

SSGはStatic Site Generationの略で、ウェブページを事前にHTMLとして作成しておく方法です。通常のページはアクセスがあるたびにサーバーで作られますが、SSGではあらかじめ作っておくので、表示が速くなり、アクセスが集中しても強い特徴があります。

例えば、毎朝作る新聞のように、すでに完成したものを配るイメージです。Next.jsではApp Routerを使うと、簡単にSSG対応のページを作ることができます。

2. App RouterでSSGを実現するgenerateStaticParamsの基本

2. App RouterでSSGを実現するgenerateStaticParamsの基本
2. App RouterでSSGを実現するgenerateStaticParamsの基本

App RouterでSSGを使うには、まずgenerateStaticParamsという関数を作ります。この関数は「どのページを事前に作るか」をNext.jsに伝える役割です。


export async function generateStaticParams() {
  return [
    { id: "1" },
    { id: "2" },
    { id: "3" },
  ];
}
この例では、idが1、2、3のページを事前に作ります。アクセスすると、事前に作ったHTMLがそのまま表示されます。

3. パラメータを受け取るページの作り方

3. パラメータを受け取るページの作り方
3. パラメータを受け取るページの作り方

事前に作るページは、パラメータを受け取るページとして作ります。App Routerではフォルダ名に角括弧でパラメータ名を書きます。


// app/products/[id]/page.tsx
import React from "react";

type Props = {
  params: { id: string };
};

export default function ProductPage({ params }: Props) {
  return (
    <div>
      <h1>商品ID: {params.id}</h1>
      <p>このページはSSGで事前に作られています。</p>
    </div>
  );
}
アクセスすると、URLに応じたIDの商品ページが表示されます。

4. generateStaticParamsでデータを動的に作る

4. generateStaticParamsでデータを動的に作る
4. generateStaticParamsでデータを動的に作る

固定の配列だけでなく、APIから取得したデータで事前にページを作ることも可能です。これにより、商品一覧などを自動でSSG化できます。


export async function generateStaticParams() {
  const res = await fetch("https://example.com/api/products");
  const products = await res.json();

  return products.map((product: any) => ({
    id: product.id.toString(),
  }));
}
この方法では、APIのデータに基づいて事前にすべてのページを生成します。

5. ページにアクセスしたときの挙動

5. ページにアクセスしたときの挙動
5. ページにアクセスしたときの挙動

SSGで作ったページは、アクセスするとすぐに表示されます。サーバー側で生成する時間がないので、ユーザーは高速でページを見ることができます。


// 実際の動きのイメージ
// /products/1 にアクセスすると
// HTMLがすでにあるので即座に表示
ページの表示速度が向上し、アクセスが多くてもサーバー負荷が軽くなります。

6. 動的ルーティングとSSGの組み合わせ

6. 動的ルーティングとSSGの組み合わせ
6. 動的ルーティングとSSGの組み合わせ

App Routerでは、[id]のような動的ルーティングとSSGを組み合わせることで、事前に作るページを柔軟に指定できます。例えば、ブログ記事や商品ページなどに便利です。


// app/blog/[slug]/page.tsx
type Props = { params: { slug: string } };

export default function BlogPage({ params }: Props) {
  return (
    <div>
      <h1>記事タイトル: {params.slug}</h1>
      <p>ここは事前に生成されたブログ記事ページです。</p>
    </div>
  );
}
URLに応じて記事ページが事前に作られ、読み込みが高速になります。

7. まとめとしてのポイント

7. まとめとしてのポイント
7. まとめとしてのポイント

Next.jsのApp RouterでSSGを使うには、generateStaticParamsで事前に作るページを指定することが基本です。固定の配列でもAPIから取得したデータでも対応可能で、動的ルーティングと組み合わせることで便利なウェブサイトを高速に作れます。

初心者でも、まずは固定の配列でページを事前に作るところから始めると理解しやすいです。

まとめ

まとめ
まとめ

本記事では、Next.jsのApp Routerを活用したStatic Site Generation(SSG)の基本から応用までを詳しく解説しました。SSGとは、ウェブページを事前にHTMLとして生成し、アクセス時に即座に表示できる仕組みで、ページ表示速度の向上やサーバー負荷の軽減に非常に有効です。特に、動的ルーティングと組み合わせることで、商品ページやブログ記事など、個別に生成する必要があるページでも高速で提供できるメリットがあります。

App RouterでSSGを実現するためには、generateStaticParamsを活用して「どのページを事前に作成するか」をNext.jsに指示することが重要です。固定のIDや配列を使った基本的な方法から、APIや外部データを取得して動的に生成する方法まで、幅広く対応できます。これにより、商品の在庫情報や最新の記事情報などをリアルタイムに反映しながらも、事前生成による高速表示が可能になります。

また、パラメータを受け取るページの作り方として、フォルダ名に角括弧を使った動的ルーティングを活用しました。これにより、例えば/products/1のようなURLでも、事前に生成されたHTMLが即座に表示され、ユーザー体験を大幅に向上させることができます。APIからデータを取得する場合は、generateStaticParams内でfetch処理を行い、取得したデータに基づきページを動的に生成することで、膨大な商品一覧や記事リストにも対応可能です。

さらに、SSGの特徴として、一度生成したページはアクセス時にサーバーで再生成する必要がないため、アクセス集中時でも安定した表示速度を維持できます。特にECサイトやニュースサイトのように、多くのユーザーが同時にアクセスする場合に非常に有効です。Next.jsでは、App RouterとgenerateStaticParamsを組み合わせることで、初心者でも簡単にこれらの高速ページを作ることが可能です。

初心者向けのポイントとしては、まずは固定配列でSSGページを生成する方法を理解することです。その後、APIやデータベースから取得したデータを元に動的生成を行う流れを学ぶと、Next.jsのSSGの全体像をつかみやすくなります。加えて、動的ルーティングとの組み合わせにより、柔軟かつ効率的にページを生成できるため、規模の大きなサイトや頻繁に更新されるコンテンツにも対応可能です。

ここで実際に、固定配列を使った簡単なSSGページのサンプルコードを振り返ってみましょう。


export async function generateStaticParams() {
  return [
    { id: "1" },
    { id: "2" },
    { id: "3" },
  ];
}

// app/products/[id]/page.tsx
import React from "react";

type Props = { params: { id: string } };

export default function ProductPage({ params }: Props) {
  return (
    <div>
      <h1>商品ID: {params.id}</h1>
      <p>このページはSSGで事前に作られています。</p>
    </div>
  );
}
アクセスすると、事前に生成されたIDごとの商品ページが即座に表示されます。これにより、ユーザーは待ち時間なしでページを閲覧でき、サイト全体の体感速度が向上します。
先生と生徒の振り返り会話

生徒

「先生、SSGを使うとどうしてページが早くなるんですか?」

先生

「SSGではページを事前に作っておくので、アクセスしたときにサーバーでHTMLを生成する必要がありません。だから読み込みが速くなるんです。」

生徒

「固定のIDだけじゃなくて、APIから取得したデータでも事前生成できるんですね?」

先生

「そうです。generateStaticParamsでAPIからデータを取得してページを生成すれば、商品の一覧やブログ記事などもSSGで高速表示できます。」

生徒

「動的ルーティングと組み合わせると、さらに便利そうですね。」

先生

「はい、[id][slug]のようなパラメータを使うことで、任意のページを事前に生成できます。これで、規模が大きくても高速なサイト構築が可能になります。」

生徒

「なるほど。まずは固定配列でSSGを理解して、そのあとAPIや動的ルーティングに挑戦すれば良さそうです。」

先生

「その通りです。段階を踏んで学べば、Next.jsのSSGは初心者でもしっかり理解できます。」

カテゴリの一覧へ
新着記事
New1
React
Reactでフォーカスイベントを制御する方法!onFocusとonBlurを初心者向けに解説
New2
Next.js
Next.js Pages RouterでのSSG(getStaticProps)完全解説!初心者でもわかる静的サイト生成の仕組み
New3
Next.js
Next.js App RouterでSSGを完全理解!初心者でもわかるgenerateStaticParamsの使い方
New4
React
React Hooksとは?クラスコンポーネントから進化した仕組みをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
React
Reactの子コンポーネントから親コンポーネントへデータを渡す方法を徹底解説!初心者にもわかるReactのイベントとデータの流れ
No.2
Java&Spring記事人気No2
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.3
Java&Spring記事人気No3
React
React開発におすすめのVSCode拡張機能まとめ!初心者でもすぐ使える便利ツール紹介
No.4
Java&Spring記事人気No4
React
ReactのContext APIとReduxの違いを初心者向けに徹底比較!どちらを使うべきか完全解説
No.5
Java&Spring記事人気No5
React
React(TypeScript)で学ぶStateの型推論と型指定の違い!型安全なState管理を初心者向けにやさしく解説
No.6
Java&Spring記事人気No6
React
ReactのState管理ベストプラクティス!初心者でもわかる再レンダリング最適化の考え方
No.7
Java&Spring記事人気No7
React
Reactで複数のContextを組み合わせる方法を完全解説!初心者でもわかるContext APIの応用
No.8
Java&Spring記事人気No8
React
ReactのPresentational Componentを完全ガイド!初心者でもわかるStateを持たないコンポーネントの特徴