12k
All articles

知っておきたいバッテリー同梱型Webフレームワーク5選

Rails、Django、Laravel、Phoenix、Locoの5つのフルスタックWebフレームワークを、標準機能や強み、適したチームの観点から比較します。

OpenReplay Team
OpenReplay Team
知っておきたいバッテリー同梱型Webフレームワーク5選

バッテリー同梱型(batteries-included)Webフレームワークとは、ルーティング、データベースマイグレーション付きのORM、認証、バックグラウンドジョブ、メール送信、テスト環境を、相互に連携する1つのパッケージとして提供するフレームワークです。チームは個別のライブラリを選んで組み合わせる代わりに、デフォルト設定を調整するだけで済みます。

ExpressやNext.jsで開発している方なら、よくある流れをご存じでしょう。作りたい機能はパスワードリセットメールなのに、まずORM、キューライブラリ、メーラーの比較に1週間を費やし、そのあとで認証ライブラリが自分のセッションストアに対応していないことに気づく、というものです。

本記事では、これらの機能を最初から備えた5つの言語の5つのフレームワーク、Rails、Django、Laravel、Phoenix、Locoを紹介します。それぞれについて、言語、同梱機能、特徴、向いているチームを同じ基準で評価します。

重要なポイント

  • バッテリー同梱型フレームワークでは、ルーティング、ORM、マイグレーション、認証、ジョブ、メール、テストが1つのリリースにまとまっているため、ドキュメントもアップグレードも一体で管理されます。
  • トレードオフは結合度です。動く機能に早くたどり着けるフレームワークほど、アプリはその規約やアップグレードパスに強く依存します。
  • Rails 8.0以降、Railsには認証ジェネレーターが標準搭載され、新規アプリではSolid QueueがActive Jobのデフォルトバックエンドになっています。
  • Django 6.0以降、コアにバックグラウンド処理をキューイングするTasksフレームワークが含まれていますが、本番環境での実行にはサードパーティ製のワーカーバックエンドが必要です。
  • Phoenixのmix phx.gen.authはデフォルトでマジックリンクログイン付きのメールベース認証を生成します。LocoはAxumとSeaORMをベースに、RailsのモデルをRustにもたらします。

バッテリー同梱型フレームワークとは?

バッテリー同梱型フレームワークは、標準的なバックエンドの各レイヤーをアドオンではなくフレームワークの一部として扱います。ルーティング、データアクセスとマイグレーション、認証、ジョブキュー、メーラー、テストハーネスがすべて連携するように作られており、ジェネレーターはこれらすべてのレイヤーを使ったコードを生成します。

Expressと比べると、違いは次のとおりです。Expressでは通常、PrismaのようなORM、BullMQのようなキュー、認証ライブラリ、メーラーをそれぞれ選び、組み合わせ、個別にアップグレードしていきます。バッテリー同梱型フレームワークでは、これらすべてが1つのプロジェクトから提供されます。ドキュメントとジェネレーターは共通で、アップグレードも1回のリリースでまとめて行われます。JavaScriptにも選択肢があります。このモデルに最も近いのはAdonisJSで、RailsスタイルのJavaScriptフレームワークに関する記事で取り上げています。NestJSはすべてのレイヤーを同梱するというより、アプリケーション構造に重点を置いています。

バッテリー同梱型フレームワークが向いているのは、機能のリリースが主な制約となっているチームです。逆に、データ、認証、デプロイに関するフレームワークの前提と要件が頻繁に食い違うチームにはあまり向いていません。また、個々のレイヤーを差し替えたいチームや、ルーターと1つのライブラリですべてをまかなえる小規模なサービスにも不向きです。小さなライブラリを組み合わせることを文化として好むエコシステムもあります。その代表例がGoで、Go Webフレームワークのガイドで解説しています。

バッテリー同梱型フレームワークの代償は結合度です。最初のリリースを加速させるデフォルト設定は、ビジネスロジックをフレームワークの規約に縛り付けることにもなり、アップグレード時や単体でのテスト時に影響が出ます。

