【Ruby】Fakerを利用してテストダミーデータを用意する

Ruby

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
=> "中川"

まとめ

Fkerの利用方法
  • 『Faker::[ネームスペース].[属性]』でダミーデータを生成できる
  • ユニーク値にするときはuniqueメソッドを利用する
  • 『Faker::Config.locale』を変更することでダミーデータの言語が変更できる

また、日本語のダミーデータ生成に特化したgimeiというgemもあるので用途に合わせて使い分けてください。

Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!