Active Record(RailsのORM)とは?初心者向けに概要をわかりやすく解説

Ruby on RailsのActive Recordについて、初心者でも理解できるよう基本概念から使い方までわかりやすく解説します。ORMの仕組みやメリットも合わせて紹介

Learning Next 運営
10 分で読めます

みなさん、Ruby on Railsでデータベースを扱うときに困ったことはありませんか?

SQLを書かずにデータベースを操作できたら便利だと思いませんか? 実は、RailsにはActive Recordという強力な機能があるんです。

この記事では、Active RecordというRailsのORM(Object-Relational Mapping)について、初心者の方でも理解できるようわかりやすく解説します。 データベース操作が苦手な方も、この記事を読めばActive Recordの基本がマスターできますよ!

Active Recordとは?簡単に理解しよう

Active Recordは、Ruby on Railsに組み込まれているORMライブラリです。 簡単に言うと、データベースとRubyのオブジェクトを橋渡しする仕組みのことです。

ORMって何?日常的な例えで説明

ORMを日常的な例えで説明してみましょう。

レストランで注文するときのことを想像してください。

  • お客さん(Ruby)は日本語で注文
  • 厨房(データベース)は料理の専門用語で理解
  • ウェイター(ORM)が両者の間を取り持つ

このウェイターの役割がまさにORMなんです!

なぜActive Recordを使うの?メリットを解説

Active Recordを使うメリットはたくさんあります。 主なメリットを見ていきましょう。

1. SQLを書かなくても大丈夫

通常、データベース操作にはSQLという言語が必要です。

SELECT * FROM users WHERE age >= 20;

でも、Active Recordを使えばRubyのコードで書けます。

User.where("age >= ?", 20)

どちらが読みやすいか一目瞭然ですよね!

2. データベースの違いを気にしない

MySQLでもPostgreSQLでも、コードは同じです。 データベースを切り替えても、コードの修正は最小限で済みます。

3. 安全性が高い

SQLインジェクションという攻撃から守ってくれます。 セキュリティ対策も自動でやってくれるので安心です。

Active Recordの基本的な使い方

それでは、実際の使い方を見ていきましょう。 初心者の方でも分かるよう、順番に説明します。

モデルの作成

まず、モデルを作成します。

rails generate model User name:string email:string age:integer

このコマンドで、Userモデルが作成されます。

データの保存(Create)

新しいユーザーを作成して保存する方法です。

# 方法1:newしてからsave
user = User.new(name: "田中太郎", email: "tanaka@example.com", age: 25)
user.save
# 方法2:createで一発作成
User.create(name: "佐藤花子", email: "sato@example.com", age: 30)

どちらの方法でも、データベースに保存されます。

データの取得(Read)

保存したデータを取得する方法もいろいろあります。

# 全件取得
users = User.all
# 条件を指定して取得
young_users = User.where("age < ?", 30)
# 1件だけ取得
first_user = User.first
user_by_id = User.find(1)

直感的で分かりやすいですよね!

データの更新(Update)

既存のデータを更新する方法です。

# ユーザーを取得して更新
user = User.find(1)
user.name = "田中次郎"
user.save
# updateメソッドで一発更新
user.update(name: "田中三郎", age: 26)

データの削除(Delete)

不要なデータを削除する方法です。

# ユーザーを取得して削除
user = User.find(1)
user.destroy
# 条件に合うものをまとめて削除
User.where("age < ?", 18).destroy_all

これらの操作をCRUD(Create, Read, Update, Delete)と呼びます。

Active Recordの便利な機能

基本操作以外にも、便利な機能がたくさんあります。

バリデーション(検証)

データを保存する前に、正しいかチェックできます。

class User < ApplicationRecord
# 名前は必須
validates :name, presence: true
# メールアドレスの形式をチェック
validates :email, format: { with: URI::MailTo::EMAIL_REGEXP }
# 年齢は0以上
validates :age, numericality: { greater_than_or_equal_to: 0 }
end

これで、不正なデータが保存されるのを防げます。

コールバック

データの保存前後に、自動で処理を実行できます。

class User < ApplicationRecord
# 保存前にメールアドレスを小文字に変換
before_save :downcase_email
private
def downcase_email
self.email = email.downcase
end
end

スコープ

よく使う検索条件を名前付きで定義できます。

class User < ApplicationRecord
# 成人ユーザーだけを取得するスコープ
scope :adults, -> { where("age >= ?", 20) }
# 最近登録したユーザーを取得するスコープ
scope :recent, -> { order(created_at: :desc).limit(10) }
end
# 使い方
User.adults
User.recent

便利な機能を使いこなせば、コードがすっきりします!

リレーション(関連)の設定

データベースのテーブル間の関係も簡単に設定できます。

1対多の関係

例えば、1人のユーザーが複数の投稿を持つ場合です。

# Userモデル
class User < ApplicationRecord
has_many :posts
end
# Postモデル
class Post < ApplicationRecord
belongs_to :user
end

これだけで関連付けが完了します!

使い方も簡単です。

# ユーザーの投稿を取得
user = User.find(1)
user.posts
# 投稿の作者を取得
post = Post.find(1)
post.user

多対多の関係

複数のタグを持つ記事のような関係も設定できます。

class Article < ApplicationRecord
has_many :article_tags
has_many :tags, through: :article_tags
end
class Tag < ApplicationRecord
has_many :article_tags
has_many :articles, through: :article_tags
end
class ArticleTag < ApplicationRecord
belongs_to :article
belongs_to :tag
end

Active Recordを使うときの注意点

便利なActive Recordですが、注意点もあります。

N+1問題に気をつけよう

これは初心者がよく陥る問題です。

# 悪い例:N+1問題が発生
users = User.all
users.each do |user|
puts user.posts.count # ユーザーごとにSQLが発行される
end
# 良い例:includesで解決
users = User.includes(:posts)
users.each do |user|
puts user.posts.count # SQLの発行回数が減る
end

includesを使うことで、パフォーマンスが大幅に改善されます。

大量データの扱い方

大量のデータを扱うときは、メモリに注意しましょう。

# 悪い例:全データをメモリに読み込む
User.all.each do |user|
# 処理
end
# 良い例:分割して処理
User.find_each do |user|
# 処理(1000件ずつ処理される)
end

find_eachを使えば、メモリを節約できます。

まとめ:Active Recordをマスターしよう!

Active Recordは、Ruby on Railsでデータベースを扱うための強力なツールです。

今回学んだポイントをまとめると:

  • SQLを書かずにデータベース操作ができる
  • 基本的なCRUD操作が簡単
  • バリデーションやコールバックなど便利機能が豊富
  • リレーションの設定も直感的
  • N+1問題など、注意点もある

最初は難しく感じるかもしれませんが、実際に手を動かしてみると意外と簡単です。 ぜひ、自分のプロジェクトでActive Recordを使ってみてください!

データベース操作が楽しくなること間違いなしです。 みなさんのRails開発が、もっとスムーズになることを願っています!

関連記事