何をしたか
Railsの課題を実施しています。アウトプットを何かするまでが課題なのですが...。
スクールを卒業して以来、1回も触っていなかった、gem Faker
が出てきたので、こちらについて、使用方法をまとめたいと思います。
尚、実行環境は下記の通りです。
Rails 5.2.3
Ruby 2.6.0
導入方法
- デフォルトではユニークなデータを生成するとは限らないから、ユニークなデータが欲しい時にはオプションをつけてね。
-
master
ブランチには、まだリリースされていないデータが含まれることがあるから、利用可能なメソッドはREADMEで確認してね。
とのことだそうです。了解ですー
インストールはとても簡単で、Gemfileに以下を記入し、
gem 'faker'
bundle install
で完了です
早速試す
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"
システムのタイムゾーンを東京、デフォルトの言語を日本語にしているためか、日本語のデータにも対応してくれていますね
Seedファイルを作る
では、コレで早速Seedファイルを作っていこうと思います。
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
password
とpassword_confirmarion
を同じデータにする方がわからなかったのと、ランダムなパスワードが生成されたら、ログインがしにくくなってしまい開発環境では不便なので、username
とemail
だけFakerで生成することにしました。名前にジブリキャラの名前を採用しているのは、趣味です
最後にputs
を利用して、出力されるキャラクターの名前を書き出しています。
上記の結果、出力された文字列は下記の通り。
"Donald Curtis" has created!
"Chihiro Ogino" has created!
"Yupa" has created!
"Yupa" has created!
"Haku" has created!
おお。ユパ様が2人作られてしまった。。。。
ユニークなデータを作る
同名の人が2人いるのはややこしいので、username
の部分は、下記の通り書き換えました。
# 抜粋
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
require './db/seeds/users'
require './db/seeds/posts'
puts 'users ...'
5.times do
user = User.create!(
username: Faker::JapaneseMedia::StudioGhibli.unique.character,
email: Faker::Internet.email,
password: 'foobar',
password_confirmation: 'foobar',
)
end
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の書き方』)を読んで、「読み込んだデータの情報が出力される書き方が便利だな」と思っていたのですが、
今回カリキュラムで同じ書き方がされていて、「あ、コレって普通に使われている書き方なんだ」と認識できました。
個人的には、create
ではなくcreate!
にして、エラー内容を出力させる書き方がお気に入り
とにかくにも、スクールを出て以来一度も触っていなかったFaker
にまた出会えてよかったです
今度は、やり方をしっかり把握できたので、またダミーデータの生成に使っていきたいです