みなさん、こんにちは。
前回は、フォームとバリデーション表示を通して、ユーザーの入力がモデルに渡り、保存やエラー表示につながる流れを確認しました。今回は、その裏側にある、Railsのデータ操作の中心である Active Record を扱いましょう。
Active Record は、データベースのテーブルをRubyのクラスとして、行をオブジェクトとして扱えるようにする仕組みです。試験では、モデルとテーブルの対応、レコードの作成・取得・更新・削除、クエリメソッドの基本が問われやすい分野です。実務でも、Active Recordを理解しているかどうかで、Railsアプリケーションの読みやすさは大きく変わります。SQLをまったく意識しなくてよいという意味ではなく、RailsがどのようにSQLを包み、Rubyらしく扱える形にしているのかを知ることが大切です。
Active Recordとは何か
Railsにおけるモデルの多くは ApplicationRecord を継承します。たとえば Article モデルは、articles テーブルと対応します。
class Article < ApplicationRecord
endこの短いコードだけで、Article.new、Article.find、Article.where などのメソッドが使えるようになります。Railsはクラス名 Article からテーブル名 articles を推測します。ここにも Convention over Configuration の考え方があります。Active Recordの基本は、「テーブルをクラスとして扱い、1件のレコードをインスタンスとして扱う」ことです。たとえば articles テーブルの1行は、Rubyでは Article オブジェクトとして操作できます。
レコードを作成する
レコードを作るには new と save、または create を使います。new はオブジェクトを作るだけで、save を呼ぶまでデータベースには保存されません。
article = Article.new(title: "Rails入門", body: "Active Recordを学びます")
article.save
Article.create(title: "Rails試験対策", body: "基礎を確認します")create は new と save をまとめたようなメソッドです。ただし、バリデーションに失敗すると保存されず、戻り値のオブジェクトに errors が入ります。前回扱ったフォーム再表示は、この仕組みとつながっています。
試験では、new だけでは保存されないこと、save や create でデータベースに反映されることを区別しておきましょう。
レコードを取得する
データを取得する代表的なメソッドには find、find_by、where があります。
Article.find(1)
Article.find_by(title: "Rails入門")
Article.where(published: true)find は主キーで1件を取得します。該当するレコードがない場合は例外が発生します。find_by は条件に合う最初の1件を返し、見つからなければ nil を返します。where は条件に合うレコードの集合を返します。これらのメソッドの違いは実務でも重要です。必ず存在する前提なら find、存在しない可能性を自然に扱いたいなら find_by、一覧や絞り込みには where、というように使い分けます。
もう一つ意識したいのは、戻り値の種類です。find や find_by は基本的に1件の Article オブジェクトを返します。一方、where は ActiveRecord::Relation という、条件を持った検索結果のようなオブジェクトを返します。配列のように each で繰り返せますが、単なる配列ではありません。この仕組みによって、Railsでは Article.where(published: true).order(created_at: :desc) のように条件をつなげて書けます。SQLを文字列で組み立てるのではなく、Rubyのメソッドを組み合わせて問い合わせを表現できる点がActive Recordらしいところです。クエリについてはあとで扱いますが、その前提としても、この感覚を持っておくと理解しやすくなります。
更新と削除の基本
既存レコードを変更するには update を使います。属性を代入してから save する書き方もできます。
article = Article.find(1)
article.update(title: "更新後のタイトル")
article.destroyupdate はバリデーションを通った場合に保存されます。destroy はレコードを削除し、関連付けの設定によっては関連データにも影響します。削除は取り消しが難しい操作なので、実務では認可や確認画面と組み合わせて慎重に扱います。
このように、Active Recordは便利ですが、データベースを操作していることに変わりはありません。Railsらしく短く書ける一方で、どのコードが保存・更新・削除を発生させるのかを意識することが大切です。
モデルに置くべき責務
Active Recordモデルは、データベースの表現だけでなく、そのデータに関するルールも持ちます。たとえばバリデーションや、状態を判定する小さなメソッドはモデルに置くと自然です。
class Article < ApplicationRecord
validates :title, presence: true
def published?
published_at.present?
end
endビューやコントローラに判定ロジックを散らすより、モデルにまとめることで、同じルールをアプリケーションの複数の場所から使えます。これはDRYにもつながります。ただし、何でもモデルに詰め込めばよいわけではありません。まずは「そのデータ自身に関するルールかどうか」を考えると、Railsらしい責務分担を判断しやすくなります。
模擬問題
問題1
問題:
次のうち、Article.new の説明として最も適切なものを1つ選びなさい。
1. 新しいArticleオブジェクトを作成し、同時にデータベースへ保存する
2. 新しいArticleオブジェクトを作成するが、saveするまでデータベースには保存しない
3. articlesテーブルから最初の1件を取得する
4. articlesテーブルの全レコードを削除する
正解:
2
解説:
new はRubyオブジェクトを作るだけで、データベースへの保存は行いません。保存するには save を呼ぶ必要があります。1は create の説明に近く、3は取得、4は削除の説明です。試験では、オブジェクト生成と永続化を分けて理解しておくことが大切です。
問題2
問題:
find、find_by、where の使い分けとして最も適切なものを1つ選びなさい。
1. find は条件に合う複数件を返す
2. find_by は見つからない場合に必ず例外を発生させる
3. where は条件に合うレコードの集合を返す
4. where はデータベースに保存するためのメソッドである
正解:
3
解説:
where は条件に合うレコードの集合を返すため、一覧表示や絞り込みでよく使います。find は主キーで1件を取得し、見つからない場合は例外が発生します。find_by は条件に合う最初の1件を返し、見つからない場合は nil を返します。4は保存処理ではありません。
問題3
問題:
Railsらしいモデル設計として最も適切なものを1つ選びなさい。
1. titleが空かどうかの判定をすべてビューに書く
2. 記事データ自身に関するバリデーションをArticleモデルに書く
3. SQL文字列をすべてコントローラで組み立てる
4. 削除処理は認可を考えず、どのユーザーにも実行させる
正解:
2
解説:
データ自身に関するルールはモデルに置くと、複数の画面や処理から同じルールを使えます。1はビューに責務を持たせすぎています。3はRailsのクエリメソッドを活かせず、コントローラが肥大化しやすくなります。4はActive Recordの話以前に、安全なアプリケーション設計として不適切です。
まとめ
今回は、Active Recordの基礎として、モデルとテーブルの対応、レコードの作成、取得、更新、削除を整理しました。Active Recordを使うと、データベースの行をRubyオブジェクトとして扱えるため、Railsアプリケーションのコードは読みやすくなります。試験では、new と create の違い、find、find_by、where の使い分け、update や destroy がデータベースに影響することを押さえておきましょう。実務では、短く書ける便利さだけでなく、そのコードがどのSQLや保存処理につながるのかを意識することが重要です。
次回は、Active Recordモデルに書く代表的なルールであるバリデーションを詳しく扱います。入力値をどのように検証し、ユーザーに分かりやすく伝えるのかを見ていきましょう。
Rails7認定ベーシック試験について
全国300か所で通年実施しています。詳細は以下をご覧ください。

また、450ページを超える教科書も安価に出版しています。学習にあたってご活用ください。詳細は以下をご覧ください。
Rails 7 技術者認定ベーシック試験公式教科書ベータ版
著者:小澤昌樹 発行:Rails技術者認定試験運営委員会
価格(税込):ペーパーバック版 2,497円 Kindle版 1250円
ページ数:471ページ


