カテゴリ: Rails 更新日: 2026/01/10

RailsモデルとActive Record基礎|クエリログの読み方を理解してEXPLAIN・joins・includesの違いを学ぼう

クエリログの読み方:EXPLAIN/joins/includesの違いを理解
クエリログの読み方:EXPLAIN/joins/includesの違いを理解

先生と生徒の会話形式で理解しよう

生徒

「Railsを動かすと、画面に英語や数字がたくさん流れてきて怖いです……」

先生

「それはクエリログですね。データベースとの会話内容が表示されているだけです。」

生徒

「joinsとかincludesとか書くと、ログが変わるのはなぜですか?」

先生

「その違いが分かると、Railsの動きが一気に理解しやすくなりますよ。」

1. クエリログとは?Railsとデータベースの会話記録

1. クエリログとは?Railsとデータベースの会話記録
1. クエリログとは?Railsとデータベースの会話記録

クエリログとは、Railsがデータベースに対して 「どんなデータをください」とお願いしたかを そのまま表示した記録のことです。 Railsでは、Active Recordを通して自動的に データベースとやり取りをしています。

初心者の方は、クエリログを 「レジでのやり取りがレシートに印字される」 ようなものだと考えてみてください。 商品名や金額が分かることで、 何を買ったかが後から確認できます。

2. クエリログの基本的な読み方

2. クエリログの基本的な読み方
2. クエリログの基本的な読み方

Railsのログには、SELECTやFROMといった 英単語が並びます。 これはSQLと呼ばれる、データベース専用の言葉です。 難しく見えますが、最初は雰囲気だけ分かれば十分です。


User.all

SELECT "users".* FROM "users"

このログは、「usersという表から、全部のデータを取ってきた」 という意味になります。 Railsのコードとログが対応していることを 意識するだけで理解が進みます。

3. joinsとは?表同士をつなげて取得する方法

3. joinsとは?表同士をつなげて取得する方法
3. joinsとは?表同士をつなげて取得する方法

joinsは、複数のテーブルを結合して 一度に条件検索を行うための方法です。 データベースにとって分かりやすい命令なので、 処理が速くなることが多いです。

例えるなら、2冊の名簿を机の上で 並べて照らし合わせるイメージです。


Post.joins(:user)

SELECT "posts".* FROM "posts"
INNER JOIN "users" ON "users"."id" = "posts"."user_id"

joinsは検索向きですが、 関連データを画面表示で使うときは、 N+1問題が起きやすい点に注意が必要です。

4. includesとは?表示を意識したやさしい取得方法

4. includesとは?表示を意識したやさしい取得方法
4. includesとは?表示を意識したやさしい取得方法

includesは、関連するデータを あらかじめまとめて読み込む方法です。 主に画面表示で使われます。

買い物に行く前に、 必要な物を全部リストアップして 一度で買うような感覚です。


Post.includes(:user)

SELECT "posts".* FROM "posts"
SELECT "users".* FROM "users" WHERE "users"."id" IN (1,2,3)

クエリが2回に分かれている点が特徴です。 その代わり、画面表示時に 無駄な問い合わせが増えにくくなります。

5. EXPLAINとは?データベースの考え方をのぞく道具

5. EXPLAINとは?データベースの考え方をのぞく道具
5. EXPLAINとは?データベースの考え方をのぞく道具

EXPLAINは、 「この検索はどういう順番で処理されますか?」 とデータベースに質問する仕組みです。 Railsのコードが遅い原因を調べるときに使います。

これは、地図アプリで 「この道は渋滞しますか?」 と確認するようなものです。


Post.explain

初心者のうちは、 EXPLAINの細かい内容まで 理解できなくても問題ありません。 「重そうかどうか」を感じ取れるだけで十分です。

6. joins・includes・EXPLAINをどう使い分けるか

6. joins・includes・EXPLAINをどう使い分けるか
6. joins・includes・EXPLAINをどう使い分けるか

joinsは検索条件を絞りたいときに向いています。 includesは画面表示で関連データを使うときに便利です。 EXPLAINは、処理が遅いと感じたときの確認用です。

クエリログを見る習慣がつくと、 Railsが裏側で何をしているのかが 少しずつ見えるようになります。 それが、Active Recordを理解する 大きな一歩になります。

関連記事:
カテゴリの一覧へ
新着記事
New1
Ruby
Rubyプログラムの実行方法まとめ:スクリプト・REPL・Shebang・実行権限の基本
New2
Rails
アセットの全体像をやさしく解説!importmap・jsbundling・cssbundlingの選び方
New3
Rails
Rails Action Cable入門|チャネル・接続・サブスクライブの基本を図解でやさしく解説
New4
Rails
RailsのScaffoldは使うべき?初心者向けにメリット・デメリット・安全な使い方と代替案を解説!
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
No.3
Java&Spring記事人気No3
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.4
Java&Spring記事人気No4
Rails
Rails認可をやさしく理解!CanCanCan入門:ability.rbの定義とload_and_authorize_resource実例
No.5
Java&Spring記事人気No5
Ruby
Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け
No.6
Java&Spring記事人気No6
Ruby
OpenSSL関連エラーの直し方を完全解説!証明書・ビルドオプション・brew対策まとめ
No.7
Java&Spring記事人気No7
データベース
MySQLとは?初心者向けにデータベースの特徴とできることをやさしく解説
No.8
Java&Spring記事人気No8
データベース
PostgreSQLのCTE(WITH句)完全解説!複雑なSQLを整理して読みやすくする書き方