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

Next.js Pages RouterでのSSG(getStaticProps)完全解説!初心者でもわかる静的サイト生成の仕組み

Next.js Pages RouterでのSSG(getStaticProps)
Next.js Pages RouterでのSSG(getStaticProps)

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

生徒

「先生、Next.jsで作ったページを事前に準備しておける方法ってありますか?」

先生

「はい、それがSSG(Static Site Generation)です。Next.jsではPages Routerを使うと簡単に設定できます。」

生徒

「具体的にはどうやって設定するんですか?」

先生

「getStaticPropsという関数をページファイルに書くだけです。では順番に説明しましょう。」

1. SSGとは何か?

1. SSGとは何か?
1. SSGとは何か?

SSGとは、Static Site Generationの略で、ページを事前に生成しておく仕組みです。ウェブサイトを訪れる前にHTMLファイルを作成しておくので、ページ表示が非常に速くなります。例えば、パン屋さんのメニューを紙に印刷しておくようなイメージです。ページ訪問者が来るたびに作るのではなく、あらかじめ準備されたHTMLを渡すので速度と安定性が向上します。

2. Pages RouterでSSGを使う準備

2. Pages RouterでSSGを使う準備
2. Pages RouterでSSGを使う準備

Next.jsでは、Pages Routerを使うときにSSGを設定するには、ページコンポーネントの隣にgetStaticPropsという関数を作ります。この関数はビルド時に一度だけ実行され、ページに必要なデータを取得してHTMLを生成します。


export async function getStaticProps() {
  return {
    props: {
      message: "これは静的に生成されたメッセージです"
    }
  };
}

function HomePage({ message }) {
  return (
    <div>
      <h1>{message}</h1>
    </div>
  );
}

export default HomePage;
(ページを開くと「これは静的に生成されたメッセージです」と表示されます)

3. getStaticPropsの基本的な使い方

3. getStaticPropsの基本的な使い方
3. getStaticPropsの基本的な使い方

getStaticPropsでは、APIやデータベースから情報を取得してページに渡すこともできます。返すオブジェクトは必ずpropsというキーを持たせます。


export async function getStaticProps() {
  const data = { title: "Next.jsでSSGを学ぶ", date: "2026-02-11" };

  return {
    props: {
      article: data
    }
  };
}

function ArticlePage({ article }) {
  return (
    <div>
      <h2>{article.title}</h2>
      <p>作成日: {article.date}</p>
    </div>
  );
}

export default ArticlePage;
(ページを開くと「Next.jsでSSGを学ぶ」と「作成日: 2026-02-11」が表示されます)

4. 複数のページを静的生成する場合

4. 複数のページを静的生成する場合
4. 複数のページを静的生成する場合

ブログなど複数ページを事前に生成したい場合、getStaticPathsと組み合わせて使います。getStaticPathsで作成するページのパスを指定し、getStaticPropsで各ページのデータを取得します。


export async function getStaticPaths() {
  return {
    paths: [
      { params: { id: "1" } },
      { params: { id: "2" } }
    ],
    fallback: false
  };
}

export async function getStaticProps({ params }) {
  return {
    props: {
      post: { id: params.id, title: `記事 ${params.id}` }
    }
  };
}

function PostPage({ post }) {
  return (
    <div>
      <h2>{post.title}</h2>
    </div>
  );
}

export default PostPage;
(/posts/1、/posts/2 のページがビルド時に生成されます)

5. SSGのメリットと注意点

5. SSGのメリットと注意点
5. SSGのメリットと注意点

SSGのメリットはページ表示速度の高速化とサーバー負荷の軽減です。訪問者が増えてもHTMLはすでに用意されているので安定して配信できます。一方、データが頻繁に更新される場合は再ビルドが必要になる点が注意です。頻繁に変わるデータはISR(Incremental Static Regeneration)やSSR(Server Side Rendering)が向いています。

6. 画像やコンポーネントも静的生成できる

6. 画像やコンポーネントも静的生成できる
6. 画像やコンポーネントも静的生成できる

SSGはテキストだけでなく、Next.jsのImageコンポーネントやカスタムコンポーネントも静的に生成できます。例えば、トップページにおすすめ商品を表示するコンポーネントもビルド時にHTMLとして生成可能です。


import Image from "next/image";

