ZEALS TECH BLOG

チャットボットによる会話広告『fanp』を開発する株式会社ZEALSのテックブログです。技術やエンジニア文化について情報を発信します。

Gem Fakerで簡単に始めるOSS活動

f:id:zeals-engineer:20190101235733p:plain

こんにちは、サーバサイドエンジニアの後藤です!

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を出したときに下のようなコメントが来ました。

f:id:zeals-engineer:20181129195549p:plain

よくあるのダミーデータだと面白くないなぁと思ったので、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活動ができるのがいいと感じています。

読者のみなさんも使ったりコミットしたりしてはいかがでしょうか?