はじめに
プログラミングを始めたばかりの方にとって、フレームワークの選択は大切な決断です。この記事では、PHPフレームワークである Laravel の Eloquent ORM と、Ruby on Rails の Active Record について、共通点と違いを比較しながら解説します。どちらもORM(Object Relational Mapping)として広く使われており、データベースとのやり取りを簡潔かつ直感的に記述できるツールです。
ORMとは?
ORMは、オブジェクト指向プログラミングとリレーショナルデータベースの間の橋渡しをするツールです。SQLを直接記述せず、オブジェクトを操作する感覚でデータベースにアクセスできるため、コードの可読性と保守性が向上します。
Eloquent ORMとActive Recordの共通点
1.データベーステーブルとの対応
両者とも、データベースのテーブルと1対1で対応するモデルクラスを用意します。
例: users
テーブルに対応する User
モデル。
2.直感的なメソッドチェーン
データの取得やフィルタリングが簡単に行えます。
Eloquent: User::where('active', 1)->get();
Active Record: User.where(active: true)
3.リレーションのサポート
データベースのリレーションをコードで表現可能です(例: hasOne
, belongsTo
, hasMany
)。
4.マイグレーション
データベーススキーマの変更をコードで管理する仕組みが提供されています。
Eloquent ORMとActive Recordの違い
1. クエリの記述方法
Eloquentでは、SQLに近い感覚で記述するのに対し、Active RecordはRubyのシンボルや構文を活用します。
操作 | Eloquent | Active Record |
---|---|---|
レコード取得 | User::find(1); |
User.find(1) |
条件検索 | User::where('name', 'John')->get(); |
User.where(name: 'John') |
2. リレーションの宣言方法
Eloquentはメソッドを利用し、Active Recordはマクロを用います。
Eloquent:
class Post extends Model {
public function user() {
return $this->belongsTo(User::class);
}
}
Active Record:
class Post < ApplicationRecord
belongs_to :user
end
3. スコープの実装
Eloquentではスコープはscopeメソッドを活用しますが、Active Recordはクラスメソッドで定義します。
Eloquent:
class User extends Model {
public function scopeActive($query) {
return $query->where('active', 1);
}
}
Active Record:
class User < ApplicationRecord
scope :active, -> { where(active: true) }
end
4. モデルの生成
Eloquentでは、createメソッドを直接使用してデータを挿入します。一方、Active Recordではnewでインスタンスを作成後、saveします。
Eloquent:
User::create(['name' => 'John', 'email' => 'john@example.com']);
Active Record:
user = User.new(name: 'John', email: 'john@example.com')
user.save
実際に使ってみる
以下は、簡単なToDoアプリケーションの例です。
RailsとLaravelで同じ機能を実現するコードを比較します。
タスク一覧を取得する:
Laravel (Eloquent):
$tasks = Task::where('status', 'pending')->get();
Rails (Active Record):
tasks = Task.where(status: 'pending')
新しいタスクを作成する:
Laravel (Eloquent):
Task::create(['title' => 'New Task', 'status' => 'pending']);
Rails (Active Record):
Task.create(title: 'New Task', status: 'pending')
まとめ
Eloquent ORMとActive Recordは、それぞれのフレームワークに最適化されたORMであり、基本的な概念は共通しています。しかし、記述方法や設計思想には違いがあるため、フレームワークの特徴やプロジェクトの要件に応じて使い分けることが重要です。
公式ドキュメントの参照
Laravel Eloquent Official Documentation
Rails Active Record Official Guide
どちらを選ぶにしても、公式ドキュメントを常に参照しながら進めることで、より理解が深まるでしょう!