ztbuz@dev

人生に絶望しているZが、それでも技術を身につけようと必死になるブログ

Ruby on Railsでサンプルデータを登録するRakeタスクの作成方法

Ruby on Railsでのデータベースへの登録には、大きく分けて次の2つがあるのかな、と思います。

  1. 動作に必須となる初期データ
  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

おわりに

これで、ポチポチサンプルデータを作らなくてもよくなりました。 たとえばページングの確認にも使えます。

たぶんこれが年末最後の更新となりますが、明日以降も引き続き学習を頑張ります。。。