PHP
Faker

いまさらテストデータ自動生成できる faker を PHP で使ってみる、便利やなあ

More than 1 year has passed since last update.

fakerって

自動的にデータを作成してくれる部品です。日本語に対応しているので使いこなせば、なかなか有用に使えると思いますw。なんというか今までの経験上、会員データなりカードデータなり、考え無しに大量データを作成しようとすると偏ったデータになったり、にユニークデータとして登録できないとかとかあって結局、自動生成するプログラムを作成していたのでが、これを使えば少しは楽になるかもしれません。

fzaninotto/Faker

インストール

簡単です。超簡単。

$ composer require fzaninotto/faker

使ってみる

faker のよくあるサンプルです。

<?php
require_once 'vendor/autoload.php';
$faker = Faker\Factory::create('ja_JP');

$data = array(
  "email" => $faker->email,
  "name" => $faker->name,
  "first" => $faker->firstname,
  "address" => $faker->address,
  "randomNumber" =>$faker->randomNumber(2),
  "sentence" =>$faker->sentence(3),
  "randomNumber" =>$faker->randomNumber(2),
  "betweenNumber" =>$faker->numberBetween(10,100),
  "date" => $faker->date('Y-m-d', 'now'),
  "dateTimeThisMonth" => $faker->dateTimeThisMonth->format('Y-m-d'),
  "url" => $faker->url,
  "realText" => $faker->realText($faker->numberBetween(10,20)),
  "imageUrl" => $faker->imageUrl('800','600'),
);

var_dump($data);

結果

  ["email"]=>
  string(20) "kudo.naoko@nagisa.jp"
  ["name"]=>
  string(13) "吉田 洋介"
  ["first"]=>
  string(6) "結衣"
  ["address"]=>
  string(53) "9169392  群馬県高橋市北区津田町杉山7-9-4"
  ["randomNumber"]=>
  int(43)
  ["sentence"]=>
  string(23) "Aut architecto modi et."
  ["betweenNumber"]=>
  int(60)
  ["date"]=>
  string(10) "2015-02-16"
  ["dateTimeThisMonth"]=>
  string(10) "2017-07-21"
  ["url"]=>
  string(89) "http://www.nagisa.net/quaerat-delectus-consequatur-nihil-aliquid-voluptates-quaerat-rerum"
  ["realText"]=>
  string(30) "にゆらゆるいはかせ。"
  ["imageUrl"]=>
  string(36) "http://lorempixel.com/800/600/?71307"

なんとなく使えそうな感じ。

realText で、Warning がでる

なんだろうって思ったら mb_substr のパラメータエラー足りないって怒られているようだ。
issues#1003 でその解決策が出ていた。

PHP Warning:  mb_substr() expects parameter 3 to be integer, string given in /home/vagrant/vendor/fzaninotto/faker/src/Faker/Provider/ja_JP/Text.php on line 623

人名=名前、苗字ではない

"name" => $faker->name,
"first" => $faker->firstname,
"last" => $faker->lastname,
"kanaName" => $faker->kananame,
"firstKanaName" => $faker->firstKanaName,
"lastKanaName" => $faker->lastKanaName,

結果

  ["name"]=>
  string(13) "中村 明美"
  ["first"]=>
  string(6) "加奈"
  ["last"]=>
  string(9) "西之園"
  ["kanaName"]=>
  string(19) "ノムラ ナナカ"
  ["firstKanaName"]=>
  string(9) "マナブ"
  ["lastKanaName"]=>
  string(9) "イシダ"

ははは、そうきたか。
まあ name で取得してから分割すればよし。流石に漢字=カナ、って一致してないのねw

JANコード

EAN13で生成されるが、日本国のいわゆる "49JAN" ではないため、単にコード生成されたという感じでしょうかね。まあチェックデジットは合っているのでとりあえずのチェック確認はできそうなのかな。

"ean13" => $faker->ean13,
↓
9773096538962

テキスト

Text.php みると、宮沢賢治の「銀河鉄道の夜」から漢字を作成しているようです。いいですね~~。

"realText" => $faker->realText($faker->numberBetween(10,20)),
↓
かるよ」「そうにうつっ。

数値

ランダムな数値、範囲が指定できるので事足りますね。

"randomNumber" =>$faker->randomNumber(2),   ※2桁のランダム値
"betweenNumber" =>$faker->numberBetween(10,100), ※10~100のランダム値

住所

当然だけど郵便番号と住所が連動してないです。
まあでもこれも使えるかな。

"address" => $faker->address,
↓
9378537  群馬県山田市東区加納町青田9-4-2

使えるか使えないか

「使えます」ねこれ。自分で作成しようと思うとこうシンプルな感じでは作れませんので、いいですね。当たり前ですが、データの整合性はとられていないのでそこらは、faker で作成された後に自分でごにょごにょすればいいと思います。何だかんだ言ってますが十分使えますよw

あと testunit の実行にもこれいですね。
どうしてもテストケース作らせると境界値とか文字列数とかとか、やらない人多いし。

参考にさせて頂いたサイト様

Faker@PHPでダミーデータを作る
ダミーデータをhogehogeしないでFakerで生成する
fakerでフェイクなデータを作成してみる
大量のダミーデータのCSVを作るにはFakerが便利