こんにちは、サーバサイドエンジニアの後藤です!
2018年10月にジョインして https://fanp.me/ のサーバーサイド側の開発をメインで行っています。
今回はエンジニアチームでもよく使われている Faker というGemを紹介します
Fakerって?
https://github.com/stympy/faker
This gem is a port of Perl's Data::Faker library that generates fake data.
ざっくり訳すると 嘘のデータを作ってくれるgem です
もともとは Perl のExtensionにあるものをRubyでも使うために作られたGemっぽいです。
https://metacpan.org/pod/Data::Faker
FactoryBot でテストデータを作るときに手打ちで
FactoryBot.define do factory :user do name { '島田' } end end
といちいち考えるのは面倒ですし この場合は 島田
でしか通過しないテストの可能性もあるので、「ランダムにデータを生成しましょう」といった具合です。
この記事を書く背景
GithubのPull requestを出したときに下のようなコメントが来ました。
よくあるのダミーデータだと面白くないなぁと思ったので、Fakerのドキュメントを読んでました。すると、ポケモンの名前が使えることを発見して使ってみたら意外にも好評だったので、書くことにしました!
導入
至ってシンプルで
# Gemfile source 'https://rubygems.org' gem 'faker'
Gemfileを編集した後に bundle install
で導入が完了します。
使い方
README にも書いてあるのですが、至って簡単でRequiredすればOKです。
require 'faker' Faker::Name.name # => "藤田 亮" Faker::Internet.email # => "gilbert_gibson@kub.info"
Fakerには一般的なものから独特なものまであります。
個人的に独特だと思われるものをいくつかピックアップします。(バージョンが HEAD Unreleasedの書き方です)
require 'faker' Faker::Beer.name # => "Trois Pistoles" Faker::Company.name # => "株式会社菅原食品" Faker::JapaneseMedia::DragonBall.character # => "Mr. Satan" Faker::Matz.quote # => "I believe consistency and orthogonality are tools of design, not the primary goal in design." Faker::Games::Overwatch.hero # => "D.va" Faker::Game::Pokemon.name # => "ギャロップ" Faker::TvShows::SiliconValley.character # => "Peter Gregory" Faker::Movies::StarWars.character # => "Sabine Wren" Faker::University.name # => "中島工業大学" Faker::Game::Zelda.game # => "Twilight Princess"
他にも様々あるので使ってみてください!
OSS活動
Faker::Game::Zelda.game
はゼルダシリーズのゲームタイトルを返すメソッドになりますが、英語のままです。
ポケモンの名前を返すメソッドである Faker::Game::Pokemon.name
は日本語化対応されているので、真似すればゼルダのゲームも日本語化できるかと思ったのでPull requestを送ります。
Pull requestの内容
https://github.com/stympy/faker/pull/1484
内容は 「ゼルダのゲームタイトルを日本語訳にしました!」 です。Pull requestのテンプレもなかったので、ざっくりで出しておきました。。
Pull requestを送った翌日くらいにマージされて、次回のFakerのリリースで世界中のエンジニア(主に日本人)に使われるとなるとうれしい気持ちです。
ちなみにこれの作業時間は3時間くらいです。主にゲームのタイトルを調べるのに使ってました...
終わりに
Fakerは簡単にダミーデータ作れるところがいいですし、すでにある例を日本語化したり新たなデータ例を追加したりなどで比較的簡単にOSS活動ができるのがいいと感じています。
読者のみなさんも使ったりコミットしたりしてはいかがでしょうか?