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

#はじめに

今回は[Faker](https://github.com/stympy/faker)というGemを紹介させていただきます。
架空のデータをたくさん用意するためのGemです。
主にテストコードを書く際や、開発時に仮のデータをデータベースに入れておきたい時に活躍するGemだと思っています。
ですが、Fakerの本領はそれ以外のところにあると思います。

#Fakerでなくてはならない理由
単にダミーデータをつくるだけなら、[Forgery](https://github.com/sevenwire/forgery)や[FFaker](https://github.com/ffaker/ffaker)でもいいはずです(特に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."
```

アメリカの俳優・武術家である[チャック・ノリス](https://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A3%E3%83%83%E3%82%AF%E3%83%BB%E3%83%8E%E3%83%AA%E3%82%B9)の(ネット上で作られた)[武勇伝](https://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A3%E3%83%83%E3%82%AF%E3%83%BB%E3%83%8E%E3%83%AA%E3%82%B9%E3%83%BB%E3%83%95%E3%82%A1%E3%82%AF%E3%83%88)をランダムで教えてくれる。
こんな(ry


<b>ここで使おう。</b>

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


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

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

```ruby: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](https://qiita-image-store.s3.amazonaws.com/0/151858/c30a5a45-5c9f-4f6b-7540-0f838dc44cae.png)


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



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


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


```ruby:lorem.rb
require 'faker'

puts Faker::Lorem.paragraph(500)
```

![スクリーンショット 2016-12-04 15.35.57.png](https://qiita-image-store.s3.amazonaws.com/0/151858/d4d467fc-c8bc-791f-bba6-587eff63b41d.png)

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

![lorem_ipsum.png](https://qiita-image-store.s3.amazonaws.com/0/151858/abf3e326-1328-b771-3182-0fcd0a78a8dd.png)

![lorem_ipsum2.png](https://qiita-image-store.s3.amazonaws.com/0/151858/18ee3d75-0a4c-bd32-32b8-62ad81d04fd2.png)



#まとめ
前述の通り、ただダミーデータを作るだけなのであれば、Fakerからフォークされて処理速度が向上したFFakerを使うのがいいのかもしれません。
ただ、何をするにも遊び心って大事ですよね。
今回私がやったことは(私の発想力の貧困さもあって)Fakerを使ってできることのほんの一部です。
みなさんももっとFakerで遊んでみましょう！