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

Next.jsのCSRとSSGの違いを初心者向けにわかりやすく解説!Next.jsで最適な表示方法を選ぶ方法

Next.js CSRとSSGの違いをわかりやすく整理
Next.js CSRとSSGの違いをわかりやすく整理

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

生徒

「先生、Next.jsっていろんな表示方法があるみたいですが、CSRとSSGって何が違うんですか?」

先生

「CSRはClient Side Rendering、SSGはStatic Site Generationのことです。簡単に言うと、どこでページを作るかの違いです。」

生徒

「ページを作る場所ってどういう意味ですか?」

先生

「CSRはユーザーのブラウザでページを作る方式、SSGはサーバーやビルド時にあらかじめページを作っておく方式です。これを理解すると、どんな場合にどちらを使うか決めやすくなります。」

1. CSR(Client Side Rendering)とは?

1. CSR(Client Side Rendering)とは?
1. CSR(Client Side Rendering)とは?

CSRはブラウザ側でページを作成する方法です。ユーザーがWebサイトにアクセスすると、まず空のHTMLが読み込まれ、その後JavaScriptが動いて画面の内容を表示します。

例えるなら、注文してから料理を作るレストランのようなイメージです。アクセスして初めてページの内容が組み立てられます。


import React, { useEffect, useState } from "react";

function CSRExample() {
  const [data, setData] = useState("");

  useEffect(() => {
    setTimeout(() => {
      setData("これはCSRで表示されたデータです");
    }, 1000);
  }, []);

  return <div>{data || "読み込み中..."}</div>;
}

export default CSRExample;
(画面に最初は「読み込み中...」と表示され、1秒後に「これはCSRで表示されたデータです」と変わります)

2. SSG(Static Site Generation)とは?

2. SSG(Static Site Generation)とは?
2. SSG(Static Site Generation)とは?

SSGはあらかじめビルド時にページを生成しておく方式です。ユーザーがアクセスしたときには、すでに完成したHTMLが返されるので表示が早いです。

例えるなら、前もって料理を作っておいてテーブルに置いてあるレストランです。注文後すぐに食べられます。


import React from "react";

export async function getStaticProps() {
  return {
    props: {
      message: "これはSSGで生成されたデータです"
    }
  };
}

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

export default SSGExample;
(画面にアクセスするとすぐ「これはSSGで生成されたデータです」と表示されます)

3. CSRとSSGの読み込み速度の違い

3. CSRとSSGの読み込み速度の違い
3. CSRとSSGの読み込み速度の違い

CSRは初回ロード時にJavaScriptを実行してページを作るので、初めてのアクセスは少し遅くなります。一方でSSGはあらかじめ作ってあるHTMLを返すので、初回ロードから高速に表示されます。

動的なデータが多い場合はCSR、静的な情報が多いサイトはSSGに向いています。


function SpeedTest({ isCSR }) {
  return (
    <div>
      {isCSR 
        ? "CSR:ブラウザでレンダリングされるので初回表示に時間がかかる場合があります"
        : "SSG:事前に生成されるので初回表示が速いです"}
    </div>
  );
}

export default SpeedTest;

4. SEO(検索エンジン対策)への影響

4. SEO(検索エンジン対策)への影響
4. SEO(検索エンジン対策)への影響

CSRはページの内容がブラウザで生成されるため、検索エンジンがすぐに内容を取得できないことがあります。SSGはHTMLが最初からあるため、検索エンジンに内容が伝わりやすくSEOに有利です。

例えばブログやコーポレートサイトなど、検索で見つけてもらいたいページはSSGが向いています。


function SEOExample({ isSSG }) {
  return (
    <div>
      {isSSG 
        ? "SSGで生成されたページはSEOに有利です"
        : "CSRのページはSEOで不利になる場合があります"}
    </div>
  );
}

export default SEOExample;

5. データの更新タイミング

5. データの更新タイミング
5. データの更新タイミング

