1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails学習者向けのLaravelAdvent Calendar 2024

Day 6

Eloquent ORMの基本:RailsのActive Recordとの共通点と違い

Last updated at Posted at 2024-12-05

はじめに

プログラミングを始めたばかりの方にとって、フレームワークの選択は大切な決断です。この記事では、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:

php
class Post extends Model {
    public function user() {
        return $this->belongsTo(User::class);
    }
}

Active Record:

ruby
class Post < ApplicationRecord
  belongs_to :user
end

3. スコープの実装

Eloquentではスコープはscopeメソッドを活用しますが、Active Recordはクラスメソッドで定義します。

Eloquent:

php
class User extends Model {
    public function scopeActive($query) {
        return $query->where('active', 1);
    }
}

Active Record:

ruby
class User < ApplicationRecord
  scope :active, -> { where(active: true) }
end

4. モデルの生成

Eloquentでは、createメソッドを直接使用してデータを挿入します。一方、Active Recordではnewでインスタンスを作成後、saveします。

Eloquent:

php
User::create(['name' => 'John', 'email' => 'john@example.com']);

Active Record:

ruby
user = User.new(name: 'John', email: 'john@example.com')
user.save

実際に使ってみる

以下は、簡単なToDoアプリケーションの例です。
RailsとLaravelで同じ機能を実現するコードを比較します。

タスク一覧を取得する:

Laravel (Eloquent):

php
$tasks = Task::where('status', 'pending')->get();

Rails (Active Record):

ruby
tasks = Task.where(status: 'pending')

新しいタスクを作成する:

Laravel (Eloquent):

php
Task::create(['title' => 'New Task', 'status' => 'pending']);

Rails (Active Record):

ruby
Task.create(title: 'New Task', status: 'pending')

まとめ

Eloquent ORMとActive Recordは、それぞれのフレームワークに最適化されたORMであり、基本的な概念は共通しています。しかし、記述方法や設計思想には違いがあるため、フレームワークの特徴やプロジェクトの要件に応じて使い分けることが重要です。

公式ドキュメントの参照
Laravel Eloquent Official Documentation
Rails Active Record Official Guide

どちらを選ぶにしても、公式ドキュメントを常に参照しながら進めることで、より理解が深まるでしょう!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?