[Ruby on Rails 4] gems: faker, gimei, romankana

実際にありそうなユーザー名とメールアドレスを持つサンプルユーザーを自動的に作成する。

gemfile

gem 'faker'

データベースにサンプルユーザーを追加するRakeタスク

lib/tasks/sample_data.rake

namespace :db do
  desc "Fill database with sample data"
  task populate: :environment do
    User.create!(name: "Example User",
                 email: "example@railstutorial.jp",
                 password: "foobar",
                 password_confirmation: "foobar")
    99.times do |n|
      name  = Faker::Name.name
      email = "example-#{n+1}@railstutorial.jp"
      password  = "password"
      User.create!(name: name,
                   email: email,
                   password: password,
                   password_confirmation: password)
    end
  end
end
$ bundle exec rake db:reset
$ bundle exec rake db:populate
$ bundle exec rake db:test:prepare

### locale 対応
locale に対応している。
config/locales/ja.yml に設定が必要。
> * [faker/lib/locales/ja.yml at master · stympy/faker · GitHub](https://github.com/stympy/faker/blob/master/lib/locales/ja.yml)
> * [Ruby - Faker を i18n locale :ja で使うときは Faker::Config.locale を :en にセットしなおすべし - Qiita [キータ]](http://qiita.com/kyanny/items/00ef3727c7738f2cc26c)

% bundle exec rails c
Loading development environment (Rails 3.2.14)
[3] pry(main)> name = Faker::Name.name
=> "林 美咲"
[8] pry(main)> Faker::PhoneNumber.phone_number
=> "02-1144-0153"
[9] pry(main)> Faker::Address.city
=> "蒼空区"
[10] pry(main)> Faker::Address.state
=> "宮城県"
[12] pry(main)> Faker::Address.postcode
=> "921-1677"
[13] pry(main)> Faker::Internet.email
=> "@.net"
[14] pry(main)> Faker::Internet.user_name
=> "_"

## 日本人名を扱う
日本人の名前をフリガナ付きでランダムに返す。
> * [willnet/gimei · GitHub](https://github.com/willnet/gimei)
ひらがな・カタカナ・ローマ字変換
> * [ymrl/romankana · GitHub](https://github.com/ymrl/romankana)
どちらもMITライセンス。

gem 'gimei'
gem 'romankana'

% bundle exec rails c
Loading development environment (Rails 3.2.14)
[1] pry(main)> require 'gimei'
=> true
[2] pry(main)> require 'romankana'
=> true
[4] pry(main)> name1 = Gimei.new
=> #<gimei:0x007fdddd469598
 @first=
  #<gimei::First:0x007fdddd469570 @gender=:male, @name=["仁希", "にき", "ニキ"]>,
 @gender=:male,
 @last=#<gimei::Last:0x007fdddd4694f8 @name=["竹下", "たけした", "タケシタ"]>>
[5] pry(main)> name1.male?
=> true
[6] pry(main)> name1.kanji
=> "竹下 仁希"
[7] pry(main)> name1.katakana
=> "タケシタ ニキ"
[8] pry(main)> name1.katakana.to_roman
=> "takeshita niki"
[11] pry(main)> name1.katakana.to_roman.split.map{|s| s.capitalize}.join(" ")
=> "Takeshita Niki"

補遺

faker-japanese

% bundle exec rails c
Loading development environment (Rails 3.2.14)
[1] pry(main)> require 'faker/japanese'
=> true
[2] pry(main)> p Faker::Japanese::Name.name
"宅間 燕一"
=> "宅間 燕一"
[5] pry(main)> require 'faker'
=> true
[8] pry(main)> p Faker::Internet.email
"@.net"
=> "@.net"
[9] pry(main)> Faker::Internet.user_name
=> ""
[10] pry(main)> Faker::Config.locale = :en
=> :en
[11] pry(main)> Faker::Internet.user_name
=> "arnoldo_ziemann"
[12] pry(main)> p Faker::Internet.email
"stevie@murray.biz"
=> "stevie@murray.biz"
[16] pry(main)> name = Faker::Japanese::Name.name
=> "辻井 喜次郎"
[17] pry(main)> name.yomi
=> "ツジイ キジロウ"