Edited at

fakerとforgeryを使ってダミーデータを生成する

More than 3 years have passed since last update.


流れ


  1. gemをインストール

  2. githubにてデータを生成するためのメソッドを確認

  3. seeds.rbファイルに記述

  4. 生成(手順3を飛ばしてコンソールでの保存も可能だが、再利用ができないためおすすめはしない。)


gemをインストール

まず、今回使用するgemをプロジェクト内にインストールするためにGemfileに以下を記述します。


Gemfile

gem 'faker'

gem 'forgery'

それから、ターミナルでbundle installを実行します。


ターミナル

$ bundle install



メソッドを確認

次に生成したいデータを生成するためのメソッドをそれぞれのgemのgithubにて確認します。

faker

forgery

例えば、短文のダミーデータを生成したいとします。

その場合、Faker::Lorem.sentenceを記述することで短文のダミーデータが取得できます。


ターミナル

$ rails c

[1] pry(main)> Faker::Lorem.sentence
=> "Ut totam ipsum sit sed ratione."
[2] pry(main)> Faker::Lorem.sentence
=> "Rerum numquam tenetur facilis incidunt aut pariatur ut in."
[3] pry(main)> Faker::Lorem.sentence
=> "Qui deserunt sit sit commodi consequatur harum ex sequi."

それぞれのメソッドがどんなものを生成するのか、コンソールで試すこともできます。


ターミナル

$ rails c

[1] pry(main)> Faker::Business.credit_card_number
=> "1211-1221-1234-2201"
[2] pry(main)> Forgery('date').day
=> 4
[3] pry(main)> Faker::Commerce.color
=> "purple"


seeds.rbに記述

テストを行なうためのサンプルデータを追加したり、顧客データなどの既に用意されているデータを事前に追加しておく場合などに使います。

追加したいActiveRecord::Baseクラスを継承したモデルクラスとcreateメソッドを使用して、データベースにダミーデータを保存するための記述をします。

今回は、usersテーブルに100件のダミーデータを追加したいと思います。fakerとforgeryを適宜使用しています。


seeds.rb

100.times do

User.create(email: Forgery('email').address, password: Forgery(:basic).password, nickname: Forgery('internet').user_name ,avatar: Faker::Avatar.image, place_id: Faker::Number.between(1, 100))
end


生成

あとは、seeds.rbファイルを実行するためのコマンドを実行するだけです。


ターミナル

$ bundle exec rake db:seed


生成するデータの量によって終了までの時間が左右されます。ユーザーデータ等データの重複が許されない場合、100件を指定しても重複するデータははじかれるため、100件分すべて生成されることはありません。ツイート情報のように重複があっても許される場合は100件生成されます。