#はじめに
今回はFakerというGemを紹介させていただきます。
架空のデータをたくさん用意するためのGemです。
主にテストコードを書く際や、開発時に仮のデータをデータベースに入れておきたい時に活躍するGemだと思っています。
ですが、Fakerの本領はそれ以外のところにあると思います。
#Fakerでなくてはならない理由
単にダミーデータをつくるだけなら、Forgeryや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."
アメリカの俳優・武術家であるチャック・ノリスの(ネット上で作られた)武勇伝をランダムで教えてくれる。
こんな(ry
ここで使おう。
いや、楽しすぎるでしょ。絶対なんか面白いことできる。
#ひたすらポケモンを捕まえる(気になる)簡易アプリを書く
Fakerをインストールし、適当にアプリを書いてみます。
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
とこんな風に。
これで、 0を押すだけで次々とポケモンを捕まえられる簡易アプリができました!
ポケモンGoしたいけど、外に出たくない...そんなときに最適ですね!()
#怪文書をつくる
Faker::Lorem.paragraphとするとLorem ipsum...のようなラテン語もどきの文章を一文生成できます。そこに引数で数字を渡してあげることで、意味のない文章を大量に生成できます。
require 'faker'
puts Faker::Lorem.paragraph(500)
これを適当にWordやパワポにぶちこんで、それっぽいフォントと背景色を使って...
#まとめ
前述の通り、ただダミーデータを作るだけなのであれば、Fakerからフォークされて処理速度が向上したFFakerを使うのがいいのかもしれません。
ただ、何をするにも遊び心って大事ですよね。
今回私がやったことは(私の発想力の貧困さもあって)Fakerを使ってできることのほんの一部です。
みなさんももっとFakerで遊んでみましょう!