第1章から読む →

トップ / 第4章

CHAPTER 04 RENDERING

画面はどこで作られるか

本教材でいちばん大切な章です。サーバーとブラウザの役割分担を、レストランの厨房と客席にたとえて整理します。

読む目安 20分確認問題 3問

この章でわかること

  • SSG・SSR・CSRの違いと使い分け
  • サーバーコンポーネントと "use client" の意味
  • キャッシュ(作り置きの再利用)の考え方

1. 「画面を作る」とはどういうことか

第1章で、ブラウザ(客席)がサーバー(厨房)からHTMLを受け取って表示する、という流れを見ました。では、そのHTMLはいつ、どこで作られるのでしょうか。

部品(コンポーネント)とデータを組み合わせて、最終的なHTMLを作り上げることをレンダリングと呼びます。料理でいえば「調理」です。Next.jsの大きな特徴は、この調理をどこで・いつ行うかを、ページや部品ごとに選べることにあります。

この章は少し長めですが、ここが分かると、開発者の説明やAIの回答が一気に理解しやすくなります。

2. 3つの調理方法:CSR・SSR・SSG

CSR(クライアントサイド・レンダリング):客席で調理する

サーバーは、ほぼ空っぽのHTMLと「調理手順書」(JavaScript)だけを送り、ブラウザの中で画面を組み立てる方法です。Reactだけで作ったサイトは基本的にこの方式です。

  • 良い点:一度表示されれば、画面の切り替えがなめらか。
  • 弱い点:最初の表示まで時間がかかり、その間は真っ白になりがち。検索エンジンに中身が伝わりにくい。

SSR(サーバーサイド・レンダリング):注文ごとに厨房で調理する

アクセスがあるたびに、サーバーで最新のデータを使ってHTMLを作り、完成品を送る方法です。

  • 良い点:いつでも最新の内容。届いた時点で中身があるので、表示が速く検索にも強い。
  • 弱い点:アクセスのたびに調理するため、サーバーの負担が増える。

SSG(静的サイト生成):作り置きしておく

公開前の準備(ビルド)のときに、あらかじめHTMLを作り置きしておき、アクセスがあればそれを出すだけの方法です。

  • 良い点:最も速く、サーバーの負担も最小。
  • 弱い点:内容を変えるには作り直しが必要。

さらに、作り置きを「60秒ごと」「記事が更新されたとき」などに自動で作り直すこともできます。これはISR(インクリメンタル静的再生成)や再検証(revalidate)と呼ばれ、作り置きの速さと内容の新しさを両立させる方法です。

方式いつ・どこで作るレストランでいうと向いているページ
SSG公開前に、サーバーで作り置きの弁当会社概要、利用規約、ブログ記事
ISR作り置きを定期的に作り直す一定時間ごとに入れ替える惣菜お知らせ一覧、商品一覧
SSRアクセスのたびに、サーバーで注文を受けてから調理マイページ、検索結果、在庫表示
CSRブラウザの中で材料を渡して客席で調理ログイン後の操作画面の一部

ポイント

Next.jsでは、1つのサイトの中でこれらを混ぜて使えます。会社概要は作り置き(SSG)、マイページは注文ごと(SSR)、というように、ページの性質に合った方法を選べるのが強みです。多くの場合、Next.jsが自動的に判断してくれます。

3. サーバーコンポーネントとクライアントコンポーネント

App Routerでは、ページ単位だけでなく部品単位でも「どこで動かすか」を分けます。

サーバーコンポーネント 厨房で動く(何も書かなければこちら) ・データベースから情報を取り出す ・APIキーなど秘密の情報を使う ・記事本文や一覧表を表示する ・ブラウザに送る量が少なく軽い クライアントコンポーネント 客席でも動く("use client" と書く) ・ボタンのクリックに反応する ・入力中の文字をチェックする ・開閉するメニュー、タブ切り替え ・state(第3章)を使う部品
何も書かなければサーバーで動く部品になり、動きが必要な部品にだけ "use client" を付けます。

App Routerでは、部品は何も書かなければサーバーコンポーネントになります。サーバーで動くので、データベースに直接つないだり、秘密の情報を安全に扱えたりします。また、部品のプログラム自体はブラウザに送られないため、ページが軽くなります。

一方、クリックや入力に反応する部品は、ブラウザの中で動く必要があります。そういう部品のファイルの先頭には、次の1行を書きます。

"use client";

// この下に、ボタンや入力欄など「動きのある部品」を書く

「この部品は客席(ブラウザ)でも動かします」という宣言です。

よくある誤解

"use client" を付けた部品も、最初の表示はサーバーで作られてから届きます。そのうえで、ブラウザに届いてから「動き」が加わります。また、何でもかんでも "use client" にすると、ブラウザに送るプログラムが増えて重くなり、サーバーで扱うべき秘密の情報を誤って送ってしまう危険もあります。動きが必要な最小限の部品だけに付けるのが基本です。

ハイドレーション:届いた画面に「命を吹き込む」

サーバーで作られたHTMLは、見た目は完成していますが、まだボタンを押しても反応しません。そこへJavaScriptが届き、ボタンなどに動きを結び付ける作業をハイドレーション(水分を与える、の意味)と呼びます。乾燥食品にお湯を注いで食べられる状態にするイメージです。エラーメッセージで「Hydration」という言葉を見かけたら、「サーバーで作った画面と、ブラウザで作った画面が食い違った」という意味であることが多いです。

4. キャッシュ:作ったものを取っておく

一度作ったものや取り出したデータを保存しておき、次から再利用する仕組みをキャッシュと呼びます。同じ料理を何度も一から作らず、作り置きを出すことで速くなります。

ただし、キャッシュには「古い内容が表示され続ける」という落とし穴もあります。「データを更新したのに画面が変わらない」というトラブルの多くは、キャッシュが原因です。

Next.jsのキャッシュの扱いは、バージョンによって考え方が変わってきました。現在は、基本的には毎回新しく作り、作り置きしたい部分を開発者が明示する方針です。16系では、作り置きしたい部品や処理に "use cache" という印を付ける方式が導入されています。

非エンジニアとして押さえること

「更新が反映されない」と感じたら、まず「キャッシュ(作り置き)が残っていないか」を開発者やAIに確認してもらいましょう。また、要件を伝えるときに「このページは何分くらい古くても困らないか」を伝えると、適切な作り方を選んでもらいやすくなります。

5. 少しずつ届ける:ストリーミング

ページの一部だけデータの取得に時間がかかる場合、Next.jsは準備できた部分から先に表示し、遅い部分は後から差し込むことができます。これをストリーミングと呼びます。

コース料理で、前菜から順に運ばれてくるイメージです。メインディッシュ(遅いデータ)を待つ間も、お客さんは前菜を食べ始められます。第2章で見た loading.tsx は、遅い部分の場所に「準備中」の表示を出すための仕組みでした。

この章のまとめ

  • 画面を作ることをレンダリングと呼ぶ。SSG(作り置き)、ISR(定期的に作り直し)、SSR(注文ごと)、CSR(客席で調理)を、ページごとに使い分けられる。
  • 部品は基本的にサーバーで動く(サーバーコンポーネント)。クリックなどの動きが必要な部品にだけ "use client" を付ける。
  • キャッシュは作り置きの再利用。「更新が反映されない」ときはまずキャッシュを疑う。

確認問題

選択肢を1つ選んで「答え合わせをする」を押すと、正誤と解説が表示されます。何度でも選び直せます。