Skip to content

Factory Bot

Factory Bot は、テストや開発で必要な**ダミーデータ(テストデータ)**を効率的に生成するための Gem です。

テストを書く際、毎回手動で User.new(...) のようにオブジェクトを生成するのは非効率で、コードの重複も発生します。Factory Bot を使うと、テンプレートとなる「ファクトリ」を一度定義すれば、必要に応じて何度でも、ランダムな属性値を持つテストデータを生成できます。

spec/factories/users.rb のようなファイルに、モデルのファクトリを定義します。

FactoryBot.define do
factory :user do
name { "テストユーザー" }
email { "test-#{rand(100)}@example.com" }
password { "password" }
end
end

テストコード内で、定義したファクトリを使ってデータを生成します。

# create メソッドでデータベースに保存
user = create(:user)
# build メソッドで保存しないインスタンスを生成
user = build(:user)
  • テストコードの可読性が向上し、テストデータの準備が簡単になります。
  • 関連付け(アソシエーション)を持つデータも簡単に生成できます。

Seeder は、アプリケーションの初期データやデモデータをデータベースに投入するための仕組みです。Rails の db/seeds.rb ファイルにデータ投入のロジックを記述し、rails db:seed コマンドで実行します。

開発環境をセットアップする際や、デモ環境を構築する際に、アプリケーションが動作するために最低限必要なデータを手動で投入するのは手間がかかります。Seeder を使うと、これらのデータを自動化できます。

db/seeds.rb ファイルに、データ生成のコードを記述します。

# シードデータが存在しない場合のみ作成
unless User.find_by(email: "admin@example.com")
User.create!(
name: "Admin User",
email: "admin@example.com",
password: "password"
)
end
# 記事データを複数作成
10.times do |i|
Post.create!(
title: "テスト記事#{i+1}",
content: "これはテスト用の記事です。",
user: User.first
)
end

以下のコマンドで、シードデータをデータベースに投入します。

Terminal window
rails db:seed
  • 開発環境やデモ環境の構築が自動化されます。
  • チームメンバー間で一貫した初期データを持つことができます。
  • Factory Bot: テスト用途に特化しています。各テストケースで独立した、予測可能なテストデータを生成するのに最適です。
  • Seeder: 開発環境やデモ環境の初期データを投入するのに使われます。一度だけ実行すればよい永続的なデータの作成に向いています。

これらのツールを適切に使い分けることで、Rails アプリケーションの開発サイクルをより効率的でスムーズにすることができます。