対象バージョン: Rails 8.1 / Next.js 16(App Router)
目次
結論
Webアプリとして「最終的に作れるもの」はほぼ同じ。 どちらでもCRUD、認証、決済、管理画面、メール送信、バックグラウンド処理、リアルタイム通知を備えた本番サービスを作れる。
ただし両者は出発点が逆なので、同じことをするときの手間と得意分野ははっきり違う。
| Rails | Next.js | |
|---|---|---|
| 出発点 | サーバー側(DB・業務ロジック)中心のフルスタック | フロントエンド(React UI)中心のフルスタック |
| 思想 | 公式が全部入り(batteries included)・設定より規約 | 中核はレンダリングとルーティング。バックエンド機能はライブラリを選んで組み合わせる |
| 言語 | Ruby | TypeScript / JavaScript |
つまり、
- Rails: バックエンドは全部公式で揃う。リッチなUIは Hotwire で書くか、React を足す。
- Next.js: UIは最強クラス。バックエンド機能はデファクトのライブラリを自分で組み合わせる。
機能ごとの対応表(デファクトを使う前提)
| 機能 | Rails(標準 or 定番gem) | Next.js(定番ライブラリ・サービス) | 差 |
|---|---|---|---|
| ルーティング | config/routes.rb(RESTful規約) | ファイルベース(app/ ディレクトリ) | 同等 |
| ORM | Active Record(標準) | Prisma / Drizzle | 同等。Rails の方が規約が強く、記述が短い |
| マイグレーション | Active Record Migrations(標準) | Prisma Migrate / drizzle-kit | 同等 |
| バリデーション | モデルに記述(標準) | Zod など | 同等。Zod はフロントと共有できる |
| 認証 | Rails 8 の認証ジェネレーター(標準)/ Devise | Auth.js / Better Auth / Clerk | 同等 |
| 認可 | Pundit / CanCanCan | 自前実装 or CASL など | Rails の方が定番が固まっている |
| バックグラウンドジョブ | Active Job + Solid Queue(標準) | Inngest / Trigger.dev / BullMQ(別ワーカー) | Rails 優位(後述) |
| メール送信 | Action Mailer(標準) | Resend + React Email など | 同等 |
| メール受信 | Action Mailbox(標準) | 外部サービスの Webhook を自前処理 | Rails 優位 |
| ファイルアップロード | Active Storage(標準) | UploadThing / S3 SDK 直 | 同等 |
| リアルタイム(WebSocket) | Action Cable + Solid Cable(標準) | Pusher / Ably / Supabase Realtime など外部 | Rails 優位(Vercel 上では WebSocket サーバーを持てない) |
| キャッシュ | Solid Cache / フラグメントキャッシュ(標準) | Cache Components("use cache")・ISR | 方向性が違う。Next はページ・コンポーネント単位のキャッシュが強い |
| 管理画面 | Avo / ActiveAdmin / Administrate | 自作 or Refine など | Rails 優位 |
| リッチテキスト | Action Text(標準) | Tiptap / Lexical | 同等 |
| i18n | 標準 | next-intl | 同等 |
| テスト | Minitest(標準)/ RSpec、システムテスト | Vitest / Jest + Playwright | 同等 |
| UIのインタラクティブさ | Hotwire(Turbo + Stimulus) | React(本体) | Next.js 優位(後述) |
| SEO / SSR / 静的生成 | SSR は標準。SSG は弱い | SSR / SSG / ISR / ストリーミングすべて標準 | Next.js 優位 |
| 画像最適化 | Active Storage の variants | next/image(標準) | Next.js やや優位 |
| 型安全 | 動的型付け(RBS / Sorbet は任意) | TypeScript で DB〜UI まで一貫 | Next.js 優位 |
| モバイルアプリ | Hotwire Native(Web画面をネイティブで包む) | React Native / Expo(React の知識・一部コードを流用) | Next.js 優位 |
| デプロイ | Kamal(標準)で任意のVPSへ | Vercel が最も簡単。Docker で自前ホストも可 | 好み次第 |
「ほぼ同じ」にならないポイント
1. 長時間処理・常駐プロセス(Rails が有利)
- Rails は Web プロセスとジョブワーカーが同じコードベース・同じ設定で動く前提になっている。Solid Queue なら Redis も不要。Rails 8.1 では、長いジョブを中断したところから再開できる Job Continuations も入った。
- Next.js(特に Vercel のようなサーバーレス)は、リクエストごとに短時間だけ動くモデル。重いバッチ・キュー・WebSocket は 外部サービスか別サーバーが必要 になり、構成要素が増える。
2. リッチなUI(Next.js が有利)
- ドラッグ&ドロップ、複雑なフォーム、エディタ、ダッシュボード、オフライン対応など「アプリっぽい」画面は React のエコシステム(shadcn/ui、TanStack など)が圧倒的に厚い。
- Hotwire でもかなりの所まで作れるが、状態管理が複雑になるほど React に分がある。Rails 側で React を使う場合は Inertia.js や API + 別フロントの構成になる。
3. 開発速度と一貫性
- Rails: 規約が強く、
rails generateで一式が出る。誰が書いても似た構成になり、CRUD 中心の業務アプリ・管理系は最速クラス。 - Next.js: ORM・認証・ジョブなどを自分で選んで組み合わせるので、初期の選定コストがある。プロジェクトごとに構成がばらつきやすい。その代わり、選んだ組み合わせは自由。
4. 言語・人材
- Next.js はフロントとバックを TypeScript 一つで書ける。採用市場でも React/TS 人材は多い。
- Rails は Ruby の生産性が高い一方、人材プールは React/TS より小さい(国内では Ruby 人材は依然多め)。
5. ベンダー依存
- Next.js の機能(ISR、画像最適化、Edge 等)は Vercel 上で最もスムーズに動く。セルフホストも可能だが、一部の機能は自分で手当てが必要になる。
- Rails は Kamal で任意の VPS や Docker 環境へ出せる、ホスティングを選ばない作り。
向き・不向き
| ユースケース | おすすめ |
|---|---|
| 業務システム、管理画面、CRUD中心のSaaS | Rails |
| 少人数で早く MVP を出したい(バックエンド重め) | Rails |
| ジョブ・メール・WebSocket を多用する | Rails |
| メディア・EC・LP など SEO と表示速度重視 | Next.js |
| インタラクションが多い SPA 的なアプリ | Next.js |
| 将来 React Native でモバイルも作りたい | Next.js |
| フロントもバックも TypeScript で統一したい | Next.js |
| バックエンドは堅く、UIはリッチに | Rails(API)+ Next.js または Rails + Inertia.js + React |
まとめ
- 作れるもの: ほぼ同じ。どちらを選んでも「できない」ことはまずない。
- 違い:
- Rails はバックエンドの部品が公式で全部揃う。
- Next.js は UI とレンダリングが強く、バックエンドは組み立てる。
- 選び方: アプリの重心が「データと業務ロジック」なら Rails、「画面体験と表示性能」なら Next.js。両方重いなら組み合わせる。