

などの疑問や悩みを解決してまいります。
本記事の目次
Seeder(シーダー)とは
LaravelにおいてSeeder(シーダー)とは、データベースに初期データを登録するための機能です。
テストデータや開発環境で必要なデータを簡単に挿入できるため、手動で入力する手間を省けます。

Seederファイルの作成
Seederファイルの作成方法は、以下のコマンドを実行します。
// ファイル名はアッパーキャメルで書く
php artisan make:seeder {シーダーファイル名}
// 例
php artisan make:seeder TestsTableSeeder作成が成功すると以下のメッセージが表示されます。
![Seeder [database/seeders/TestsTableSeeder.php] created successfully.](https://mitsutano-oshiro.com/wp-content/uploads/2024/09/0d8e4a6ad901307053eb145af168f36d.png)
作成されたSeederファイルは、database/seeders内に追加されています。
Seederファイルの中身
作成したSeederファイルを見ていきましょう。
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class TestsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        //
    }
}Seederを実行するとrun()メソッドが実行されます。

run()メソッドの中に、登録するデータを記述します。Seeder実行の準備
Seederを実行して、指定したテーブルにデータを登録します。
今回データを登録するデータベーステーブルは以下のようにシンプルな構造にしています。
| カラム名 | データ型 | 制約 | 説明 | 
|---|---|---|---|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | ユーザーの一意のID | 
| name | VARCHAR(255) | NOT NULL | ユーザーの名前 | 
| created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | レコード作成日時 | 
| updated_at | TIMESTAMP | NULL, ON UPDATE CURRENT_TIMESTAMP | レコード更新日時 | 
TestsTableSeeder.phpの編集
TestsTableSeeder.phpを以下のように編集します。
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB; // 追加
class TestsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
    // 登録するデータ
        DB::table('tests')->insert([
            [
                'name' => 'Test 1',
                'created_at' => now(),
                'updated_at' => now(),
            ],
            [
                'name' => 'Test 2',
                'created_at' => now(),
                'updated_at' => now(),
            ],
            [
                'name' => 'Test 3',
                'created_at' => now(),
                'updated_at' => now(),
            ],
        ]);
    }
}
DBファサードをインポート
データベース操作に関するファサードDBをインポートしています。
use Illuminate\Support\Facades\DB
DBファサードは、Laravelでデータベース操作を簡単に行うための機能です。これを使用すると、クエリビルダや生のSQLクエリを実行したり、データベース接続を管理したりすることができます。DB::table('tests')
 インポートしたDBファサードを使って、testsという名前のテーブルを指定しています。
insert()
insert()メソッドは、testsテーブルにデータを挿入するメソッドです。
ここでは配列で複数のレコードを一度に挿入しています。

insert()メソッドを使って、複数のレコードを一度にまとめてデータベースに挿入する方法を「バルクインサート」とも言います。DatabaseSeeder.phpの編集
登録するデータの設定ができましたら、次にDatabaseSeeder.phpを編集します。

<?php
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        $this->call([
            TestsTableSeeder::class // 追加
        ]);
    }
}DatabaseSeeder.phpでは、複数のSeederクラスをまとめて実行する役割を果たします。
run()
run()メソッドが実行されると、次に説明するcall()メソッド内に指定されたSeederクラスが順次呼ばれて、データベースにデータが登録されます。
今回はTestsTableSeeder.phpに設定しているデータをtestsテーブルに登録したいので、TestsTableSeeder::classを記述します。
$this->call()
call()メソッドは、指定したSeederクラスを呼び出して実行します。

TestsTableSeederクラスを呼び出し、データ登録を実行しています。Seederの実行
実行準備が整いましたので、以下コマンドを実行します。
php artisan db:seed
ファイルごとに個別に実行したい場合は以下のコマンドを実行してください。
php artisan db:seed --class={シーダーファイル名}
成功したらデータベースのtestsテーブルを確認して下さい。
以下のようにデータが登録されていたらOKです。
| id | name | created_at | updated_at | 
| 1 | Test 1 | 2024-09-19 07:17:56 | 2024-09-19 07:17:56 | 
| 2 | Test 2 | 2024-09-19 07:17:56 | 2024-09-19 07:17:56 | 
| 3 | Test 3 | 2024-09-19 07:17:56 | 2024-09-19 07:17:56 | 
まとめ
LaravelのSeeder機能は、開発やテストの環境を素早く整えることができます。
データ作成を手動で行うのはかなり手間で時間もかかってしまうので、ぜひこの記事を参考にSeeder機能を活用してください。