kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Faker のコードを読んだりテストを直したり

Faker::Company.name で企業名を生成する

GitHub - stympy/faker: A library for generating fake data such as names, addresses, and phone numbers.

FactoryGirl でテストデータを生成するときに Faker を使ってるんだけど,企業名を Faker::Company.name で出力すると人名をベースに生成されてしまっていて前々から少し違和感があった.

>> I18n.locale = :ja #=> :ja
>> Faker::Company.name #=> "松本 LLC"
>> Faker::Company.name #=> "清水-佐々木"
>> Faker::Company.name #=> "田中, 佐藤 and 鈴木"

ロケールを :en にすると少しは企業名っぽく見えるけど,それは「英語」の雰囲気であって,人名をベースに生成されているところは共通になってるように見えた.

>> I18n.locale = :en #=> :en
>> Faker::Company.name #=> "King LLC"
>> Faker::Company.name #=> "Wisozk-Dare"
>> Faker::Company.name #=> "Hegmann, Gulgowski and Brown"

Faker Gem を読んでみた

せっかくだから Gem を読んで仕組みを調べてみた.

1.

faker/company.rb at master · stympy/faker · GitHub

まず company.rb を読んでみると Faker::Company の名前空間には現時点で計9個のメソッドが用意されていることがわかった.

  • .name
  • .suffix
  • .catch_phrase
  • .buzzword
  • .bs
  • .ein
  • .duns_number
  • .logo
  • .swedish_organisation_number

2.

faker/faker.rb at master · stympy/faker · GitHub

Faker::Company.nameparse('company.name') を呼び出していて,その中で各言語ごとのロケールからパターンをサンプリングしていた.パターンは Array の .sample で1種類に限定していた.

なるほどー!ここで実行しながら推測していた「計3種類のパターンがあること」「人名を使っていること」を実際のコードで確認することができた.

company:
  name:
    - "#{Name.last_name} #{suffix}"
    - "#{Name.last_name}-#{Name.last_name}"
    - "#{Name.last_name}, #{Name.last_name} and #{Name.last_name}"

3.

GitHub - pigment/fake-logos

Faker::Company.logo は上のリポジトリから画像を取得してることがわかった.実際の URL は http://pigment.github.io だけど.

README にプルリクした

上記の 1. に書いた通り,コードを見ると Faker::Company の名前空間に計9個のメソッドがあるのに README に全てが書かれていなかった.せっかくなのでプルリクした.

github.com

するとなんと…!

テストが落ちてるのを直してプルリクした

なんと…!テストが落ちた!コードは変えてないのに!なんでー???

と思って Travis CI のログを見て調べてみると master ブランチで既にテストが落ちていることがわかった.さらに最近出てる PR も全て同じ原因で落ちていて,ずっと放置されてる感じがした.

原因は en-UG.yml の定義に問題があることで,一部の Ruby バージョンでエラーになっていた.そこを直して別のプルリクを出した.

窮地を救った!ヒーロー!w

github.com

マージ済のプルリクを見てみると「そもそも何で CI 通ってないのにマージしたんだろう?」っていう疑問は残るけど,オーナーの意図もあるだろうし,OSS は前に進むものだし深く考えないようにしてる.

Faker ってメンテされてる?

RubyGems を見てみると去年からリリースされてないし,GitHub を見てみると Issue も Pull Request も大量に残ってるし,状況から察するに Faker はもう積極的にメンテされてないのかも?今回のプルリクも特に反応が無いし.

最近だと FFaker の方が活発にメンテされてるの?

まとめ

最近,勉強のために週に1個 Gem を読むようにしていて,今回は実際に使っている Faker を読んでみた.

読んでみると毎回様々な気付きが得られて凄く効果的だなと感じている.

さらに今回は README を更新するプルリクをしたはずだったのに,気付いたらテストも直していたりして個人的にビックリな経験だった.勉強になった.ただしまだマージされてないので継続的に様子を見ておかないとって感じ.+1 欲しー!

あとこういうプルリクに関しては,先週バズってた以下の記事にも書かれてて素晴らしいなと思う.僕もどんなに些細なプルリクだって重要だと思っているし,引き続きコントリビュートしたいと思う.

ショボいPull Requestを積み重ねて、自分の中でOSS活動の敷居を下げる - not good but great

関連エントリー

kakakakakku.hatenablog.com