Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Faker(Ruby)を拡張してオリジナルなカスタムデータを生成できるようにする

Posted at

最近、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のオリジナルデータを作りたい人の参考になればと。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?