5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

SSR、CSR、SSG。

Webフロントエンドを触っていると、よく目にする言葉です。

なんとなく、

  • SSRはサーバーで描画する
  • CSRはブラウザで描画する
  • SSGは静的なページを作る

くらいのイメージはあります。

しかし、いざ画面を作ろうとすると、

  • どれが速いのか
  • SEOにはどれがよいのか
  • どんなページに採用すべきなのか

を答えることができますか?

私は怪しかった。

だから、調べてまとめてみました。

先に結論を言います。「このサイトはSSRか、CSRか」で考えるのをやめると、大半の判断はつきます。 考える単位は、サイトでもページでもなく、データです。

この記事は、その結論にたどり着くまでを3部構成で進めます。

  1. 仕組み — 各方式がHTMLをいつ・どこで作るのか
  2. 実務の問い — 速度・SEOはどこで決まるのか
  3. 結論 — なぜ「データ単位」で考えると整理できるのか

第1部 仕組み:いつ・どこでHTMLを作るのか

1. 全体像

4方式の違いは、主にHTMLを生成する場所とタイミングにあります。

方式 HTMLを作る場所 作るタイミング
SSG ビルド環境 ビルド時
SSR サーバー リクエスト時
CSR ブラウザ JavaScript実行時
ISR サーバー ビルド時+再生成時

各方式の最後に「これはデータをいつ・どこで取得しているか」を一言添えておきます。第3部の伏線です。

2. SSG:ビルド時にHTMLを作る

SSGは、アプリケーションをビルドするときにHTMLを生成する方式です。

ユーザーがアクセスする時点では、すでにHTMLが完成しています。

向いているページ: ブログ、ドキュメント、LP、コーポレートサイトなど更新頻度の低いコンテンツ。

特徴: CDN配信しやすく表示が速い。サーバー負荷が小さい。一方、データ更新には再ビルドが必要。

データの取得タイミング: ビルド時に一度だけ。全ユーザーに同じHTMLを返す。

3. SSR:リクエスト時にHTMLを作る

SSRは、アクセスされるたびにサーバーでHTMLを生成する方式です。

SSGが「作り置き」なら、SSRはリクエストを受けてから生成します。

向いているページ: 検索結果、ユーザーごとに表示が異なるページ、CookieやHeaderに応じて変化するページ。

特徴: リクエスト時点のデータを表示でき、ユーザーごとにHTMLを変えられる。一方、リクエストごとにサーバー処理が走り、データ取得が遅いと返却も遅れる。

データの取得タイミング: リクエストごとにサーバーで。ユーザーや時点で内容を変えられる。

4. CSR:ブラウザで画面を作る

CSRは、ブラウザ上でJavaScriptを実行し、APIからデータを取得して画面を生成する方式です。

最初に届くHTMLには、コンテンツがほとんど含まれていない場合があります。

向いているページ: 管理画面、ダッシュボード、チャット、Webエディタなど、操作が主目的の画面。インタラクティブ性のために積極的に選ぶ方式であって、消去法の選択肢ではありません。

特徴: インタラクティブなUIやスムーズなページ遷移を作りやすい。一方、JavaScript実行までコンテンツが表示されず、初回表示時に通信が複数回発生しやすい。

データの取得タイミング: 表示後にブラウザから。操作に応じて何度でも取り直せる。

5. ISR:静的HTMLを後から更新する

ISRは、SSGで生成したHTMLを、一定時間や指定した条件で再生成する方式です。

静的配信の速さを維持しつつ、再ビルドなしで更新できます。

向いているページ: 商品詳細、求人詳細、店舗情報、ニュース記事など、数分程度の更新遅延を許容できるページ。

特徴: SSGの速さを保ちつつ更新できる。一方、再生成までは一時的に古い情報が表示されうる。

データの取得タイミング: ビルド時 + 条件付きで再取得。SSGとSSRの中間。

第2部 実務でつまずく2つの問い

各方式を並べただけでは、冒頭の「速いのは?SEOは?」には答えられません。ここで回収します。

6. どの方式が速いのか

「SSGが速く、CSRが遅い」と単純には決められません。重要なのは、ユーザーが何を待つかです。

  • SSG・ISR: 完成済みHTMLを返せるので初回表示を速くしやすい。
  • SSR: HTMLは完成状態で返るが、サーバーのデータ取得と生成を待つ。
  • CSR: HTML受信後にJavaScript実行とAPI通信が続く。

速さは方式の優劣ではなく、「待つ場所」がどこにあるかで決まります。

7. SEOでは何が違うのか

SSG・SSR・ISRは最初に返すHTMLに本文が含まれます。CSRは、JavaScript実行前のHTMLに十分なコンテンツが含まれないことがあります。

ただし「CSRならSEOできない」わけではありません。検索エンジンがJavaScriptを実行する場合もあります。とはいえCSRでは、初期HTML・表示速度・OGP・クローラーの実行コストなど、考慮事項が増えます。

8. Hydrationとは何か

SSRやSSGで生成されたHTMLは、表示されただけではReactのイベント処理が動かないことがあります。ブラウザでJavaScriptを読み込み、HTMLにイベント処理を接続する必要があります。

この処理を Hydration と呼びます。Hydrationは、SSR・CSR・SSGと同列のレンダリング方式ではなく、サーバー生成HTMLを「動く状態」にするための補完ステップです。

第3部 結論:データ単位で考える

ここまでの道具立てを、ひとつの軸で束ねます。

9. 同じ商品ページで比較する

商品詳細ページを例に、方式ごとの違いを見ます。

同じページでも、価格変更が反映されるタイミングは方式で変わります。

方式 価格変更が反映されるタイミング
SSG 次回ビルド後
SSR 次のリクエスト時
CSR 次のAPI取得時
ISR 次の再生成後

ここで気づきます。「商品ページに最適な方式」は一つに決まりません。ページの中に、性質の違うデータが同居しているからです。

10. ページ単位で使い分ける

まず、サイト全体を一つの方式で統一する必要はありません。ECサイトなら、ページごとに分けられます。

ここまでで粒度は「サイト → ページ」に下がりました。もう一段下げます。

11. データ単位で使い分ける

現代のNext.jsなどでは、ページ全体を一つの方式で固定しない構成が一般的です。商品詳細ページは、こう分割できます。

ここが着地点です。

「このサイトはSSRか、CSRか」ではなく、
「このデータを、いつ、どこで取得するか」

商品名はめったに変わらないからビルド時。価格・在庫はアクセス時点の値が要るからリクエスト時。お気に入りはユーザー操作で変わるからブラウザ。データの性質が、取得タイミングを決め、取得タイミングが方式を決めます。

第1部で各方式に添えた「データの取得タイミング」が、ここで効いてきます。方式を覚えるのではなく、データを見れば方式は逆算できる、というのがこの記事の主張です。

まとめ

4方式の違いは、HTMLを作る場所とタイミングにあります。

方式 一言で表すと
SSG ビルド時に作り置きする
SSR リクエストごとにサーバーで作る
CSR ブラウザで作る
ISR 作り置きしたHTMLを後から更新する

選定は、データの性質から逆算します。

どの方式が最も優れているかではなく、データの性質に合っているか。それが判断の軸です。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?