【Rails】seeds.rbとFakerを使ってダミーデータ作ってみた
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のインストール手順
以下に手順を示します。
- Gemfileに以下のコードを書きます。
group :development, :test do
gem 'faker'
end
- ターミナルで以下のコマンドを実行します。
bundle install
- 終了
ちなみに、Fakerでどんなデータを利用できるかは以下のサイトから確認できます。
5.seeds.rbとFakerを使ってダミーデータを大量に作る手順
以下に手順を示します。
今回はユーザーのダミーデータを作成します。
- 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
- 以下のコマンドを実行します。
rails db:seed
3.終了
6.終わり
FactoryBotも似たような機能を提供してるので、いずれ調べてみようと思います。
この記事が少しでも役に立てば幸いです!
7.参考文献
Discussion
参考にさせていただきました!
今回は掲示板のダミーデータを作成と書かれているのですが、見た限りユーザーのダミーデータのようですね笑
ご指摘ありがとうございます!
修正させていただきました!