Laravelで特定のSeederだけ実行する方法!db:seed --class=で必要なデータだけ登録
生徒
「先生、Laravelで全部のSeederじゃなくて、特定のSeederだけ実行することってできますか?」
先生
「できますよ。それにはdb:seedコマンドの--class=オプションを使います。」
生徒
「具体的にどうやって使うんですか?」
先生
「コマンドに実行したいSeederのクラス名を指定するだけです。必要なデータだけ登録できるので便利です。」
1. 特定のSeederだけ実行するメリット
Laravelでは通常、DatabaseSeederにまとめられた複数のSeederをdb:seedで一括実行します。しかし開発中やテスト中に、特定のテーブルだけデータを更新したい場合があります。そんなとき--class=Seeder名を使うと、指定したSeederだけ実行でき、効率よくデータを管理できます。
例えば、ユーザー情報だけ更新したい場合に、記事情報やコメント情報まで再生成する必要はありません。必要な部分だけ実行できるので時間も節約できます。
2. Seederクラスを作成する
まずはSeederクラスを作成します。ターミナルで次のコマンドを実行します。
php artisan make:seeder UsersTableSeeder
作成されるUsersTableSeeder.phpはdatabase/seedersフォルダ内に生成されます。run()メソッドにデータ登録処理を書きます。
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class UsersTableSeeder extends Seeder
{
public function run(): void
{
DB::table('users')->insert([
'name' => 'テストユーザー',
'email' => 'test@example.com',
'password' => bcrypt('password'),
]);
}
}
3. 特定のSeederだけ実行する方法
作成したSeederを個別に実行するには、次のコマンドを使います。
php artisan db:seed --class=UsersTableSeeder
このコマンドを実行すると、UsersTableSeederだけが実行され、ユーザー情報がテーブルに登録されます。ほかのSeederは実行されません。
4. 実行手順のイメージ
手順をまとめると次の通りです。
- Seederを作成する(
php artisan make:seeder) run()メソッドにデータ登録処理を記述するphp artisan db:seed --class=Seeder名で特定のSeederを実行
これで必要なデータだけを素早く登録でき、開発やテストが効率化されます。
5. 注意点
--class=Seeder名を使う場合、Seederクラス名を正しく指定する必要があります。名前が間違っているとエラーになります。また、既存のデータを上書きしたくない場合は、insertの前にデータが存在するか確認する処理を追加すると安心です。
特定のSeederだけ実行する方法は、開発環境やテスト環境で効率よくデータ管理するための基本テクニックとして覚えておきましょう。