🦹‍♀️

【Rails】seeds.rbとFakerを使ってダミーデータ作ってみた

2021/07/20に公開約2,300字2件のコメント

1.この記事をなぜ書いたか

seeds.rbの使い方を忘れてしまったので、復習の意味で記事を作成しました。

記事の中で間違いがある場合、コメント頂けると嬉しいです。

2.seeds.rbとは何か

seeds.rbとは、テーブルにデータを作成するためのファイルです。 事前に、大量のテストデータや管理人のデータを作成する際に役に立ちます。このファイルには登録したいデータとcreate!メソッドを書きます。その後、rails db:seedコマンドを実行すると、seed.rbに書いたデータがテーブルに保存されます。データの作成と保存を手動ではなく自動で実行するので、とても便利です。このような、テーブルにデータを保存する機能のことをシード機能と言います。注意点としては、既に登録されているデータを考慮しないので、データの重複が発生してしまう可能性があります。そのため、テーブルの初期化をしてからシード機能を使った方が良さそうです。

3.Fakerとは何か

ダミーデータを作成する際に、カラムに入れるデータを自分で決めてたら面倒です。そういう時にFakerを使うと便利です。Fakerとは、ある項目のデータを自動で出力してくれるgemです。 分かりづらいので、以下のコードを見てください。Faker::Name.first_nameと入力すると、いろんな名前が出力されます。つまり、Fakerとseeds.rbを組み合わせると、リアルなデータを簡単に作成することができます。

ターミナル
irb(main):001:0> Faker::Name.first_name 
=> "Jarvis"
irb(main):002:0> Faker::Name.first_name 
=> "Winston"
irb(main):003:0> Faker::Name.first_name 
=> "Gregory" 
irb(main):004:0> Faker::Name.first_name 
=> "Rosann"
irb(main):005:0> Faker::Name.first_name 
=> "Coleman"
irb(main):006:0> 

注意点としては、デフォルトではユニークなデータを作成しないということです。 そのため、ユニークなデータを作成する場合、以下のコードのようにuniqueを記述すれば大丈夫です。(ユニークなデータの数に限りがある可能性もあります)

ターミナル
irb(main):001:0> Faker::Name.unique.first_name 
=> "Renato"
irb(main):002:0> Faker::Name.unique.first_name 
=> "Jules"
irb(main):003:0> Faker::Name.unique.first_name 
=> "Annamaria"
irb(main):004:0> Faker::Name.unique.first_name 
=> "Brendon"
irb(main):005:0> Faker::Name.unique.first_name 
=> "Clarita"
irb(main):006:0> 

4.Fakerのインストール手順

以下に手順を示します。

  1. Gemfileに以下のコードを書きます。
Gemfile
  group :development, :test do
    gem 'faker'
  end
  1. ターミナルで以下のコマンドを実行します。
ターミナル
  bundle install
  1. 終了

ちなみに、Fakerでどんなデータを利用できるかは以下のサイトから確認できます。

https://github.com/faker-ruby/faker#generators

5.seeds.rbとFakerを使ってダミーデータを大量に作る手順

以下に手順を示します。
今回はユーザーのダミーデータを作成します。

  1. db/seeds.rbに以下のコードを書きます。
db/seeds.rb
20.times do |n|
  User.create!(
    last_name: Faker::Name.unique.last_name,
    first_name: Faker::Name.unique.first_name,
    email: Faker::Internet.unique.email,
    password: "3150test",
    password_confirmation: "3150test"
  )
end
  1. 以下のコマンドを実行します。
ターミナル
  rails db:seed

3.終了

6.終わり

FactoryBotも似たような機能を提供してるので、いずれ調べてみようと思います。

この記事が少しでも役に立てば幸いです!

7.参考文献

https://github.com/faker-ruby/faker
https://qiita.com/tanutanu/items/4006bd868affa535adb0

Discussion

参考にさせていただきました!
今回は掲示板のダミーデータを作成と書かれているのですが、見た限りユーザーのダミーデータのようですね笑

ご指摘ありがとうございます!
修正させていただきました!

ログインするとコメントできます