CSRはユーザーがアクセスしたときに常に最新のデータを取得できます。SSGはビルド時に生成されるので、データを更新するには再ビルドやISR(Incremental Static Regeneration)が必要です。

例えばニュースサイトでは、常に最新情報を表示したいならCSRやISRを使うことがあります。


import React, { useEffect, useState } from "react";

function UpdateExample() {
  const [time, setTime] = useState("");

  useEffect(() => {
    setTime(new Date().toLocaleTimeString());
  }, []);

  return <div>現在の時刻(CSR更新):{time}</div>;
}

export default UpdateExample;
(アクセス時に現在の時刻が表示され、常に最新の状態になります)

6. CSRとSSGの選び方

6. CSRとSSGの選び方
6. CSRとSSGの選び方

CSRとSSGの選び方は、サイトの用途によって変わります。リアルタイムで更新する必要があるページやユーザーごとに変わるページはCSRが向いています。更新頻度が低く、表示速度やSEOを重視する場合はSSGが向いています。

Next.jsでは両方の方法を組み合わせることもできるので、ページごとに適切な方式を選ぶのがポイントです。


import React from "react";

function ChoiceExample({ useCSR }) {
  return (
    <div>
      {useCSR
        ? "このページはCSRでレンダリングされます"
        : "このページはSSGで事前生成されます"}
    </div>
  );
}

export default ChoiceExample;

7. Next.jsでCSRとSSGを組み合わせる

7. Next.jsでCSRとSSGを組み合わせる
7. Next.jsでCSRとSSGを組み合わせる

Next.jsでは、トップページはSSGで高速表示、ユーザーのダッシュボードはCSRで動的に生成、といった使い方も可能です。これにより、速度と柔軟性の両立ができます。


import React, { useState, useEffect } from "react";

function MixedPage({ staticMessage }) {
  const [dynamicMessage, setDynamicMessage] = useState("");

  useEffect(() => {
    setDynamicMessage("CSRで表示された動的メッセージです");
  }, []);

  return (
    <div>
      <p>{staticMessage}</p>
      <p>{dynamicMessage}</p>
    </div>
  );
}

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

export default MixedPage;
(画面には「SSGで生成された静的メッセージです」がすぐに表示され、その下に「CSRで表示された動的メッセージです」が遅れて表示されます)

まとめ

まとめ
まとめ

本記事ではNext.jsにおけるCSR(Client Side Rendering)とSSG(Static Site Generation)の違いについて、初心者向けにわかりやすく解説しました。CSRはブラウザ側でページを生成する方式で、ユーザーの操作や動的データの取得に柔軟に対応できますが、初回表示の速度はSSGに比べて遅くなることがあります。一方、SSGはビルド時にページを生成する方式で、アクセス時には完成したHTMLが返るため高速に表示され、検索エンジンへのインデックスもスムーズです。ブログやコーポレートサイト、商品紹介ページなど、検索からの集客を重視するサイトではSSGが特に有効です。

また、CSRとSSGは表示速度、SEO、データ更新タイミングなどの観点で使い分けが重要です。動的データやユーザーごとに表示が変わるページはCSRが適しており、静的なコンテンツや更新頻度が少ないページはSSGで事前生成する方がメリットがあります。Next.jsではISR(Incremental Static Regeneration)や両方式の組み合わせも可能で、トップページはSSG、ユーザー専用ダッシュボードはCSRといった柔軟な実装が可能です。

さらに、Reactのコンポーネント内でのデータ取得や表示方法に応じてCSRとSSGを選択することで、ユーザー体験を向上させつつ、SEO対策を考慮したサイト構築が可能です。例えばCSRではuseEffectフックを使ってデータ取得を行い、表示を動的に変化させることができます。SSGではgetStaticPropsを用いてビルド時に静的データを取得し、アクセス時にはすぐに表示される仕組みを作れます。

CSRの例


import React, { useEffect, useState } from "react";

