【リアクトサーバーコンポーネント】

React Server Components(RSC) とは?

公開:
💡 コンポーネントが「サーバー側のシェフ」として料理を完成させてから届ける
📌 このページのポイント
React Server Components の構成 サーバー Server Component DB直接アクセス / JSなし Server Component HTMLのみ生成 Client Component useState / イベント処理 ブラウザ HTML(JSなし) Server Componentの出力 HTML(JSなし) Server Componentの出力 JS バンドル送信 Client Componentのみ Server ComponentのJSはブラウザに届かない → バンドル削減
サーバーコンポーネントはHTMLのみ配信、クライアントコンポーネントだけJSが送られるイメージ
ひよこ ひよこ
ペンギン先生、React Server Componentsって普通のSSRと何が違うの?
ペンギン先生 ペンギン先生
従来のSSRサーバーHTMLを生成してブラウザに送るけど、その後ブラウザ側でReactを「ハイドレーション」する必要があってJSバンドルも全部送っていたんだ。RSCはコンポーネント自体がサーバーにしか存在しないから、そのコンポーネントJSブラウザに届かないんだよ。
ひよこ ひよこ
JSが届かないって、どういうこと?ボタンのクリックとかはどうするの?
ペンギン先生 ペンギン先生
インタラクティブな部分は「クライアントコンポーネント」として従来どおりブラウザで動かすんだ。RSCとクライアントコンポーネントを組み合わせて、「動かす必要がある部分だけ」JSを送る設計が可能になるんだよ。
ひよこ ひよこ
サーバーコンポーネントの利点は何があるの?
ペンギン先生 ペンギン先生
大きく3つあるよ。①バンドルサイズの削減、②DBや秘密のAPIキーサーバー内部で使えるのでセキュリティ向上、③データ取得とレンダリングサーバー1か所で完結するので通信の往復が減ることだね。
ひよこ ひよこ
じゃあ全部サーバーコンポーネントにすれば最強なんじゃないの?
ペンギン先生 ペンギン先生
サーバーコンポーネントには「useState」「useEffect」などのフックが使えないし、ブラウザイベントも扱えないんだ。動的なUIや状態が必要な部分はクライアントコンポーネントが必須だよ。「どこをサーバー、どこをクライアントにするか」という設計判断が重要になるんだね。
ひよこ ひよこ
Next.jsのApp Routerって全部RSCがデフォルトなんだって聞いたんだけど、それって難しくないの?
ペンギン先生 ペンギン先生
「use client」ディレクティブを追加した時点でクライアントコンポーネントになる仕組みで、デフォルトはサーバーコンポーネントだよ。考え方が従来と逆になるから最初は混乱しやすいんだけど、「インタラクション不要ならサーバーのまま」と覚えると整理しやすいね。RSCはフロントエンドバックエンドの境界を再定義している重要なパラダイムシフトだよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
React Server Components」って出てきたら「サーバーで動くReactJSブラウザに送らない」と思えればだいたいOK!
📖 おまけ:英語の意味
「React Server Components」 = リアクト サーバーコンポーネント
💬 Reactチームが2020年に発表し、2023年のNext.js App Routerで実用化された比較的新しい概念だよ。「サーバー」と「コンポーネント」を組み合わせた名前のとおり、サーバーで実行されるReactコンポーネントのことだよ
← 用語集にもどる