最近、OSSに出すほどじゃないけど、うちで扱いたい形式のデータがあり、自分が指定した候補の中から、それをFakerでランダムに出せるといいなと言うことがありました。
そこで、今のところ、Fakerを拡張してそのデータ構造を簡単に作れるようにしよう。となったので、そのFakerの拡張方法についてを解説しようと思います。
使用技術
普段、Ruby on Railsでアプリケーション開発をしています。
テストを行うときは、RSpecにて、factory_bot_rails から Fakerを呼び出して、テストデータを生成しています。
ライブラリ | バージョン |
---|---|
ruby | 3.2.2 |
rails | 7.0.4.3 |
factory_bot_rails | 6.2.0 |
faker | 3.2.0 |
rspec-rails | 6.0.3 |
Fakerの拡張
例えば、日本のHUNTER×HUNTERのキャラクター名をランダムに返すFakerを作ります。
spec/support/faker_bank.rb
module Faker
class FakerHunter < Base
class << self
def name
[
"ゴン=フリークス",
"キルア=ゾルディック",
"クラピカ",
"レオリオ=パラディナイト",
"ミト",
"ジン=フリークス",
"カイト",
"クロロ=ルシルフル",
"ノブナガ=ハザマ",
"フェイタン=ポートオ",
"マチ=コマチネ",
"フィンクス=マグカブ",
"シャルナーク",
"フランクリン=ボルドー",
"シズク=ムラサキ",
"パクノダ",
"ボノレノフ=ンドンゴ",
"ウボォーギン",
"コルトピ",
"イルミ=ゾルディック",
"シルバ=ゾルディック",
"ゼノ=ゾルディック",
"ミルキ=ゾルディック",
"アルカ=ゾルディック",
"カルト=ゾルディック"
].sample
end
end
end
end
これができたら、spec/rails_helper.rbファイルで先ほどのファイルを読み込むようにします。
以下の行のコメントアウトが外れて有効になっていれば大丈夫です。
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
使い方
Faker::FakerHunter.name
とすると、先ほど書いた名前からランダムな値が取得されます。
例) spec/factories/hunters.rb
FactoryBot.define do
factory :hunter do
name { Faker::FakerHunter.name }
end
end
終わりに
今回はHUNTER×HUNTERのキャラクター名を例に挙げて、Fakerのオリジナルデータを作る方法について紹介しました。
私が実際に作ったのは、DraftJSというReact製のリッチエディタで扱うJson構造が、複雑だったためそのデータをFakerで作りました。今も便利に使われています。
Fakerのオリジナルデータを作りたい人の参考になればと。