Fakerを利用すると簡単にダミーデータが作成できます。
今回はFakerの利用してRailsアプリケーションにダミーデータを作成する方法について紹介します。
Fakerの利用方法
gemをインストールします。
Gemfile
group :development, :test do
gem 'faker'
end
$ bundle
Fakerにはさまざまなカテゴリのダミーデータが用意されています。
たとえばFaker::Nameを利用すると『名前』に関するダミーデータが生成されます。
$ rails c
> Faker::Name.last_name
=> "Nikolaus"
unique
メソッドを利用するとFakerから出力されるダミーデータの値がユニークになります。
unique.clear
を利用するとFakerで記憶されているユニーク値がリセットされます。
$ rails c
> Faker::Name.unique.last_name
=> "Johnson"
> Faker::Name.unique.clear
Fakerを利用してRailsアプリケーションに初期データを作成する方法
具体例として、name属性をもつUserモデルに対してランダムな初期データをインサートする方法について紹介します。
まずはサンプルとなるモデルとテーブルを作成します。
$ rails g model user name
$ rails db:migrate
seed.rbとFakerを利用することでランダムな初期データが作成できます。
usersテーブルに初期データを5レコード用意する場合は以下のようになります。
seed.rb
5.times {
User.create!(
name: Faker::Name.last_name
)
}
rails db:seed
を実行すると初期データが作成されます。
### seedデータをテーブルにインサート
$ rails db:seed
### seedデータのインサートをやり直したい場合
$ rails db:migrate:reset
$ rails db:seed
テーブルの中身を確認するとランダムな名前が挿入されていることがわかります。
select * from users
+----+----------+----------------------------+----------------------------+
| id | name | created_at | updated_at |
+----+----------+----------------------------+----------------------------+
| 1 | Beahan | 2021-05-25 13:58:35.177506 | 2021-05-25 13:58:35.177506 |
| 2 | Pfeffer | 2021-05-25 13:58:35.187662 | 2021-05-25 13:58:35.187662 |
| 3 | Daniel | 2021-05-25 13:58:35.195076 | 2021-05-25 13:58:35.195076 |
| 4 | Kiehn | 2021-05-25 13:58:35.202491 | 2021-05-25 13:58:35.202491 |
| 5 | Schaefer | 2021-05-25 13:58:35.209674 | 2021-05-25 13:58:35.209674 |
+----+----------+----------------------------+----------------------------+
日本語のダミーデータを用意したい場合
Fakerのロケールを変更することでダミーデータの言語を変更できます。
Fakerのロケールファイル一覧はこちらで確認できます。
Fakerのロケール設定を日本語にすることで日本語のダミーデータが生成できます。
### デフォルトのロケールは :en
$ Faker::Config.locale
=> :en
$ Faker::Name.last_name
=> "Daniel"
### ロケールを :ja に変更
$ Faker::Config.locale = :ja
$ Faker::Name.last_name
=> "中川"
まとめ
- 『Faker::[ネームスペース].[属性]』でダミーデータを生成できる
- ユニーク値にするときはuniqueメソッドを利用する
- 『Faker::Config.locale』を変更することでダミーデータの言語が変更できる
また、日本語のダミーデータ生成に特化したgimeiというgemもあるので用途に合わせて使い分けてください。
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!