naopoyo.com
  • Docs
  • Tags
  • Bookmarks
  • Tools
  • About
  • Docs
  • Tags
  • Bookmarks
  • Tools
  • About

目次

© naopoyo

目次

最近更新された記事

🎣

GitHub App Webhook で push を処理するとき、知っておきたい制約と対処法

約8時間前·2026年02月16日
  • GitHub
  • Ruby
✒️

エンジニア個人ブログまとめ

約10時間前·2026年02月16日
  • デザイン
  • Markdown
🛶

Entire を触ってみたメモ

2日前·2026年02月14日
  • Claude Code
  • Git
  • LLM
🎼

Rails + React 構成についてのメモ

公開日約3時間前2026-02-16
履歴GitHubで見る
MarkdownRaw Content
  • Rails
  • React

モノリスで React を使う方法

選択肢概要現状
Inertia.jsコントローラから直接 props を渡す。API 層不要Laravel で標準化済み。Rails 側も活発
React on RailsRails ビュー内で React を SSR/CSRShakaCode 1社依存。広がりは限定的
Vite Rails + SPAVite で React SPA をビルド・配信ビルドツール統合であってフレームワークではない
jsbundling-railsRails 標準のバンドラー統合シンプルだが React との連携は自前設計

この中だと Inertia.js が一番スタンダード。

Inertia vs 分離構成

観点InertiaNext.js + Rails API
API 設計不要必要
デプロイ1つ2つ
モバイル対応別途 API が必要になるそのまま使える
型の同期手動GraphQL/OpenAPI codegen で自動化可
SSRNode プロセス追加で対応可標準で組み込み
RSC / Streaming非対応対応
チーム分業しにくいしやすい
立ち上げ速度速い遅い

複雑さの総量は変わらない。どこに寄せるかだけ。

SSR

  • Inertia デフォルトは SSR ではない。初回 HTML の中身は空の div + JSON で、React がクライアント描画する
  • SSR モードは Node プロセス追加で対応可。同一サーバー同居で動く
  • Next.js は SSR 中に Rails API への HTTP リクエストが走る。Inertia は Rails が直接 DB を叩いた結果を Node に渡すだけ
  • トータルのレイテンシはほぼ同等
  • 差が出るのは RSC / Streaming SSR。コンポーネント単位の SSR/CSR 切り替えは Inertia にはない

SSR のパフォーマンスより、RSC が必要かどうかで選ぶ方が現実的。

Hotwire

観点HotwireReact
思想サーバーが HTML を返すクライアントが状態から描画
構造化Stimulus コントローラコンポーネント
型安全なしTypeScript
状態管理サーバー側エコシステムが豊富
テストRails のシステムテスト寄りTesting Library, Storybook
フロント複雑化時仕組みがない対応できる

jQuery 的な匂いがする。スコープが閉じている分マシだが、宣言的 UI やコンポーネント指向とは違う世界。

型安全

構成型の同期方法
Inertia手動定義。ズレは実行時まで気づけない
Inertia + types_from_serializersシリアライザから生成。まだ成熟していない
分離構成 + GraphQL codegenスキーマから自動生成
分離構成 + OpenAPI codegenスキーマから自動生成
  • Laravel には Laravel Data(PHP クラスから TS 型を自動生成)があるが、Rails 側に同等のものがない
  • Ruby が動的型付けなので型情報の源泉がない
  • GraphQL codegen で解決はできるが、そこまでやるなら分離構成でいい気もする

Islands Architecture

条件うまくいく辛くなる
島の数少ない(1〜2個)多い(5個以上)
島同士の連携不要state を共有したい
島の役割独立した入力装置ページ全体の制御
  • グローバル state は Rails(DB + セッション)が持ち、島の中だけ React の state を使う
  • 島同士で state 共有が必要になると、別々の createRoot なので Context が効かず外部ストア必須
  • Next.js の RSC は Islands のやりたいことをフレームワークとして統合したもの

島が増えて連携し始めたら「最初から全面 React で」となるパターンが多いらしい。

今のところの感触

  • フロントの複雑さがプロダクトの価値に直結するなら React ベース
  • CRUD 中心なら Hotwire や Inertia で十分
  • Inertia か分離構成かは、型安全と SSR をどこまで求めるか次第