素の 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 を使う
ruby-toolbox.com の Random Data Generation の項目
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 で作るデータの形式
を選ぶことができます。