Ruby on Rails

Railsは「設定より規約(convention over configuration)」を広く普及させたRubyのフレームワークであり、他の4つのフレームワークの基準となる存在です。現在のリリースシリーズはRails 8.1で、最新のパッチはRails 8.1.4です。

同梱機能: ルーティング、マイグレーション付きのActive Record、Action Mailer、Active Job、デフォルトのテストフレームワーク。バージョン8.0以降、Railsにはデフォルトの認証ジェネレーターが付属しており、基本的なログインとパスワードリセットのためのモデル、コントローラー、ビュー、ルート、マイグレーションを追加できます。ジョブについては、新規アプリではSolid QueueがActive Jobのデフォルトです。データベースをバックエンドとするため、Redisは不要です。

特徴: ジェネレーターと規約。ファイル、クラス、テーブルが想定された命名に従っていれば、ルーティングやモデルのマッピングはほぼ設定なしで動作します。

bin/rails generate scaffold Post title:string body:text

Railsのscaffoldコマンドは、完全なCRUDリソースのためのモデル、マイグレーション、コントローラー、ビュー、ルート、テストを生成します。

向いているチーム: 規約駆動の開発ワークフローを最も深く活用したく、Railsの設計思想を受け入れられる小規模チーム。

Django

DjangoはPythonのバッテリー同梱型フレームワークです。最大の特徴は、モデルから自動生成される管理画面です。Djangoチームは2026年8月にDjango 6.1のリリースを発表しました。

同梱機能: URLルーティング、モデルの変更からマイグレーションを生成するORM、django.contrib.auth、メールAPI、テストフレームワーク。Django 6.0以降、コアにTasksフレームワーク(django.tasks)が含まれており、バックグラウンドタスクの定義とキューイングが可能です。ただし、組み込みのバックエンドは開発・テスト用であるため、本番環境でタスクを実行するには別途サードパーティ製のワーカーバックエンドが必要です。

特徴: Django管理サイト。モデル定義から実用的なバックオフィス画面を構築できます。個別のライブラリを組み合わせたスタックでは、これは得られません。

python manage.py startapp blog

Djangoのstartappコマンドは、モデル、ビュー、管理画面への登録、テスト、マイグレーション用のモジュールを含むアプリパッケージを作成します。Djangoのコアには、CRUDのscaffoldジェネレーターはありません。

向いているチーム: すでにPythonで開発しているチームや、初日から社内向けの管理ツールが必要なアプリ。

Laravel

Laravelは、5つの中で最も幅広いファーストパーティのエコシステムを持つPHPフレームワークです。現在のメジャーバージョンはLaravel 13です。

同梱機能: Laravelは、ルーティング、マイグレーション付きのEloquent ORM、キューシステム、メール、Bladeテンプレートエンジン、Artisan CLI、テストを1つのフレームワークにまとめています。公式のスターターキットで認証の雛形を生成でき、Echoなどのファーストパーティパッケージがクライアント側のリアルタイムブロードキャストをカバーします。

特徴: キュー、メール、データベースがまるで1つのライブラリのように扱えるAPI設計に加え、コアの範囲外をカバーする豊富な公式パッケージ群。

php artisan make:model Post --migration --controller --resource

これらのフラグを付けたLaravelのmake:modelコマンドは、Eloquentモデルと、対応するマイグレーションおよびリソースコントローラーを作成します。

向いているチーム: 入手しやすいPHPホスティングを利用したく、コミュニティから選ぶよりも公式パッケージを好むチーム。

Phoenix

Phoenixは、バッテリー同梱型のアプローチをElixirにもたらすフレームワークです。ジェネレーターとEctoデータベースライブラリに、インタラクティブなサーバーサイドレンダリングUIを構築するLiveViewを組み合わせています。現在のリリースはPhoenix 1.8です。