export async function getStaticProps() {
  return {
    props: {
      product: { name: "コーヒー豆", imageUrl: "/coffee.jpg" }
    }
  };
}

function ProductPage({ product }) {
  return (
    <div>
      <h2>{product.name}</h2>
      <Image src={product.imageUrl} alt={product.name} width={300} height={300} />
    </div>
  );
}

export default ProductPage;
(ページを開くと「コーヒー豆」と画像が表示されます)

7. まとめのポイント

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

Next.jsのPages RouterでSSGを利用するには、ページコンポーネントにgetStaticPropsを書くことが基本です。必要に応じてgetStaticPathsと組み合わせると、複数ページの静的生成も可能です。SSGを使うことで、ウェブサイトの表示速度を高速化し、サーバーへの負荷も軽減できます。初心者の方でも、まずは簡単なテキスト表示から始めると理解しやすいでしょう。

まとめ

まとめ
まとめ

今回の記事では、Next.jsのPages Routerを利用したSSG(Static Site Generation)の仕組みと活用方法について詳しく解説しました。SSGはウェブページを事前に生成する方法で、訪問者がページを開いた際に即座に表示されるため、ユーザー体験の向上やサーバー負荷の軽減に非常に役立ちます。基本的な実装手順としては、ページコンポーネントの隣にgetStaticProps関数を作成し、ビルド時に必要なデータを取得してHTMLを生成する流れです。これにより、APIやデータベースから取得した情報も静的にページに組み込むことができます。また、複数ページの生成が必要な場合にはgetStaticPathsと組み合わせることで、動的なルーティングにも対応可能です。

SSGのメリットとしては、まずページ表示の高速化があります。事前にHTMLが生成されているため、ユーザーがアクセスした瞬間にページが表示され、離脱率の低下やSEOの改善にもつながります。また、サーバー負荷の軽減も大きな利点です。アクセスが集中してもサーバー側で動的にページを生成する必要がないため、安定してページを配信できます。ただし、データが頻繁に更新される場合には再ビルドが必要となるため、その点は注意が必要です。こうした場合には、ISR(Incremental Static Regeneration)やSSR(Server Side Rendering)を併用することが効果的です。

さらに、SSGはテキストだけでなく、Next.jsのImageコンポーネントやカスタムコンポーネントにも対応しています。ビルド時に静的HTMLとして生成されるため、画像や商品の一覧、複雑なUIコンポーネントも高速に表示できます。実際にReactのコードを活用することで、ユーザーインタラクションも静的生成されたページ上で問題なく動作させることが可能です。


import React, { useState } from "react";

export async function getStaticProps() {
  return {
    props: {
      greeting: "ようこそNext.jsの世界へ"
    }
  };
}

function WelcomePage({ greeting }) {
  const [message, setMessage] = useState(greeting);

  return (
    <div>
      <h1>{message}</h1>
      <button onClick={() => setMessage("ボタンを押してメッセージが変わりました")}>
        メッセージ変更
      </button>
    </div>
  );
}

export default WelcomePage;
(画面に「ようこそNext.jsの世界へ」と表示され、ボタンを押すと「ボタンを押してメッセージが変わりました」に変わります)

このように、SSGは初心者でも取り組みやすく、静的ページ生成の理解を深める上でも最適な手法です。まずは簡単なテキスト表示や画像表示から始め、慣れてきたらAPIや複数ページ生成にも挑戦してみると、Next.jsの強力な機能を効率的に活用できます。

先生と生徒の振り返り会話

生徒

「先生、SSGを使うとページがすごく速く表示される理由がよくわかりました。ビルド時にHTMLが作られるからなんですね」

先生

「その通りです。訪問者がアクセスした瞬間にページが表示されるので、ユーザー体験も良くなります。特にアクセスが集中するサイトでは非常に効果的です」

生徒

「でも、データが頻繁に変わる場合はどうしたらいいですか?」

先生

「その場合はISRやSSRを併用すると良いでしょう。必要な部分だけを再生成したり、サーバーで動的にページを生成することで対応できます」

生徒

「画像やコンポーネントも静的生成できるんですね。実際にコードを書いてみると理解が深まりそうです」

先生

「そうですね。まずはシンプルなテキスト表示から始めて、次に画像や複雑なコンポーネントに挑戦してみてください。静的生成の仕組みを体感することが理解への近道です」

カテゴリの一覧へ
新着記事
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を持たないコンポーネントの特徴