対象バージョン: Rails 8.1 系 / Laravel 13 系 前提: 各エコシステムでデファクトスタンダードとされる gem / パッケージを使う前提で比較する。


目次


結論(先に要約)

  • Webアプリに必要な機能は、デファクトの gem / パッケージまで含めればほぼすべて対応関係がある。 「片方でしか実現できない機能」はほぼない。
  • 実際の違いは主に次の4点。
    1. どこにあるか — フレームワーク本体 / 公式パッケージ / サードパーティ / 有償サービス
    2. 設計思想 — バリデーションの置き場所、DIコンテナの有無、ランタイムモデルなど
    3. 公式エコシステムの広さ — Laravel は公式パッケージ・公式SaaSが多い。Rails は本体同梱が多く、残りはコミュニティ gem に頼る
    4. フロントエンドの方向性 — Rails は Hotwire(HTML over the wire)が標準。Laravel は Livewire と Inertia(React/Vue/Svelte)から選べる

1. 全体比較表

凡例: 本体 = フレームワーク同梱 / 公式 = 公式の別パッケージ / 3rd = サードパーティのデファクト / 有償 = 有償サービス・製品

分野RailsLaravel差の大きさ
ORMActive Record(本体)Eloquent(本体)小
マイグレーション本体(schema.rb / structure.sql)本体(schema dump あり)小
バリデーションモデルに定義(本体)Form Request / Validator(本体)中(設計思想)
ルーティング本体(resources 中心)本体(クロージャ / コントローラ / 属性)小
テンプレートERB(本体)Blade(本体)小
認証(ログイン)rails g authentication(本体)/ Devise(3rd)スターターキット + Fortify(公式)小
パスキー(WebAuthn)webauthn-ruby 等(3rd)Fortify / スターターキット(公式、13〜)中
ソーシャルログインOmniAuth(3rd)Socialite(公式)小
APIトークン認証generates_token_for 等(本体)/ devise-jwt(3rd)Sanctum(公式)小
OAuth2 サーバーDoorkeeper(3rd)Passport(公式)小
認可Pundit / CanCanCan(3rd)Gate / Policy(本体)小
バックグラウンドジョブActive Job + Solid Queue(本体)/ Sidekiq(3rd)Queue(本体)+ Horizon(公式)小
ジョブのバッチ・チェーン本体に無し(GoodJob / Sidekiq Pro で対応)Bus::batch / chain(本体)中
ジョブの途中再開Active Job Continuations(本体、8.1〜)本体に同等機能無し(自前で分割)中
定期実行(cron)Solid Queue の recurring tasks(本体)/ whenever 等Task Scheduling(本体)小
キャッシュSolid Cache / Redis 等(本体)Cache(本体、DB / Redis 等)小
WebSocketAction Cable + Solid Cable(本体)Reverb(公式)+ Echo小
メール送信Action Mailer(本体)Mail(本体)小
メール受信Action Mailbox(本体)本体に無し(3rd パッケージ)中
通知(複数チャネル)noticed(3rd)Notifications(本体)中
ファイル保存Active Storage(本体、variant・直接アップロード付き)Filesystem / Flysystem(本体)中
画像変換・メディア管理Active Storage variants(本体)spatie/laravel-medialibrary 等(3rd)中
リッチテキストAction Text(本体)本体に無し(Filament 等のエディタ)中
全文検索pg_search / Searchkick(3rd)Scout(公式)小
決済(Stripe 等)Pay(3rd)Cashier(公式)小
機能フラグFlipper(3rd)Pennant(公式)小
管理画面ActiveAdmin / Avo / Administrate(3rd)Filament(3rd)/ Nova(公式・有償)小
API レスポンス整形Jbuilder(本体)/ Alba 等(3rd)API Resources(本体)、JSON:API(本体、13〜)小
ページネーションPagy / Kaminari(3rd)本体小
レート制限rate_limit(本体)/ Rack::Attack(3rd)RateLimiter(本体)小
暗号化Active Record Encryption(本体)Crypt / encrypted cast(本体)小
国際化I18n(本体)Localization(本体)小
イベント / リスナーActiveSupport::Notifications、コールバック(本体)Events / Listeners / Observers(本体)中
構造化ログRails.event(本体、8.1〜)Context / Log channels(本体)小
デバッグ・監視rack-mini-profiler、Mission Control(公式)Telescope / Pulse(公式)中
テストMinitest(本体)/ RSpec + FactoryBot(3rd)Pest / PHPUnit(本体)、Factory(本体)小
ブラウザテストSystem Test + Capybara(本体)Dusk(公式)/ Pest Browser小
テスト用 Fakeジョブ・メール等のテストヘルパー(本体)Mail::fake()、Queue::fake() 等(本体)小
静的解析 / 型RuboCop、Sorbet / RBS(3rd)PHP の型宣言 + Larastan(3rd)、Pint(公式)中
セキュリティスキャンBrakeman(本体同梱)本体に無し(3rd)小
ローカルCIconfig/ci.rb(本体、8.1〜)本体に無し小
REPLrails consolephp artisan tinker小
開発環境devcontainer 生成(本体)Sail(公式)/ Herd(公式アプリ)小
フロントエンドHotwire(Turbo + Stimulus)、importmapLivewire / Inertia(React・Vue・Svelte)大(方向性)
アセットPropshaft(本体)Vite(本体)小
アプリサーバーPuma + ThrusterPHP-FPM / Octane(FrankenPHP・Swoole・RoadRunner)中(ランタイム)
デプロイKamal(公式、OSS)Forge / Vapor / Laravel Cloud(公式・有償)中
AI 連携RubyLLM(3rd)、Markdown レスポンス(8.1〜)Laravel AI SDK(公式、13 で安定版)、Boost中

