Ruby版Faker::Loremの単語を差し替える
1行まとめ
Railsならconfig/locales/ja.yml等のja.faker.lorem.words
に単語の配列を追加するだけでOK。
Fakerとは
テストやデモ用に、ダミー文字列を自動生成してくれるFakerというライブラリがあります。
READMEには、もともとはPerlのライブラリにData::Fakerというものがあり、これをRubyに移植したものであると説明されています。他の言語にも同様のものがあり、そちらを使ったことのある方もいるかもしれません。
Faker::Loremについて
さて、Fakerでは名前や住所なども生成できるのですが、文章のようなものを出力されるためのクラス Faker::Lorem
があります。Lorem
という名前はLorem ipsumから来てるようで、これは伝統的にダミーテキストとしてLorem ipsum なんとかかんとか、という文言が使われてきたことから、ダミーテキストのことを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.yml
やfoo.ja.yml
といった名前をつけた以下のようなYAMLファイルを置くだけで、YAMLの配列で指定した単語が使われるようになります。
これは青空文庫の宮沢賢治『銀河鉄道の夜』のテキストから単語を抽出したものなので、著作権などの面でも特に問題ないかと思います。このファイル自体も著作権は特に主張しないので、ご自由にお使いください。
また、もっとダミーっぽく意味のない単語にしたい! という場合も、このファイルに適宜手を入れて使っていただくこともできます。
その他の詳しい情報
Faker::Loremの使い方については、Fakerのソース内のdoc/default/lorem.md
に書かれています。
また、Fakerのソース内にあるlib/locales/README.md
には、新しいlocaleを追加する方法なども書かれています。
合わせて参考にしてください。
Discussion