⚛️ React Boundary
思想 — 境界整理

Reactはどこで終わるのか?

React・フレームワーク(Next.js)・サーバー・ビルドツール。それぞれの責任境界を地図として整理します。

🗺️ 全体像:4つのレイヤー

責任境界マップ
🏗️ ビルドツール層 Vite / webpack / esbuild

JSX変換 / モジュールバンドル / 最適化 / Tree shaking / コード分割

↓ バンドルされたJSを実行する
🌐 フレームワーク層 Next.js / Remix / Astro

ルーティング / SSR・SSG / データフェッチ規約 / キャッシュ / Server Actions / ミドルウェア

↓ UIのレンダリングをReactに委譲
⚛️ React層 react + react-dom

コンポーネントのレンダリング / state管理 / 再レンダリング / Reconciliation / Hooks / Suspense

↓ 差分をDOMに反映
🖥️ ブラウザ層 DOM / CSS / JavaScript Engine

DOM操作 / 描画(レイアウト・ペイント) / イベント処理 / Web APIs

⚛️ Reactが担当する範囲

Reactの責任は明確です。「stateをDOMと同期する」こと、それだけです。

コンポーネントのレンダリング

JSX → React要素 → Fiberツリー

Reconciliation

前回のツリーとの差分計算(diffアルゴリズム)

DOMへの反映

commit phaseで最小限のDOM操作

Hooks

state管理・副作用・コンテキストのAPI提供

Suspense

データ待機中のローディングUI表示制御

エラーバウンダリ

レンダリングエラーのキャッチ・フォールバック表示

🌐 フレームワークが担当する範囲

Next.jsなどのフレームワークはReactを使いながら、Reactが担当しない領域を提供します。

Next.jsの場合

ルーティング ファイルシステムベースのルーティング。URLとコンポーネントのマッピング。
SSR / SSG サーバーでReactをレンダリングしてHTMLを生成。Reactは「サーバーでも動くレンダリングエンジン」として使われる。
キャッシュ フェッチキャッシュ・フルルートキャッシュ・クライアントキャッシュ。Reactの責任外。
Server Actions サーバー関数の呼び出し規約。Reactのuse serverディレクティブはReact側だが、通信の実装はフレームワーク側。

Server Componentsはどちらの責任?

React Server Components(RSC)のコンセプト・APIはReact自身が定義します(use server/use clientディレクティブ)。 しかし実際のHTTPリクエスト・レスポンスの処理、バンドル方法、デプロイ環境などはフレームワーク(Next.js等)の責任です。

🏗️ ビルドツールが担当する範囲

ビルドツールはReactとは完全に独立した層です。 Reactの実行前に動く「変換・最適化パイプライン」です。

JSX変換 <div>React.createElement('div') への変換(ビルド時)
バンドル 多数のモジュールを1つ(または複数)のJSファイルに結合
Tree Shaking 使われていないコードを削除してバンドルサイズを削減
コード分割 ページごとにJSを分割して初期読み込みを高速化

💡 「Reactの外」を意識した設計

Reactの責任範囲を理解していると、「これはReactで解決すべきか、フレームワークで解決すべきか」の判断ができます。

Q: ユーザーの認証情報をどう保持するか?

→ Reactの外(サーバー・クッキー・JWT)

Q: ページ間のデータ共有をどうするか?

→ URLやサーバーキャッシュ(フレームワーク) or Reactのstate

Q: ボタンをクリックしたらUIを変えたい

→ React(state更新)

Q: APIからデータを取得したい

→ Reactの外(SWR・React Query・Server Components)

Q: 複数コンポーネントで状態を共有したい

→ Reactのcontext or 外部状態管理(Zustand等)

📌 まとめ

  • ✓ React:「stateをDOMと同期する」——それだけ
  • ✓ フレームワーク:ルーティング・SSR・キャッシュ・データフェッチ規約
  • ✓ ビルドツール:JSX変換・バンドル・最適化(Reactとは独立した層)
  • ✓ Server Componentsのコンセプトはreact、実装はフレームワーク
  • ✓ 「どのレイヤーの問題か」を特定することで、適切な解決策を選べる

関連記事