Laravel

Laravelでテストデータを用意する方法(Seederの使い方)

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

⇨ Laravel 記事の目次はこちら

Laravel でテストデータを用意する方法(Seeder の使い方)について書いていきます。

テストデータ とは?

サービスを作る中で、想定される投稿情報や、画像ファイルなど、レイアウトを決めるときやデータの取得のロジックを作る際に、様々なテストデータを用意します。

Laravel では Seeder という機能で、テストデータを簡単にチームで共有することができます。

いちいち各々でテストデータを Tinker などで挿入するよりも、圧倒的に効率が良い方法となります。

この記事の内容は公式ドキュメント(シーディング)の要約となります

検証環境

Laravel 6

テーブル設計

リレーション設計

この状態のテーブルに対してテストデータを作っていきます。

コマンドでファイルを生成する

コマンドで Seeder ファイルを作成します。

php artisan make:seeder UsersTableSeeder

databases/seeds/UsersTableSeeder.php が生成されました。

シーダーにテストデータを書く

UsersTableSeeder.php

<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;

class UsersTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('users')->delete();

        $data = [
            [
                'name' => 'ユーザー1',
                'email' => 'user1@test.com',
                'password' => Hash::make('password'),
                'created_at' => now(),
                'updated_at' => now()
            ]
        ];

        DB::table('users')->insert($data);
    }
}

書き方は様々あると思いますが、自分はこのように$data を定義して insert しています。

DatabaseSeeder.php に定義する

databases/seeds/DatabaseSeeder.php を編集してさきほど作成した Seeder ファイルを読み込ませます。

    public function run()
    {
        $this->call(UsersTableSeeder::class);
    }

このように定義したら、コマンドを打ちます。

composer dump-autoload

下のような感じでクラスが読み込まれたら OK です。

composer dump-autoload
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: diglactic/laravel-breadcrumbs
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: laravel/ui
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Generated optimized autoload files containing 5233 classes

そしたら、あとはコマンドで seeder を発動させるだけです。

コマンド

php artisan db:seed
または
php artisan migrate:fresh --seed

php artisan db:seed はシンプルにデータベースはそのままで seeder ファイルだけ読み込ませたい時。

php artisan migrate:fresh —seed は、いったんデータをフレッシュ(初期化という表現が正しいかわからないけど、初期化するイメージ)させてから seeder でテストデータを入れる時。

開発環境だと Seeder でテストデータを基本的に生成すれば良いことが多いので、

php artisan migrate:fresh --seed

を使うことが個人的には多いです。

シーダーファイルで for 文を使う

サンプルで置いておきます。

参考にしてみてください。

    public function run()
    {
        DB::table('users')->delete();

        for($i = 0; $i < 100; $i++){
            $data[] =
            [
                'name' => "ユーザー${i}",
                'email' => "user${i}@test.com",
                'password' => Hash::make('password'),
                'created_at' => now(),
                'updated_at' => now()
            ];
        }

        DB::table('users')->insert($data);
    }

普通に配列に追加していけば良いです。

まとめ

いかがだったでしょうか?

以上が Laravel でテストデータを作る方法として Seeder を使う手順となります。

感想や誤字などありましたら、TwitterDM からご連絡お願いします。

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする