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