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

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

> [fzaninotto/Faker](https://github.com/fzaninotto/Faker)

# インストール
簡単です。超簡単。

```bash:
$ composer require fzaninotto/faker
```

## 使ってみる
faker のよくあるサンプルです。

```php:
<?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);
```

結果

```php:
  ["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](https://github.com/fzaninotto/Faker/issues/1003) でその解決策が出ていた。

```text:
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
```

## 人名＝名前、苗字ではない

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

結果

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

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

## JANコード
EAN13で生成されるが、日本国のいわゆる "49JAN" ではないため、単にコード生成されたという感じでしょうかね。まあ[チェックデジット](http://www.dsri.jp/jan/check_digit.html)は合っているのでとりあえずのチェック確認はできそうなのかな。

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

## テキスト
[Text.php](https://github.com/fzaninotto/Faker/blob/master/src/Faker/Provider/ja_JP/Text.php) みると、宮沢賢治の「銀河鉄道の夜」から漢字を作成しているようです。いいですね～～。

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

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

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

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

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

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

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

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

>[Faker@PHPでダミーデータを作る](http://qiita.com/zaburo/items/4487b23543ce88ce7f0c)
>[ダミーデータをhogehogeしないでFakerで生成する](http://blog.asial.co.jp/1279)
>[fakerでフェイクなデータを作成してみる ](http://blog.a-way-out.net/blog/2014/06/13/faker/)
>[大量のダミーデータのCSVを作るにはFakerが便利](http://hacknote.jp/archives/28820/)