[Laravel] Fakerを使ってテストデータを作成してみる

FakerとFactoryを使ってより現実に近いテストデータを用意してみます。

## Fakerとは
より現実に近いテストデータを簡単に作成できるライブラリ。
作成できるダミーデータは主に次の通り。

|項目名|出力データ|
|:--|:--|
|name|氏名|
|email|メールアドレス|
|safeEmail|メールアドレス|
|password|パスワード|
|address|住所|
|phoneNumber|電話番号|
|company|企業名|
|realText|テキスト|

使い方。

```php
// 初期化
$faker = Faker\Factory::create('ja_JP');
// データの取得
$faker->name
$faker->email
```
Fakerの生成するデータのロケールを変更したい場合、設定ファイルでも変更できます。
config/app.php に以下を追加します。

```php:config/app.php
<?
return [
...
    'faker_locale' => 'ja_JP',
...
];
```

## Factoryとは
大量のデータベースレコードを作成するのに便利。

モデルクラスを作成します。app配下にHoge.phpが作成される。

```
$ php artisan make:model Hoge
```

ファクトリークラスを作成します。database/factoriesフォルダにHogeFactory.phpが作成される。

```
$ php artisan make:factory HogeFactory
```

HogeFactory.phpを編集します。

```php:database/factories/HogeFactory.php
<?php

use Faker\Generator as Faker;

$factory->define(App\Hoge::class, function (Faker $faker) {
    $now = \Carbon\Carbon::now();
    return [
        //
        'name' => $faker->name,
        'mail' => $faker->email,
        'comment' => $faker->realText,
        'created_at' => $now,
        'updated_at' => $now,
    ];
});
```

HogesTableSeeder.phpを編集します。

```php:database/seeds/HogesTableSeeder.php
<?php
use Illuminate\Database\Seeder;

class HogesTableSeeder extends Seeder
{
    public function run ()
    {
        // 50レコード作成する
        factory (\App\Hoge::class, 50)->create();
    }
}
```

DatabaseSeeder.phpを編集します。

```php:database/seeds/DatabaseSeeder.php
<?php
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    public function run ()
    {
        $this->call(HogesTableSeeder::class);
    }
}
```

実行します。

```
$ php artisan db:seed
```
```sql
testapp_db=# select * from hoges LIMIT 1;
 id |    name     |            mail            |                                                                                                                                                                                                     comment                                                                                                                                                                                                      | type |     created_at      |     updated_at
----+-------------+----------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+---------------------+---------------------
 51 | 青田 裕美子 | sayuri.yamaguchi@gmail.com | になっていたジョバンニに言いい
ましたら、自分で一ぺんにぶっきりんころにはたしました。ジョバンニのうしてますと、いつはなんのようにそう言いいなんに牛乳ぎゅうを忘わすとみをたてず、どんなほんとながらすうりをはじめました。「そう、そのマジェランプが、くるところはゆるしてそれを見ながら、もうな用ようにあてていましたがね、こんばんをのぞいて外をなおにこには明るく下に青い天の川のなから四方を見ました標札ひょ。 | C    | 2019-07-11 01:50:07 | 2019-07-11 01:50:07
(1 row)

```

## 参考

 - 竹澤勇貴・栗生和明・新原雅司・大村創太郎(2018)『PHPフレームワーク Laravel Webアプリケーション開発　バージョン5.5LTS対応』ソシム
 - [Laravel Document](https://readouble.com/laravel/5.7/ja/seeding.html)