LaravelでSeederを使った初期データの登録方法

Laravel Laravel

アプリケーションを開発している時に、ほぼ必ずといっていいほどデータベースに初期データを登録する方法について解説します。
確認はLaravel10で行っておりますが、Laravel8や9でも同様に行って開発をしていましたので、手順やコマンドは変わらないと思います。

LaravelのSeeder(シーダー)とは

LaravelのSeederは、データベースにテストデータや初期データを登録するための機能です。
アプリケーション開発において、ダミーデータやサンプルデータを簡単に挿入することができ、データベースの状態を確認するのに非常に便利です。

Seederは、artisanコマンドを使ってシーダーファイルを作成し、その中にデータ挿入のロジックを書き込みます。
この記事では、具体的なシーダーの作成手順や、Seederを使った初期データの登録方法を解説します。

Seederファイルの作成

手順としてはSeederを作成した後に、登録するデータを記載していきます。
Seederの作成にはartisanのmake:seederコマンドを利用して行います。

Seederを作成する

今回は例としてユーザーテーブルを作成します。

php artisan make:seeder UserSeeder

このコマンドにより、database/seedersフォルダ内にUserSeeder.phpとして作成されます。
作成されたファイルは以下のようになっています。

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        //
    }
}

runメソッドがSeederを実行したときに処理されるメソッドです。
ここに登録処理を書いていきます。

Seederファイルの作成

次に、作成したSeederファイルにデータを挿入する処理を記述します。
例えば、usersテーブルに3つのフィールド「name」「email」「password」があると仮定して、以下のように編集します。

Modelがない場合

ModelがないのでDBファサードを使用してデータを挿入します。

<?php
 
namespace Database\Seeders;
 
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
 
class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeders.
     */
    public function run(): void
    {
        DB::table('users')->insert([
            'name' => '山田 太郎',
            'email' => 'yamada.taro@example.com',
            'password' => Hash::make('password'),
        ]);
    }
}

Model作成済みの場合

あまり変わらないですが、Modelがあるならばこちらの方が良いかもしれません。

<?php
 
namespace Database\Seeders;
 
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use App\Models\User;
 
class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeders.
     */
    public function run(): void
    {
        User::create([
            'name' => '山田 太郎',
            'email' => 'yamada.taro@example.com',
            'password' => Hash::make('password'),
        ]);
    }
}

テスト用などでランダムな値を入れたい

ランダムな名前やメールアドレスを入れたい場合は、FactoryとFakerを利用すると楽に登録ができるようになります。
これに関しては以下の記事を参考にしてみてください。

DatabaseSeederを編集する

作成したSeederファイルは、database/seeders/DatabaseSeeder.phpから呼び出すようにして使用します。
今回は1ファイルだけですが、複数ファイルの場合はcallメソッドの引数の配列に追加していきます。

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

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

Seederを実行する

以下のコマンドで実際のテーブルにデータが作成されます。

php artisan db:seed

Seederを指定して実行する

--classで作成したSeederを指定することもできます。
指定した場合はdatabase/seeders/DatabaseSeeder.phpに登録していなくても実行できます。

php artisan db:seed --class=UserSeeder

Migrateと同時にSeederも実行する

テーブル作成をするマイグレーションと同時に初期データを入れたい場合はartisanコマンドのmigrateで作成できます。

php artisan migrate --seed

アプリケーション作成初期時には、データを壊してしまったりして、DBをリセットしたりすることが多いと思います。
その際に、マイグレーションファイルと共にSeederも用意しておけば、何度でもやり直しができます。
aritsanコマンドのmigrate:freshは私もよく利用するので覚えておきましょう。

php artisan migrate:fresh --seed

まとめ

Seederを使えば、データベースへの初期データ登録が簡単に行えます。
特にテストデータやダミーデータを作成する際に役立ちます。
シンプルなデータ挿入だけでなく、Factoryやランダム生成を活用することで、開発効率を大幅に向上させることが可能です。

コメント

タイトルとURLをコピーしました