Asial Blog

Recruit! Asialで一緒に働きませんか?

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

カテゴリ :
バックエンド(プログラミング)
タグ :
Tech
PHP
バックエンド
ライブラリ
Faker


こんにちは、高橋です。

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

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

インストール



composer.json


  1. {
  2.     "require": {
  3.         "php": ">=5.3.3",
  4.         "fzaninotto/faker": "v1.4.0"
  5.     }
  6. }

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

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

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

とりあえず使ってみる



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

hogehoge.php


  1. <?php
  2.  
  3. require_once 'vendor/autoload.php';
  4.  
  5. $faker = Faker\Factory::create('ja_JP');
  6.  
  7. echo $faker->name . PHP_EOL;
  8. echo $faker->country . PHP_EOL;

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

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

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

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

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

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



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

  1. echo $faker->city . PHP_EOL;
  2. echo $faker->fileExtension . PHP_EOL;
  3. echo $faker->ipv4 . PHP_EOL;
  4. ...

  1. ~/Sites/test/faker  php hogehoge.php
  2. 三宅市
  3. mov
  4. 212.168.48.128
  5. ...

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

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



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

基本



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

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

  1. ~/Sites/test/faker  php hogehoge.php
  2. 38
  3. 2.8
  4. 3072
  5. c
  6. 314
  7. hvxh
  8. 40 gv

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



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

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

- - -

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

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

- - -

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

  1. ~/Sites/test/faker  php hogehoge.php
  2. 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.%

- - -

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

  1. ~/Sites/test/faker  php hogehoge.php
  2. 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自体まだまだ伸びしろがあるライブラリだったので、今後もチェックはしておこうと思います。それでは〜!