🦹‍♀️

Ruby版Faker::Loremの単語を差し替える

2022/05/07に公開

1行まとめ

Railsならconfig/locales/ja.yml等のja.faker.lorem.wordsに単語の配列を追加するだけでOK。

Fakerとは

テストやデモ用に、ダミー文字列を自動生成してくれるFakerというライブラリがあります。

https://github.com/faker-ruby/faker

READMEには、もともとはPerlのライブラリにData::Fakerというものがあり、これをRubyに移植したものであると説明されています。他の言語にも同様のものがあり、そちらを使ったことのある方もいるかもしれません。

https://metacpan.org/pod/Data::Faker

Faker::Loremについて

さて、Fakerでは名前や住所なども生成できるのですが、文章のようなものを出力されるためのクラス Faker::Loremがあります。Loremという名前はLorem ipsumから来てるようで、これは伝統的にダミーテキストとしてLorem ipsum なんとかかんとか、という文言が使われてきたことから、ダミーテキストのことをLorem ipsumと呼ぶようになったそうです。

https://ja.wikipedia.org/wiki/Lorem_ipsum

意味のない単語列ではあるのですが、さすがに単語自体は自動生成しているのではなく、あらかじめ辞書を持っており、その単語が使われるようになっています。

しかも、辞書は各(自然)言語ごとに用意されており、例えば日本語のLorem用単語リストもFaker内に登録されています。そのため、Fakerをインストールするだけで、日本語のダミーテキストも簡単に生成できるようになっています。

ところが、なんかこのFakerに登録されている日本語の単語データですが、なんとなく不穏な感じがして使いにくいんですよね……。ダミーテキストの用途からして、あまり普通の日本語に読めてしまっては困る(ダミーであることがあからさまになってほしい)ということはありますが、それにしても開発者だけではなく顧客やその他一般の人が目に機会もないとは言えないので、そういうところにあまり変な単語が出てくるのはうれしくありません。

そこで、Faker::Loremの単語を自分で用意した単語リストで置き換えてみましょう。

単語データの差し替え方法

Fakerは便利なことに、簡単にデータを上書きすることができます。言語ごとのデータはRailsでも使われているI18nを使ってYAMLで登録されています。そのため、Faker独自の知識は特に必要なく、単純にYAMLファイルを作っておいて、I18nにそのファイルを登録しておけば、そちらを利用してくれるようになります。

特に、RailsアプリのテストやseedでFakerを使いたいという場合であれば、I18nライブラリを直接操作する必要すらありません。Rails標準のlocale用YAMLファイル・ディレクトリである config/locale/ 以下にja.ymlfoo.ja.ymlといった名前をつけた以下のようなYAMLファイルを置くだけで、YAMLの配列で指定した単語が使われるようになります。

https://gist.github.com/takahashim/e013cb3508a54a5d3195a8f9773534df

これは青空文庫の宮沢賢治『銀河鉄道の夜』のテキストから単語を抽出したものなので、著作権などの面でも特に問題ないかと思います。このファイル自体も著作権は特に主張しないので、ご自由にお使いください。

また、もっとダミーっぽく意味のない単語にしたい! という場合も、このファイルに適宜手を入れて使っていただくこともできます。

その他の詳しい情報

Faker::Loremの使い方については、Fakerのソース内のdoc/default/lorem.mdに書かれています。

https://github.com/faker-ruby/faker/blob/master/doc/default/lorem.md

また、Fakerのソース内にあるlib/locales/README.mdには、新しいlocaleを追加する方法なども書かれています。

https://github.com/faker-ruby/faker/blob/master/lib/locales/README.md

合わせて参考にしてください。

Discussion