カテゴリ: 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
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Rails
RailsモデルとActive Record基礎|クエリログの読み方を理解してEXPLAIN・joins・includesの違いを学ぼう