素の Ruby 環境で Fabrication

ダミーデータがたくさん欲しい

自分の仕事場はちょっと変わっているのでダミーのテキストを用意するのはそれっぽい人に頼むと可能ではあるのですが、本来こんなものは機械に作らせればいいのです。とは言えわざわざダミーデータ生成ツールを作るのはダルいし、便利なものも知らなかったので今まではなんとなく人海戦術でやってました。ごめんなさい。

最近ちょっと Rails づいているので fixture replacement の文脈でいくつかデータ生成ツールを見ていた(試してないの多数)のですが、2010冬の段階では Fabrication の人気が上がってきているようですね。(まだ ruby-toolbox.com では名前を見ないけど。)

ということで使ってみた

paulelliott/fabrication - GitHub

まずはよく見る Faker と組み合わせる例。

require 'faker'
Fabricator( :company ) do
name { Faker::Company.name }
addr { [Faker::Address.street_address, Faker::Address.city,
Faker::Address.us_state].join( ', ' ) }
url { ['http://', Faker::Internet.domain_name].join }
tel { Faker::PhoneNumber.phone_number }
email { Faker::Internet.email }
foundation { rand(100) + 1900 }
end

※ なお、url の部分の処理は参考にした hibariya さんのコード丸パクリです。

気をつけるポイント

Rails 流の Model クラスを想定しているので、この場合は Company クラスのインスタンス変数に読み書きの権限を与えてください。

class Company
def initialize
@name = nil
@addr = nil
@url = nil
@tel = nil
@email = nil
@foundation = nil
end
attr_accessor :name, :addr, :url, :tel, :email, :foundation
end

Fabricate.attributes_for() するなら Struct を使っても結果はまったく同じなので一つの手としてはアリかもしれません。

Company = Struct.new( 'Company',
:name, :addr, :url, :tel, :email, :foundation )

cf. Fabricationを使ってみた - のどをRubyでいっぱいにして

Faker の代わりに forgery を使う

sevenwire/forgery - GitHub

ruby-toolbox.com の Random Data Generation の項目 では faker よりも forgery の方が人気が高いようですので、こっちも試してみます。

require 'forgery'
Fabricator( :company ) do
name { Forgery::Name.company_name }
addr { [Forgery(:address).street_address, Forgery(:address).city,
Forgery(:address).state].join( ', ' ) }
url { ['http://', Forgery(:internet).domain_name].join }
tel { Forgery(:address).phone }
email { Forgery(:internet).email_address }
foundation { Forgery(:date).year( :future => true,
:min_delta => -110,
:max_delta => -10 ) }
end

上の Faker の例とまったく同じものを作ってみました。中身を見ると Faker よりもすぐ使えるものが多いからもしかして便利? Formats や Dictionaries が準備されているので Faker よりも作れるダミーデータの種類を増やしやすいのかもしれません。

cf. [sinatra for flasher] 大量のダミーデータを返すAPIを作る - func09

ちなみに今回のコードの全体像

こちら

gist: 748375 - fabrication with faker and forgery- GitHub

git clone して

$ ruby fab.rb -h

で分かりますが、

  • class の生成方法
  • fabrication と組み合わせるダミーデータ生成ライブラリ
  • fabrication で作るデータの形式

を選ぶことができます。

参考

More