アプリケーションを開発している時に、ほぼ必ずといっていいほどデータベースに初期データを登録する方法について解説します。
確認は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やランダム生成を活用することで、開発効率を大幅に向上させることが可能です。
コメント