そもそもseed.rbの役割とは?
よくダミーデータの投入する方法の記事を目にするが、ほとんどがseed.rbを使っている。
ただし、seed.rbは基本的に初期データをテーブルに追加したいときなどに使うものであって、ダミーデータを投入するためのものではない。
実装
ゴール
bin/rails db:dummy_data
というコマンドでdbにダミーデータを投入できるようにする。
ダミーデータ生成プログラム
db/
ディレクトリ以下にdummy_data.rb
を作成する。
基本的に、dummy_data.rb
ファイル内にダミーデータ生成プログラムを記述する。
以下の例はUserモデルに対して、ダミーデータを投入するプログラムになっている
def users
2.times do |index|
name = Faker::Name
last_name = name.last_name
first_name = name.first_name
User.create(
last_name: last_name,
first_name: first_name,
username: "example_worker#{index+1}",
email: "example#{index+1}@example.com",
password: 'foobar123',
password_confirmation: 'foobar123',
activated: true
)
end
end
users
※ 細々としたプログラムについての説明は省略
ただし、これだけではdb:seed
のようなコマンドがないので、実際に開発環境上のdbにデータを生成することはできない。
タスク実行の設定
lib/tasks/
ディレクトリに、dummy_data.rake
ファイルを作成する。
namespace :db do
task dummy_data: :environment do
load(File.join(Rails.root, 'db', 'dummy_data.rb'))
end
end
上記のタスクを設定することで、
bin/raisl db:dummy_data
をターミナルで実行することができ、作成したダミーデータ生成プログラム
が実行される。
これで無事、ダミーデータの生成とDB投入が成功する。
まとめ
正直、seed.rbやseed-fuでダミーデータ生成(投入)してもよくね?という声が多数なきはするが、
僕としては、わけて考えたい。というより、用途が別なのだからわけて考えるべきであると思っている。