LoginSignup
12
9

More than 3 years have passed since last update.

gem Fakerでリアルなダミーデータを作るよ

Posted at

何をしたか

Railsの課題を実施しています。アウトプットを何かするまでが課題なのですが...。
スクールを卒業して以来、1回も触っていなかった、gem Fakerが出てきたので、こちらについて、使用方法をまとめたいと思います。

尚、実行環境は下記の通りです。

  • Rails 5.2.3
  • Ruby 2.6.0

導入方法

まずは公式の情報の確認から。公式のノートによると、

  • デフォルトではユニークなデータを生成するとは限らないから、ユニークなデータが欲しい時にはオプションをつけてね。
  • master ブランチには、まだリリースされていないデータが含まれることがあるから、利用可能なメソッドはREADMEで確認してね。

とのことだそうです。了解ですー

インストールはとても簡単で、Gemfileに以下を記入し、

Gemfile
gem 'faker'

bundle installで完了です:relaxed:

早速試す

Fakerで生成できる要素は、こちらに一覧がありました。コンソールで早速色々実験してみます。

> Faker::Dessert.variety
=> "Upside Down Pineapple Cake"
> Faker::Address.city
=> "千葉市"
> Faker::Address.street_name
=> "真央"
> Faker::Address.zip
=> "191-3257"
> Faker::Address.street_address
=> "73696 桜"
> Faker::App.name
=> "Alpha"

システムのタイムゾーンを東京、デフォルトの言語を日本語にしているためか、日本語のデータにも対応してくれていますね:relaxed:

Seedファイルを作る

では、コレで早速Seedファイルを作っていこうと思います。

db/seeds.rb
5.times do
  user = User.create!(
    username: Faker::JapaneseMedia::StudioGhibli.character,
    email: Faker::Internet.email,
    password: 'foobar',
    password_confirmation: 'foobar',
  )
  puts "\"#{user.username}\" has created!"
end

passwordpassword_confirmarionを同じデータにする方がわからなかったのと、ランダムなパスワードが生成されたら、ログインがしにくくなってしまい開発環境では不便なので、usernameemailだけFakerで生成することにしました。名前にジブリキャラの名前を採用しているのは、趣味です:grin:

最後にputsを利用して、出力されるキャラクターの名前を書き出しています。
上記の結果、出力された文字列は下記の通り。

"Donald Curtis" has created!
"Chihiro Ogino" has created!
"Yupa" has created!
"Yupa" has created!
"Haku" has created!

おお。ユパ様が2人作られてしまった。。。。

ユニークなデータを作る

同名の人が2人いるのはややこしいので、usernameの部分は、下記の通り書き換えました。

db/seeds.rb
# 抜粋
username: Faker::JapaneseMedia::StudioGhibli.unique.character,

uniqueオプションをつけると、デフォルトでユニークなデータが生成されるようになります。
DBをリセットして、もう一度rails db:seedを実行すると。。。

"Traveling Soot" has created!
"Lettie Hatter" has created!
"Jhil" has created!
"Mr. Piccolo" has created!
"Haku" has created!

今度はユニークなユーザーが作成されました^^

最終的なファイル

最終的なファイルは、以下のように書き換えました。どのテーブルのデータが読み込まれたのかわかりやすくなっています。

db  # 関係あるファイルだけ表示
├── seeds
│   ├── users.rb
│   └── posts.rb
└── seeds.rb
db/seeds.rb
require './db/seeds/users'
require './db/seeds/posts'
db/seeds/users.rb
puts 'users ...'
5.times do
  user = User.create!(
    username: Faker::JapaneseMedia::StudioGhibli.unique.character,
    email: Faker::Internet.email,
    password: 'foobar',
    password_confirmation: 'foobar',
  )
end
db/seeds/posts.rb
puts 'posts ...'
User.limit(10).each do |user|
  user.posts.create!(body: Faker::Hacker.say_something_smart,
    image: "https://picsum.photos/350/350/?random")
end

以上で、実装はおしまいです^^

感想など

以前、こちらの記事(『Rails環境ごとにSeedデータ切り替えるseeds.rbの書き方』)を読んで、「読み込んだデータの情報が出力される書き方が便利だな」と思っていたのですが、

今回カリキュラムで同じ書き方がされていて、「あ、コレって普通に使われている書き方なんだ:grinning:」と認識できました。
個人的には、createではなくcreate!にして、エラー内容を出力させる書き方がお気に入り:relaxed:

とにかくにも、スクールを出て以来一度も触っていなかったFakerにまた出会えてよかったです:grinning:
今度は、やり方をしっかり把握できたので、またダミーデータの生成に使っていきたいです:star:

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9