データベース操作

RubyのWeb開発における「データベース操作」は、主にActive Record(Ruby on RailsにおけるORM)やSequelROMなどのライブラリを通じて行われます。以下では、Ruby on Railsの代表的なデータベース操作方法を中心に、基本から応用までを詳しく解説します。


1. ORM(Object-Relational Mapping)とは

Rubyでは、データベースのテーブルとRubyのクラスを対応させて操作する「ORM(オブジェクト関係マッピング)」が一般的に用いられます。RailsではActive Recordが標準搭載されています。

  • データベースの行 → Rubyのオブジェクト

  • データベースの列 → Rubyオブジェクトの属性(プロパティ)


2. Active Recordを使った基本操作

モデルの生成

bash
rails generate model User name:string email:string

このコマンドで、usersテーブルを操作するUserクラスが作成されます。

マイグレーションの実行

bash
rails db:migrate

この操作で、実際のデータベースにテーブルが作成されます。


3. データのCRUD操作(Create, Read, Update, Delete)

データの作成(Create)

ruby
user = User.new(name: "Taro", email: "taro@example.com") user.save # または User.create(name: "Hanako", email: "hanako@example.com")

データの読み出し(Read)

ruby
User.all # 全ユーザー取得 User.find(1) # IDが1のユーザー取得 User.find_by(email: "taro@example.com") # 条件付き検索

データの更新(Update)

ruby
user = User.find(1) user.update(name: "Taro Updated")

データの削除(Delete)

ruby
user = User.find(1) user.destroy

4. リレーション(関連付け)

Railsでは、テーブル間の関係を簡潔に定義できます。

  • has_many:1対多

  • belongs_to:多対1

  • has_one:1対1

例:UserとPostの関係

ruby
class User < ApplicationRecord has_many :posts end class Post < ApplicationRecord belongs_to :user end
ruby
user = User.find(1) user.posts.create(title: "Hello World", body: "本文")

5. バリデーション(検証)

データベースに保存する前に、モデルレベルで検証を行うことができます。

ruby
class User < ApplicationRecord validates :email, presence: true, uniqueness: true end

6. スコープとクエリの高度な活用

スコープ

ruby
class User < ApplicationRecord scope :active, -> { where(active: true) } end User.active

SQLに近い構文

ruby
User.where("created_at >= ?", 1.week.ago) .order(name: :asc) .limit(10)

7. トランザクション

複数の操作をまとめて実行し、失敗時にはロールバックすることができます。

ruby
User.transaction do user = User.create!(name: "Test") user.posts.create!(title: "タイトル", body: "本文") end

8. SequelやROMの紹介(代替ORM)

Sequelの例

ruby
require 'sequel' DB = Sequel.connect('sqlite://blog.db') users = DB[:users] users.insert(name: 'Taro', email: 'taro@example.com')

Sequelはより軽量で、柔軟なクエリ構築が可能です。


まとめ

Rubyにおけるデータベース操作は、Active Recordを通じて直感的かつ効率的に行うことができます。複雑なリレーションや検証処理もモデル内で定義できるため、MVCアーキテクチャと親和性が高く、保守性にも優れています。

他のORM(Sequel、ROMなど)を用いることで、より低レベルの制御や構造化も可能です。プロジェクトの要件に応じて使い分けることが重要です。

生成日:2025/05/03