クエリビルダとEloquentの違い

Laravelにおける「クエリビルダ(Query Builder)」と「Eloquent ORM」は、どちらもデータベースとのやり取りを簡潔に行うための手段ですが、設計思想や使い方、機能面で違いがあります。以下にそれぞれの特徴と違いを詳しく解説します。


1. クエリビルダ(Query Builder)の概要

クエリビルダは、Laravelに標準で用意されているSQL文をプログラム的に構築するための抽象レイヤーです。

特徴:

  • 生のSQLに近い記述ができる

  • 軽量で高速(オーバーヘッドが少ない)

  • 柔軟に条件を構築できる

  • モデル(クラス)を必要としない

例:

php
$users = DB::table('users') ->where('active', 1) ->orderBy('name') ->get();

2. Eloquent ORMの概要

EloquentはLaravelに組み込まれている**Active Recordパターンに基づいたORM(Object Relational Mapper)**です。モデルクラスとテーブルを対応させ、オブジェクト指向的にデータベースを操作できます。

特徴:

  • 各テーブルに対応するモデルクラスが必要

  • リレーションやスコープなど、OOPに沿った記述が可能

  • データベースの行がオブジェクトとして扱える

  • バリデーションやアクセス修飾などをモデルに集約可能

例:

php
$users = User::where('active', 1) ->orderBy('name') ->get();

3. クエリビルダとEloquentの主な違い

比較項目 クエリビルダ Eloquent ORM
モデルの使用 不要 必須(モデルクラスが必要)
オブジェクト指向 非対応(配列やstdClassで結果取得) 対応(結果はEloquentモデルのインスタンス)
リレーション 手動で結合が必要(joinなど) hasOne, hasMany などで自動設定可能
可読性 SQLに近いが記述量が増えることもある シンプルで直感的な記述が可能
パフォーマンス 若干高速(モデルの変換処理が不要) やや低下するが機能的には豊富
利用目的の傾向 高度なクエリやパフォーマンス重視時に適用 ドメイン駆動設計や業務ロジックとの統合時に有効

4. 選択の指針

  • 高速かつ軽量な処理が求められるAPIやバッチ処理など → クエリビルダが適している

  • リレーションを多用し、モデル中心に設計されたアプリケーション → Eloquentが適している

  • 一部だけ複雑なクエリを組む必要がある場合 → Eloquentからクエリビルダへの切り替えが可能

php
// Eloquentモデルの中でクエリビルダを使う例 $users = User::where('active', 1) ->where(function ($query) { $query->where('role', 'admin') ->orWhere('role', 'editor'); }) ->get();

まとめ

目的 推奨される手法
単純なデータ取得 クエリビルダ
モデル中心の業務ロジック Eloquent
高パフォーマンスが必要 クエリビルダ
リレーションを多用する Eloquent

両者は補完的な関係にあり、ケースに応じて使い分けることが、Laravelでの開発において重要です。

ChatGPT4o 生成日:2025/06/23