Ruby on Railsでサンプルデータを登録するRakeタスクの作成方法
Ruby on Railsでのデータベースへの登録には、大きく分けて次の2つがあるのかな、と思います。
- 動作に必須となる初期データ
- 動作を確認するためのサンプルデータ
1に関してはseeds.rb
で行ない、2に関してはRakeタスクでやると、管理しやすいのかな〜と思っています。
ここでは、2のRakeタスクの方法についてメモします。
Rakeタスクを作成する方法
ファイルを準備する
Rakeタスクは、lib/tasks/foo.rake
として作成します。
手動でもよいし、以下の方法でも作成できます。
$ rails g task foo
Rakeタスクを書く
以下は、50人のサンプルユーザを登録するやつです。
namespace :db do
desc 'サンプルデータを登録する'
task populate: :environment do
50.times do |n|
User.create(
name: "ユーザ#{n}",
email: "user-#{n}@example.com",
password: 'test',
password_confirmation: 'test'
)
end
end
end
:environment
は、モデルにアクセスするために必須な、重要な部分なので、忘れないように書きます。
実行する
とりあえず実行してみます。
古いデータはdb:reset
で削除します。
$ bundle exec rake db:reset
$ bundle exec rake db:populate
関数で分ける
処理を増やしていくと管理が大変になるので、関数で分けたりします。 上の例を関数で分けてみます。
namespace :db do
desc 'サンプルデータを登録する'
task populate: :environment do
make_users
end
end
def make_users
50.times do |n|
User.create(
name: "ユーザ#{n}",
email: "user-#{n}@example.com",
password: 'test',
password_confirmation: 'test'
)
end
end
Fakerでサンプルデータを登録する
上の例だとデータが味気ないので、本物っぽいいいデータを登録したくなります。 FakerというGemがこれを実現します。
使い方は以下に詳しいです。
インストール
いつもどおり、Gemfile
に書いてbundle install
するだけです。
gem 'faker'
本物っぽい名前を生成する
以下のように、Faker::Name.name
で本物っぽい名前を生成してくれます。
日本語にローカライズしていれば日本人名も生成してくれます。
def make_users
50.times do |n|
User.create(
name: Faker::Name.name,
email: "user-#{n}@example.com",
password: 'test',
password_confirmation: 'test'
)
end
end
おわりに
これで、ポチポチサンプルデータを作らなくてもよくなりました。 たとえばページングの確認にも使えます。
たぶんこれが年末最後の更新となりますが、明日以降も引き続き学習を頑張ります。。。