Help us understand the problem. What is going on with this article?

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

More than 3 years have 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で遊んでみましょう!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした