アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

ダミーデータを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自体まだまだ伸びしろがあるライブラリだったので、今後もチェックはしておこうと思います。それでは〜!