Fakerで大量のテストデータを作成する(Laravel6対応)

#はじめに
ローカル環境で開発していると実装したコードが意図通りに動いているかを
確認したいですよね。

Laravelではdatabase/seederファイルにテストデータを書いて、
データベースにデータを挿入できます。

こんな感じ

```database/seeds/UserTableSeeder.php
<?php

use Illuminate\Database\Seeder;
use App\User;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    
     public function run()
     {
        DB::table('users')->insert([
            'name' => '山田',
            'email' => 'Yamada@gmail.com',
            'password' => 'yamada2019',
        ]);
     }
}
```

上記例では、seederを実行することでusersテーブルに「name,email,password」の
３つの項目を持つデータを作成できます。

でも、データを１００個など大量に作りたい場合にseederファイルにテストデータを
１個１個作るって正直めんどくさいし工数が掛かります。

そこで、LaravelのFakerを使ってテストデータを瞬時に大量作成していきたいと思います！

#Factoryファイルを作成
Laravelプロジェクト配下のdatabase/factoryディレクトリにUserFactory.phpファイルを作成します。

```database/factory/UserFactory.php
<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\User;
use Faker\Generator as Faker;
use Illuminate\Support\Str;

/*
|--------------------------------------------------------------------------
| Model Factories
|--------------------------------------------------------------------------
|
| This directory should contain each of the model factory definitions for
| your application. Factories provide a convenient way to generate new
| model instances for testing / seeding your application's database.
|
*/

$factory->define(User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' =>  $faker->password,
    ];
});
```

#Seederフィイルを編集
Seederファイルでfactoryファイルのfakerを呼び出す感じです！
以下のように追加してみてください。
ここでは、１００件のデータを作成しています。


```database/seeds/UserTableSeeder.php
<?php

use Illuminate\Database\Seeder;
use App\User;
use Faker\Factory as Faker;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        User::truncate();

        User::create([
            'name' => '山田',
            'email' => 'yamada@test.com',
            'password' => Hash::make('test')
        ]);

        //日本語のテストデータ作成
        $faker = Faker::create('ja_JP');

        // 100件のテストデータを繰り返し作成
        for($i = 0; $i < 100; $i++){
            User::create([
                'name' => $faker->name,
                'email' => $faker->email,
                'password' => Hash::make('test')
            ]);
        }

        factory(User::class, 100)->create();
    }
}
```

件数を指定するコードはここですね。(今は100件のデータを作成しています)

```
for($i = 0; $i < 100; $i++){
```

#コマンドを実行する準備
Seederを実行するには、DatabaseSeederファイルを編集する必要があります。
以下のように編集してください。

```database/seeds/DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UsersTableSeeder::class); //コメントアウトを外す
    }
}
```

追加したseederファイルがある場合、オートローダーを再生成する必要があります。

```
$ composer dump-autoload
```

コマンドを実行します。

```
$ php artisan db:seed

Seeding: UsersTableSeeder
Seeded:  UsersTableSeeder (7.76 seconds)
Database seeding completed successfully.
```

これで完了です！