function CSRExample() {
  const [data, setData] = useState("");

  useEffect(() => {
    setTimeout(() => {
      setData("これはCSRで表示されたデータです");
    }, 1000);
  }, []);

  return <div>{data || "読み込み中..."}</div>;
}

export default CSRExample;
(画面に最初は「読み込み中...」と表示され、1秒後に「これはCSRで表示されたデータです」と変わります)

SSGの例


import React from "react";

export async function getStaticProps() {
  return {
    props: {
      message: "これはSSGで生成されたデータです"
    }
  };
}

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

export default SSGExample;
(画面にアクセスするとすぐ「これはSSGで生成されたデータです」と表示されます)

CSRとSSGの選び方

実際にNext.jsでサイトを構築する際は、ページの性質や目的に応じてCSRとSSGを選択することが大切です。ユーザーの行動に応じてリアルタイムで更新したい情報はCSR、表示速度やSEO重視であらかじめ内容が固定されるページはSSGといったように使い分けることで、ユーザー体験を最適化できます。また、両方式を組み合わせることで、トップページはSSGで高速表示、ユーザーの個別ページはCSRで動的生成するなど、効率的で柔軟なサイト運営が可能です。


import React, { useState, useEffect } from "react";

function MixedPage({ staticMessage }) {
  const [dynamicMessage, setDynamicMessage] = useState("");

  useEffect(() => {
    setDynamicMessage("CSRで表示された動的メッセージです");
  }, []);

  return (
    <div>
      <p>{staticMessage}</p>
      <p>{dynamicMessage}</p>
    </div>
  );
}

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

export default MixedPage;
(画面には「SSGで生成された静的メッセージです」がすぐに表示され、その下に「CSRで表示された動的メッセージです」が遅れて表示されます)
先生と生徒の振り返り会話

生徒

「先生、CSRとSSGの違いがだんだんわかってきました。速度やSEOに違いがあるんですね」

先生

「そうです。CSRはユーザーのブラウザでレンダリングするので初回表示は少し遅くなることがありますが、動的な情報には適しています。SSGはあらかじめページを生成しているので高速表示でSEOにも有利です」

生徒

「なるほど。更新頻度やページの内容によって使い分けるんですね」

先生

「その通りです。さらにNext.jsではISRやCSRとSSGの組み合わせも可能なので、ページごとに最適な方式を選ぶことができます」

生徒

「実際にReactでCSRやSSGを試してみると理解が深まりそうですね」

先生

「はい。コードを書いて画面に表示される動きや更新タイミングを確認することで、より実践的にNext.jsの特性を学べます」

カテゴリの一覧へ
新着記事
New1
React
ReactのuseEffect依存配列を徹底解説!初心者でも理解できるDependency Arrayの仕組み
New2
React
React Hooksを使う上でのルール徹底解説!初心者でもわかるHooksの正しい使い方
New3
React
React Context APIのデバッグ方法を完全解説!React DevToolsで中身を丸見えにする方法
New4
React
Reactのイベント処理を完全ガイド!初心者でもわかるonClickの使い方とボタンの操作方法
人気記事
No.1
Java&Spring記事人気No1
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.2
Java&Spring記事人気No2
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.3
Java&Spring記事人気No3
React
Reactの学習ロードマップ!初心者が最短で習得する流れを完全ガイド
No.4
Java&Spring記事人気No4
React
React Context APIの値を更新する方法!useStateと組み合わせてデータを動かす初心者ガイド
No.5
Java&Spring記事人気No5
React
React Context APIのパフォーマンス最適化を徹底解説!useMemoで無駄な描画を防ぐ方法
No.6
Java&Spring記事人気No6
Next.js
Next.js CSRとは?クライアント側で描画する仕組みを初心者でもわかるように解説
No.7
Java&Spring記事人気No7
Next.js
Next.js ISR(Incremental Static Regeneration)を初心者でもわかるように徹底解説!SSGを強化する最新技術
No.8
Java&Spring記事人気No8
React
React Context APIの分割方法を解説!パフォーマンスを高めるベストプラクティス