Fakerの公式が病気なのを知ってほしい & Fakerで遊んでみた

More than 1 year has passed since last update.


はじめに

今回はFakerというGemを紹介させていただきます。

架空のデータをたくさん用意するためのGemです。

主にテストコードを書く際や、開発時に仮のデータをデータベースに入れておきたい時に活躍するGemだと思っています。

ですが、Fakerの本領はそれ以外のところにあると思います。


Fakerでなくてはならない理由

単にダミーデータをつくるだけなら、ForgeryFFakerでもいいはずです(特にFFakerについては後述します。Forgeryは今回割愛させていただきます)。ではなぜFakerを使うのか?


タイトル通り、Fakerの公式が病気だからです(めっちゃ褒め言葉)。


どう病気なのか

https://github.com/stympy/faker の使い方を見てみましょう。


Contents

Installing

Usage

Faker::Address

Faker::Bitcoin

Faker::Business

Faker::Code

Faker::Color

Faker::Commerce

Faker::Company

Faker::Date

Faker::Internet

Faker::File

Faker::Lorem

Faker::Name

Faker::Number

Faker::Boolean

Faker::PhoneNumber

Faker::Time

Faker::Hacker

Faker::Crypto

Faker::App

Faker::SlackEmoji

Faker::Team

Faker::Book

Faker::University

Faker::Placeholdit

Faker::Hipster

Faker::Superhero

Faker::StarWars

Faker::Beer

Faker::ChuckNorris

Faker::Educator

Faker::Space

Faker::Music

Faker::Vehicle

Faker::GameOfThrones

Faker::Pokemon

Faker::Food


...ん、なんか変なの混じってない?


Faker::Superhero

# Random Superhero name

Faker::Superhero.name #=> "Magnificent Shatterstar"

# Random Superhero power
Faker::Superhero.power #=> "Photokinesis"

アメコミのスーパーヒーローの名前と、能力がランダムで出て来る。

こんなのどこで使うんだよ。


Faker::StarWars

Faker::StarWars.character #=> "Anakin Skywalker"

Faker::StarWars.droid #=> "C-3PO"

Faker::StarWars.planet #=> "Tatooine"

Faker::StarWars.quote #=> "Aren’t you a little short for a Stormtrooper?"

Faker::StarWars.specie #=> "Gungan"

Faker::StarWars.vehicle #=> "Sandcrawler"

スターウォーズのキャラ名、ロボット名、惑星、セリフ、種族、乗り物がランダムで。

こんなのどこで使(ry


Faker::ChuckNorris

Faker::ChuckNorris.fact #=> "Chuck Norris can solve the Towers of Hanoi in one move."

アメリカの俳優・武術家であるチャック・ノリスの(ネット上で作られた)武勇伝をランダムで教えてくれる。

こんな(ry

ここで使おう。

いや、楽しすぎるでしょ。絶対なんか面白いことできる。


ひたすらポケモンを捕まえる(気になる)簡易アプリを書く

Fakerをインストールし、適当にアプリを書いてみます。


pokemon.rb

require 'faker'

def search(pokédex)
pokemon = Faker::Pokemon.name
puts "A wild #{pokemon} appeared!"
puts "[0]Throw a Monster Ball\n[1]Escape"
input = gets.to_i
if input == 0
puts "Gotcha! #{pokemon} was caught! "
pokédex << pokemon
end
end

def move(location)
location = Faker::Pokemon.location
end

def pokédex(pokédex)
puts "#{pokédex.uniq.join(',')}\nYou caught #{pokédex.uniq.count} kinds of pokémon"
end

pokédex = []
location = "Pallet Town"

while true do

puts "location: #{location}\n\n[0]: Search Pokémon\n[1]: Move Location\n[2]: See Pokédex\n[3]: Quit"
input = gets.to_i
if input == 0
search(pokédex)
elsif input == 1
location = move(location)
elsif input == 2
pokédex(pokédex)
elsif input == 3
exit
else
puts "incorrect number"
end
end


とこんな風に。

スクリーンショット 2016-12-04 19.19.35.png

これで、 0を押すだけで次々とポケモンを捕まえられる簡易アプリができました!

ポケモンGoしたいけど、外に出たくない...そんなときに最適ですね!()


怪文書をつくる

Faker::Lorem.paragraphとするとLorem ipsum...のようなラテン語もどきの文章を一文生成できます。そこに引数で数字を渡してあげることで、意味のない文章を大量に生成できます。


lorem.rb

require 'faker'

puts Faker::Lorem.paragraph(500)


スクリーンショット 2016-12-04 15.35.57.png

これを適当にWordやパワポにぶちこんで、それっぽいフォントと背景色を使って...

lorem_ipsum.png

lorem_ipsum2.png


まとめ

前述の通り、ただダミーデータを作るだけなのであれば、Fakerからフォークされて処理速度が向上したFFakerを使うのがいいのかもしれません。

ただ、何をするにも遊び心って大事ですよね。

今回私がやったことは(私の発想力の貧困さもあって)Fakerを使ってできることのほんの一部です。

みなさんももっとFakerで遊んでみましょう!