Skip to main content

Reactとは

React は Meta(旧 Facebook)が開発・維持するユーザーインターフェース構築のための JavaScript ライブラリです。宣言的な UI 記述と コンポーネントベースのアーキテクチャが特徴で、小規模なウィジェットからフル SPA まで幅広く活用されています。 Reactの核心は仮想 DOM を介した効率的な再レンダリングです。状態(state)が変化すると、React は差分だけを DOM に反映するため、手動で DOM を操作する必要がありません。
このページで解説するのは React 19 と Inertia v3 の組み合わせです。Laravel 13 のスターターキットはこの構成をデフォルトで使用します。

JSX と TSX

React コンポーネントは JSX(JavaScript XML)という構文で書きます。HTML に似た記法を JavaScript の中に直接書けます。
スターターキットでは TypeScript.tsx)が標準採用されています。型定義により IDE の補完が強化され、バグを早期に発見できます。
Laravel の React スターターキットは TypeScript + TSX が標準です。本ページの例もすべて TSX で記述します。

Laravel でのポジション

歴史

React と Laravel の関係は Vue よりやや浅めですが、現在では同等以上の扱いになっています。 Laravel 6(2019年) で認証スキャフォールドが laravel/ui パッケージとして切り離され、Vue と同時に React 版スキャフォールドも提供されました。ただし当時は Vue が主流で React 版の存在感は薄い状況でした。 Laravel Breeze(2021年) に Inertia + React スタックが追加されたことで本格的な採用が始まり、Laravel 12(2025年) のスターターキット刷新で React が Vue と完全に同列(むしろ最初に表示される)扱いになりました。

現在の主流スタイル:Inertia × React

現在の Laravel における React の使い方の中心は Inertia × React です。Inertia は API を設計せずに Laravel のコントローラーから直接 React コンポーネントにデータを渡せる「モダンモノリス」アーキテクチャを実現します。

セットアップ

スターターキット経由(推奨)

新規プロジェクトで始める場合はスターターキットを使うのが最も手軽です。
対話式プロンプトで React を選ぶと、以下がすべて自動でセットアップされます。
  • inertiajs/inertia-laravel(サーバーサイドアダプター)
  • @inertiajs/react(クライアントアダプター)
  • react + react-dom(React 19 本体)
  • @vitejs/plugin-react(Vite プラグイン)
  • TypeScript + @types/react
  • Tailwind CSS + shadcn/ui コンポーネントライブラリ
  • HandleInertiaRequests ミドルウェア
  • ログイン・登録などの認証画面(Inertia + React + TypeScript で実装済み)

手動インストール

既存プロジェクトに追加する場合は、サーバーサイドとクライアントサイドを別々にインストールします。
次に、vite.config.ts に React プラグインを追加します。
resources/js/app.tsx で Inertia アプリを起動します。
手動インストールの詳細(ルートテンプレートの設定やミドルウェアの登録など)は Inertia 公式ドキュメント を参照してください。

ディレクトリ構造

スターターキットでは React のページコンポーネントを resources/js/pages/ ディレクトリに配置します。
Inertia::render('posts/index', [...]) と書くと resources/js/pages/posts/index.tsx が対応するコンポーネントになります。

JSX 構文の基礎

React は JSX を使います。JavaScript の中に HTML ライクな構文を書くスタイルで、スターターキットのコードを読むために最低限知っておきたいパターンを紹介します。

{} — 変数展開

JSX 内では {} を使って JavaScript の値や式を埋め込みます。

条件分岐 — && と三項演算子

React には v-if に相当するディレクティブがありません。シンプルな条件には && 演算子、if/else には三項演算子 ? : を使います。

リスト描画 — .map()

リストの描画には Array.map() を使います。効率的な差分更新のために key prop は必ず指定します。
Vue の v-for :key や Svelte の {#each} に相当します。

className — CSS クラス名

JSX は JavaScript にコンパイルされるため、class は予約語です。CSS クラスには className を使います。

イベントハンドラー — キャメルケース

JSX のイベント属性はキャメルケースで、関数の参照を渡します。

ページコンポーネントの基本

Inertia のページコンポーネントは通常の React コンポーネントです。Laravel のコントローラーから渡したデータが props として受け取れます。

コントローラー

React ページコンポーネント

コンポーネントの引数として props を受け取るだけで、コントローラーから渡したデータをそのまま使えます。REST API を定義する必要はありません。
@inertiajs/react が提供する <Link> コンポーネントを使うと、ページ遷移が XHR で行われ、ブラウザのフルリロードを回避できます。
通常の <a> タグと同じように書けますが、裏側で Inertia がページコンポーネントだけを差し替えるため SPA のような操作感になります。

Form コンポーネント

@inertiajs/react が提供する <Form> コンポーネントは、スターターキットの認証画面で使われているフォーム送信の推奨スタイルです。actionmethod を props で指定し、children 関数(render prop)で errorsprocessing を受け取ります。

基本的な使い方

<Form> の children は ({ errors, processing }) => JSX という関数(render prop パターン)です。Form コンポーネントがこれらの値を自動で算出して渡してくれます。フォームフィールドには onChange ハンドラではなく HTML ネイティブの name 属性を使い、ブラウザの標準フォームデータ収集が機能します。

スターターキットのパターン

スターターキットは Wayfinder を使ってルートをオブジェクトとして管理しています。store.form() はルートオブジェクトの actionmethod を含むオブジェクトを返し、<Form> に spread します。
resetOnSuccess に指定したフィールドは、送信成功時に自動でリセットされます。パスワードフィールドなど送信後に空にしたいフィールドに指定します。
Wayfinder を使わない場合は action="/login" のように直接 URL を渡せば同じように動作します。

useForm フック

フォーム処理には @inertiajs/reactuseForm フックを使います。フォームの状態管理・送信・バリデーションエラー表示がシンプルに実装できます。

コントローラー側

React フォームコンポーネント

useForm が返すオブジェクトの主なプロパティをまとめます。 バリデーションエラーが返ったとき、useForm は入力内容を保持したままエラーを表示します。

共有データ(Shared Data)

すべてのページで共通して必要なデータ(ログイン中のユーザー情報・フラッシュメッセージなど)は HandleInertiaRequests ミドルウェアの share() メソッドで定義します。
React コンポーネントから共有データにアクセスするには usePage() フックを使います。
共有データはすべてのリクエストに含まれるため、必要最低限のデータに絞ることを推奨します。fn() を使ったレイジー評価にすると、実際にアクセスされたときだけ評価されます。

React フック基礎

Inertia × React で開発するうえで知っておくべき React の基本フックを紹介します。

useState — ローカルな状態管理

useEffect — 副作用の処理

useMemouseCallback — パフォーマンス最適化


TypeScript サポート

スターターキットの React 版は TypeScript がデフォルトです。Inertia の型定義と組み合わせることで、props の型安全を確保できます。

グローバル型定義

スターターキットでは resources/js/types/index.d.ts に共有データの型を定義します。

ページコンポーネントでの型利用


まとめ

React は Laravel との組み合わせで、特に Inertia を経由した「モダンモノリス」構成で力を発揮します。TypeScript との相性も優れており、大規模なアプリケーション開発に向いています。 Inertia × React を使うと、Laravel バックエンドのシンプルさと React の強力なエコシステムを組み合わせた開発体験が得られます。スターターキットでプロジェクトを作成すれば、認証画面も含めてすぐに開発を始められます。

Inertia.js 公式ドキュメント

Inertia v3 の全機能については公式ドキュメントを参照してください。
最終更新日 2026年5月4日