同梱機能: ルーティング、Ectoのスキーマとマイグレーション、ChannelsとPubSub、そしてmix phx.gen.auth。このジェネレーターは、デフォルトでマジックリンクログイン付きのメールベース認証を生成し、オプションでパスワード認証も選べます。デフォルトではLiveViewをベースに構築されます。Phoenixの最大の特徴はLiveViewです。

mix phx.gen.html Blog Post posts title:string body:text

Phoenixのmix phx.gen.htmlコマンドは、コンテキスト、スキーマ、マイグレーション、コントローラー、テンプレート、テストを生成します。

向いているチーム: 別途SPAを保守したくない、リアルタイム性が求められるプロダクト。

Loco

Locoは、Rails にインスパイアされたRust向けフレームワークです。Axum上に構築され、モデルとマイグレーションはSeaORMによって実現されています。プロジェクトのホームページでは「バッテリー同梱型のRust」と紹介されており、バージョンはv1.2.0です。

同梱機能: Locoのホームページには、モデル、コントローラー、ジョブ、メーラー、認証が挙げられており、いずれも生成され、相互に連携した状態で提供されます。認証はJWTベースです。

cargo loco generate scaffold post title:string content:text

Locoのジェネレーターに関するドキュメントによると、Locoのscaffoldコマンドは、モデル、マイグレーション、リクエスト型とレスポンス型、ルート付きのJSON APIコントローラー、モデルのテストを作成します。--no-authを指定しない限り、scaffoldで生成されたルートにはJWT認証が必要です。

向いているチーム: コンパイル型で型安全なRustバックエンドと、Railsのワークフローを両立させたいチーム。

バッテリー同梱型フレームワークの選び方

まずはチームがすでに習得している言語から始め、決め手に迷ったら各フレームワークの最大の特徴で判断しましょう。管理画面がすぐに手に入るDjango、規約駆動のジェネレーターならRails、ファーストパーティパッケージと手軽なホスティングならLaravel、リアルタイムのサーバーサイドレンダリングUIならPhoenix、同じモデルをRustで使いたいならLocoです。採用を決める前に、候補のフレームワークでジェネレーターコマンドを1つ、バックログにある実際の機能に対して実行してみてください。そして、生成されたコード以外に自分でどれだけ書く必要があるかを確認しましょう。

よくある質問

Djangoの組み込みTasksフレームワークはCeleryの代わりになりますか?

完全にはなりません。Django 6.0で追加されたdjango.tasksモジュールは、タスクの定義、バリデーション、キューイング、および結果の保存を担いますが、ワーカーは同梱されていません。組み込みのImmediateBackendとDummyBackendは開発・テスト用です。本番環境では、永続的なキューとワーカープロセスを提供するサードパーティ製のバックエンドをインストールし、そのワーカーを別途実行します。相互に依存するタスクを扱う場合は、依然としてCeleryのほうが適しています。

ReactやNext.jsのフロントエンド向けに、RailsやLaravelをAPI専用バックエンドとして使えますか?

はい、使えます。rails new my_api --apiを実行すると、より小さなミドルウェアスタックが構成され、ApplicationControllerがActionController::APIを継承するようになります。また、ジェネレーターがビュー、ヘルパー、アセットを作成しなくなるため、scaffoldはJSONを返すようになります。Laravel 11以降では、php artisan install:apiを実行するとroutes/api.phpが作成され、Laravel Sanctumがインストールされます。SanctumはSPAやモバイルクライアント向けのトークン認証を処理します。

Node.jsにバッテリー同梱型フレームワークはありますか?

Node.jsで最も近いのはAdonisJSです。AdonisJSはTypeScriptフレームワークで、認証、ORM、バリデーション、メール、キュー、キャッシュ、テストを、相互に連携するように設計された構成要素として提供します。データレイヤーはLucidで、Knex上に構築されたマイグレーション付きのActive Record ORMです。テストには、同じチームが開発したテストフレームワークJapaを使用します。認証は、Webアプリ向けのセッションとAPI向けのアクセストークンに対応しています。

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.