ダミーデータをhogehogeしないでFakerで生成する

こんにちは、高橋です。

最近はLaravel4を使った開発をしています。テストやシーダーでダミーデータを扱う際には、Fakerというライブラリを使っているので、今回はそのFakerについて簡単に紹介したいと思います。

Faker(https://github.com/fzaninotto/Faker)とは様々なフォーマットでデータ(数値や文字列)を生成できるライブラリです。「hogehoge」といった汎用データより意味のあるデータで検証したい時にとても便利です。PerlのData::FakerやRubyのFakerから影響を受けているようです。

インストール

 

composer.json

 


{
    "require": {
        "php": ">=5.3.3",
        "fzaninotto/faker": "v1.4.0"
    }
}

上記のように記述し composer install を実行します。


~/Sites/test/faker  composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing fzaninotto/faker (v1.4.0)
    Loading from cache
Writing lock file
Generating autoload files

これでインストールは完了です。

とりあえず使ってみる

適当なファイル、というわけで hogehoge.php に以下を記述します。

hogehoge.php

 


<?php
require_once 'vendor/autoload.php';
$faker = Faker\Factory::create('ja_JP');
echo $faker->name . PHP_EOL;
echo $faker->country . PHP_EOL;

コンソールで実行します。


~/Sites/test/faker  php hogehoge.php
浜田 健一
サン・バルテルミー島

というようにそれっぽいデータが生成されました!
もちろんループ処理なら違うデータになります。


for ($i = 0; $i < 3; $i++) {
    echo $faker->country . PHP_EOL;
}

 


~/Sites/test/faker  php hogehoge.php
モルディブ
ボスニア・ヘルツェゴビナ
マケドニア共和国

 

予約されているダミーデータ

たくさんあったので、一例を掲載します。


echo $faker->city . PHP_EOL;
echo $faker->fileExtension . PHP_EOL;
echo $faker->ipv4 . PHP_EOL;
...

 


~/Sites/test/faker  php hogehoge.php
三宅市
mov
212.168.48.128
...

このように使われそうなデータは予め準備されています。
https://github.com/fzaninotto/Faker/blob/master/readme.md

フォーマット指定(これ覚えとけばFakerが便利に感じる)

なんだかんだで実際は「4桁の英数字」とか「1〜100の数値」とか開発者はあるべきフォーマットを知っているはずなので「どれが一致するダミーデータだろ〜?」って探すよりも便利なメソッドがあります。

基本

 


echo $faker->randomNumber($nbDigits = NULL). PHP_EOL; // 79907610
echo $faker->randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL). PHP_EOL; // 48.8932
echo $faker->numberBetween($min = 1000, $max = 9000). PHP_EOL; // 8567
echo $faker->randomElement($array = array('a', 'b', 'c')). PHP_EOL; // 'b'
echo $faker->numerify($string = '<h3 class="title-h3">#'). PHP_EOL; // '609'
echo $faker->lexify($string = '????'). PHP_EOL; // 'wgts'
echo $faker->bothify($string = '<h3 class="title-h3">??'). PHP_EOL; // '42 jz'

行末にコメントしたフォーマットと一致するか実行してみます。


~/Sites/test/faker  php hogehoge.php
38
2.8
3072
c
314
hvxh
40 gv

 

テキスト系 (日本語はまだないですね)

 


echo $faker->word($nbWords = 1);

 


~/Sites/test/faker  php hogehoge.php
cupiditate%

- - -


echo $faker->sentence($nbWords = 6);

 


~/Sites/test/faker  php hogehoge.php
Et sequi harum ut inventore totam repellat.%

- - -


echo $faker->paragraph($nbSentences = 3);

 


~/Sites/test/faker  php hogehoge.php
Sed quos incidunt quos deleniti. Sed deleniti repellendus libero quis illum vero ea consectetur. Aut error iste eum molestias quia. Ut unde dolores vitae similique qui consequatur.%

- - -


echo $faker->text($maxNbChars = 200);

 


~/Sites/test/faker  php hogehoge.php
Earum vitae qui aliquid suscipit dolorem deserunt. Dolor et autem eum voluptatem voluptate. Id qui non quisquam id consequatur. Velit aut sit alias et iure fuga impedit.%

 

まとめ

Fakerを知ったキッカケはLaravel4でテストを書くときにシーダーのテンプレートにコメントされていたからです。実際に使ってみて気付いた点は、「hogehoge」を使うか考えるくらいなら、素直にフォーマットを理解した上でダミーデータを作るべきだな、という事でした。加えて便利かどうかは使ってみたいと分からないが、そこに使えそうなライブラリがあるなら使ってみるべきだな。ということでした。

また、Faker自体まだまだ伸びしろがあるライブラリだったので、今後もチェックはしておこうと思います。それでは〜!