2. 実際に差が出るポイント

2-1. Rails のほうが標準機能として強いもの

機能内容Laravel での代替
Action TextTrix ベースのリッチテキストエディタと保存・添付が本体に統合されているエディタ(Tiptap 等)と保存処理を自分で組み合わせる。Filament 利用時はエディタが付属
Action Mailbox受信メールをルーティングしてコントローラ的に処理できるbeyondcode/laravel-mailbox 等の 3rd
Active Storage画像 variant、直接アップロード、モデルへの添付が本体で一貫して扱えるFilesystem + spatie/laravel-medialibrary の組み合わせが定番
Active Job Continuations長いジョブを step に分け、再起動後に途中から再開できる(8.1〜)ジョブを自分で分割し、チェーンやバッチで代用
複合主キーActive Record が複合主キーに対応Eloquent は複合主キー非対応(パッケージか回避策が必要)
Kamal無料・OSS のデプロイツールが公式で用意されているForge / Cloud は有償。無料なら Deployer 等
Brakeman / ローカルCIセキュリティ静的解析とローカルCIが新規アプリに最初から入っている自分で導入する

2-2. Laravel のほうが標準機能として強いもの

機能内容Rails での代替
Notificationsメール・SMS・Slack・DB・Broadcast などへの通知を1つのクラスで送れるnoticed gem
ジョブのバッチ複数ジョブの進捗・完了・失敗をまとめて扱えるGoodJob の batch、または Sidekiq Pro(有償)
Task Schedulingroutes/console.php に定期実行を書くだけで動く。重複実行の防止なども揃っているSolid Queue の recurring tasks で近いことができる。高度な制御は gem が必要
認可(Gate / Policy)本体に組み込み済みPundit を入れれば同等
公式パッケージ群Socialite、Sanctum、Passport、Cashier、Scout、Pennant、Horizon、Telescope、Pulse、Reverb など、すべて公式でメンテされている同等の gem はあるが、作者・メンテナンス体制がバラバラ
パスキーFortify / スターターキットで標準対応(13〜)webauthn-ruby 等を組み込む
AI SDKプロバイダ非依存の公式 AI SDK(13 で安定版)RubyLLM 等の 3rd
JSON:APIJSON:API 仕様のリソースクラスが本体に入っている(13〜)jsonapi-serializer 等の 3rd
ページネーション本体に組み込み済みPagy / Kaminari
監視ダッシュボードTelescope(開発時のリクエスト・クエリ・ジョブ確認)、Pulse(本番の簡易メトリクス)単一の公式ツールは無い。rack-mini-profiler、Mission Control Jobs、APM を組み合わせる

3. 設計思想・アーキテクチャの違い

機能の有無ではなく、書き方・考え方の違いとして差が出る部分。

観点RailsLaravel
バリデーションの置き場所モデル(validates)。どこから保存しても同じ検証がかかるリクエスト層(Form Request)。モデル自体は検証を持たないのが一般的
Mass Assignment 対策コントローラの Strong Parametersモデルの $fillable / $guarded
属性定義DB スキーマから自動。型は attribute で上書きDB スキーマから自動。型変換は $casts / casts()
DIDI コンテナは無い。Ruby の言語機能(モジュール、Concern)で対応サービスコンテナ + Facade が中心。インターフェースへのバインドが容易
設定の書き方DSL(クラスマクロ)中心配列設定 + PHP 属性(13 で属性による設定が大幅に拡充)
規約の強さ「設定より規約」が強い。ディレクトリ構成もほぼ固定規約はあるが柔軟。構成を変えやすい
ランタイム常駐プロセス(Puma)。メモリ上に状態が残る基本は share-nothing(リクエストごとに初期化)。Octane を使うと常駐型になる
型動的型付け。型が欲しければ Sorbet / RBS言語レベルで型宣言がある + PHPStan(Larastan)
フロントエンドサーバーで HTML を返す Hotwire を推奨。SPA は脇役Livewire(サーバー駆動)と Inertia(SPA 的)を対等に扱う
エコシステムの収益モデルほぼ OSS + コミュニティOSS 本体 + 公式の有償製品(Forge、Vapor、Cloud、Nova)

4. 選定の目安

状況向いている方理由
React / Vue で画面を作りたいが、API は分けたくないLaravelInertia スターターキットが公式
JS をなるべく書かずにリッチな UI を作りたいどちらも可Hotwire(Rails)/ Livewire(Laravel)
公式サポートのパッケージだけで揃えたいLaravel決済・検索・OAuth・機能フラグ・監視まで公式
リッチテキスト・メール受信・ファイル添付が多いRailsAction Text / Action Mailbox / Active Storage が本体
自前サーバーに安く・シンプルにデプロイしたいRailsKamal が無料で公式
マネージドに任せたい(費用は許容)LaravelLaravel Cloud / Vapor
既存チームのスキル言語次第機能差より、Ruby / PHP の習熟度の影響のほうが大きい
共有レンタルサーバーで動かしたいLaravelPHP なら動く環境が多い

5. まとめ

  • デファクトの gem / パッケージを使う前提なら、機能面で「できる / できない」の差はほぼない。
  • 差が出るのは次の部分。
    • Rails が本体で持っているもの: Action Text、Action Mailbox、Active Storage、Job Continuations、複合主キー、Kamal
    • Laravel が本体・公式で持っているもの: Notifications、ジョブのバッチ、Gate / Policy、パスキー、AI SDK、JSON:API、監視ツール群(Telescope / Pulse)
  • 選定に効きやすいのは、機能差よりも次の3点。
    1. フロントエンドの方針(Hotwire か、Livewire / Inertia か)
    2. デプロイの方針(Kamal で自前運用か、公式マネージドか)
    3. チームの言語スキル

0件のページ