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