【Laravel】Seederを使ってテストデータを作成する方法を解説

Webアプリケーションの開発やテストを行う際、テストデータを効率的に用意することは非常に重要です。手動でデータ入力するのは時間がかかり、ミスも起こりやすく、データの量が増えるにつれて現実的ではなくなります。
ここで役立つのがLaravelの「Seeder」です。

Seederは、データベースにテストデータを簡単に挿入できる機能で、特に開発環境やテスト環境で力を発揮します。これにより、データベースに必要なデータを自動的に生成することができます。
例えば、ユーザデータや商品のデータなどを扱うようなアプリケーションの場合、Seederを使ってそのデータを素早く作成し、テストに必要な環境を簡単に整えることができます。

Seederをうまく活用することで、テストデータの作成が格段に効率化され、データの整合性を保ちながら、実用的なテスト環境を素早くセットアップできるようになります。

この記事では、Laravelの「Seeder」を使ってテストデータを作成するための具体的な手順やコツを詳しく解説していきます。

Seederの作成手順

Seederを使ってテストデータを作成するためには、まずSeederクラスを作成する必要があります。

Seederクラスを作成する

ターミナルで以下のコマンドを実行して、Seederクラスを作成します。

php artisan make:seeder UserSeeder

このコマンドを実行すると、database/seeders/ ディレクトリ内に UserSeeder.php というファイルが自動的に生成されます。このファイルが、データベースにテストデータを挿入するためのスクリプトになります。

Seederファイルの構造

作成されたSeederファイルを見てみると、基本的な構造がすでに用意されています。

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // ここにデータを挿入する処理を書く
    }
}

Seederファイルの下部分にあるrun メソッドが重要で、この中に実際にデータを挿入する処理を記述していきます。

    public function run()
    {
        // データベースに挿入するデータを定義
        DB::table('users')->insert([
            'name' => Str::random(10),
            'email' => Str::random(10).'@example.com',
            'password' => bcrypt('password'),
        ]);
    }

ここでは、DB::table('users')->insert() メソッドを使って、users テーブルにデータを挿入しています。Str::random() メソッドを利用して、ランダムな名前とメールアドレスを生成し、パスワードはbcrypt 関数と呼ばれるもので、ハッシュ化をしています。

また、テストデータを複数件登録する場合は、次のようになります。

    public function run()
    {
        // データベースに挿入するデータを定義
        DB::table('users')->insert([
            'name' => Str::random(10),
            'email' => Str::random(10).'@example.com',
            'password' => bcrypt('password'),
        ]);     

   
    // ↓同じ処理を続けて書くと、複数件テストデータを登録できる
        DB::table('users')->insert([
            'name' => Str::random(10),
            'email' => Str::random(10).'@example.com',
            'password' => bcrypt('password'),
        ]);

    ・・・
    }

Seederを登録する

Seederを作成したら、DatabaseSeeder クラスに新しいSeederを登録します。
database/Seeders/DatabaseSeeder.php を開き、call() メソッドを使って、先ほど作成したUserSeeder を呼び出します。

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call([
            UserSeeder::class,
        ]);
    }
}

これで、php artisan db:seed と実行すれば、UserSeeder が自動的に実行されるようになります。

php artisan db:seed

まとめ

本記事では、LaravelのSeederを使って、テストデータを作成していく方法を解説しました。

Seederの作成方法からデータの挿入する方法を理解することで、開発の効率が向上します。
今後の開発プロジェクトではSeederを活用し、データの準備にかかる手間を減らしつつ、テストやデバッグに集中できる環境をと整えていければと思っています。

コメント