カテゴリ: Laravel 更新日: 2026/02/25

Laravelで特定のSeederだけ実行する方法!db:seed --class=で必要なデータだけ登録

Laravelで特定のSeederのみ実行する方法(`db:seed --class=`)
Laravelで特定のSeederのみ実行する方法(`db:seed --class=`)

先生と生徒の会話形式で理解しよう

生徒

「先生、Laravelで全部のSeederじゃなくて、特定のSeederだけ実行することってできますか?」

先生

「できますよ。それにはdb:seedコマンドの--class=オプションを使います。」

生徒

「具体的にどうやって使うんですか?」

先生

「コマンドに実行したいSeederのクラス名を指定するだけです。必要なデータだけ登録できるので便利です。」

1. 特定のSeederだけ実行するメリット

1. 特定のSeederだけ実行するメリット
1. 特定のSeederだけ実行するメリット

Laravelの標準的な機能では、DatabaseSeeder.phpに登録されたすべてのSeederが順番に実行されます。しかし、開発を進めていると「今、修正したこのテーブルのデータだけを入れ直したい!」という場面が頻繁に発生します。

例えば、ECサイトの開発で「商品カテゴリー」のデータだけを新しく追加したい場合、わざわざ「大量の注文履歴」や「数千人のユーザーデータ」を最初から作り直すのは、時間の無駄ですし、PCにも負荷がかかります。そんな時に--class=オプションを使えば、ピンポイントで必要なデータだけを登録でき、開発の待ち時間を大幅に短縮できます。

プログラミング未経験の方でもイメージしやすいよう、身近な例で考えてみましょう。

例:学校の名簿管理システム
「1年A組」の名簿だけを新しくしたいのに、学校全体の全学年・全クラスの名簿をすべてシュレッダーにかけて作り直すのは大変ですよね?「1年A組の分だけ差し替える」のが、今回の特定のSeederだけ実行するという操作です。

具体的には、以下のようなメリットがあります:

  • 開発スピードの向上: 必要なデータだけを数秒で登録できる。
  • エラーの切り分けが簡単: 1つのSeederだけ動かすので、もしエラーが出ても原因を特定しやすい。
  • 既存データの保護: 他のテーブルにある大切なテストデータを消さずに済む。

このように、特定のSeederを個別に実行するテクニックは、効率的なLaravel開発において必須のスキルと言えます。

2. Seederクラスを作成する

2. Seederクラスを作成する
2. Seederクラスを作成する

まずはSeederクラスを作成します。ターミナルで次のコマンドを実行します。


php artisan make:seeder UsersTableSeeder

作成されるUsersTableSeeder.phpdatabase/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だけ実行する方法

3. 特定のSeederだけ実行する方法
3. 特定のSeederだけ実行する方法

作成したSeederを個別に実行するには、次のコマンドを使います。


php artisan db:seed --class=UsersTableSeeder

このコマンドを実行すると、UsersTableSeederだけが実行され、ユーザー情報がテーブルに登録されます。ほかのSeederは実行されません。

4. 実行手順のイメージ

4. 実行手順のイメージ
4. 実行手順のイメージ

手順をまとめると次の通りです。

  1. Seederを作成する(php artisan make:seeder
  2. run()メソッドにデータ登録処理を記述する
  3. php artisan db:seed --class=Seeder名で特定のSeederを実行

これで必要なデータだけを素早く登録でき、開発やテストが効率化されます。

5. 注意点

5. 注意点
5. 注意点

--class=Seeder名を使う場合、Seederクラス名を正しく指定する必要があります。名前が間違っているとエラーになります。また、既存のデータを上書きしたくない場合は、insertの前にデータが存在するか確認する処理を追加すると安心です。

特定のSeederだけ実行する方法は、開発環境やテスト環境で効率よくデータ管理するための基本テクニックとして覚えておきましょう。

まとめ

まとめ
まとめ

ここまで、Laravelにおける特定のSeeder(シーダー)を個別に実行する方法について詳しく解説してきました。大規模なWebアプリケーションの開発現場や、複雑なデータベース構造を持つプロジェクトにおいて、すべてのテストデータを一括で流し込むのは非常に時間がかかる作業です。しかし、php artisan db:seed --class=Seeder名というコマンドを使いこなすことで、開発効率は劇的に向上します。

LaravelのSeederを使いこなすための重要ポイント

Laravelのシーディング機能は、初期データやテスト用データをデータベースに効率よく挿入するための仕組みです。標準的な開発フローでは、DatabaseSeeder.phpの中に各シーダークラスを登録し、php artisan db:seedコマンドで一括実行するのが一般的です。しかし、実際の開発シーンでは「新しく追加したテーブルにだけデータを入れたい」「特定のマスターデータだけを更新したい」といった場面が多々あります。

このような場合に、特定のクラスを指定して実行できる仕組みを知っておくと、不要なデータの重複登録や実行待ち時間を削減できます。以下に、より実務的な活用例や注意点を詳しく深掘りしてまとめます。

さらに実務で役立つSeederの活用テクニック

特定のSeederを実行する際には、そのクラスが依存している他のデータについても考慮する必要があります。例えば、PostsTableSeeder(記事データ)を実行したい場合、その記事の作成者となるUsersTableSeeder(ユーザーデータ)が既に存在している必要があります。単体で実行してエラーが出る場合は、外部キー制約(Foreign Key Constraints)を確認しましょう。

また、開発環境をリセットして特定のデータだけを入れたい場合は、マイグレーションと組み合わせて次のようなコマンドを使うことも多いです。


// 全テーブルをリセットして特定のシーダーだけを実行する
php artisan migrate:fresh --seed --class=UsersTableSeeder

このコマンドは、一度データベースをまっさらな状態にした上で、指定したシーダーだけをピンポイントで実行してくれるため、クリーンな状態でテストを開始したい時に非常に重宝します。

サンプルプログラム:Factoryを活用したSeederの実装

より実践的なコードとして、Laravelの「Factory(ファクトリ)」を利用したSeederの書き方をおさらいしましょう。大量のダミーデータを作成する場合、手動で配列を書くよりもFactoryを使うのが標準的です。


namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\User;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        // 10人のユーザーを自動生成する
        User::factory()->count(10)->create([
            'password' => bcrypt('password123'),
        ]);

        // 管理者ユーザーを一人だけ固定で作成する
        User::factory()->create([
            'name' => '管理者ユーザー',
            'email' => 'admin@example.com',
            'role' => 'admin',
        ]);
    }
}

このように定義されたシーダーを個別に呼び出すことで、特定の役割を持つデータセットを瞬時に構築できます。


// 実行コマンド
php artisan db:seed --class=UsersTableSeeder

// 実行結果の例
Seeding: Database\Seeders\UsersTableSeeder
Seeded:  Database\Seeders\UsersTableSeeder (52.41ms)

SEOを意識した開発環境のベストプラクティス

Laravelでの開発において、PHPの職人(Artisan)コマンドを適切に使うことは、保守性の高いコードを書く第一歩です。db:seedオプションをマスターすることで、チーム開発におけるドキュメント作成の手間も省けます。「このデータを入れたい時はこのコマンドを叩いてね」と伝えるだけで済むからです。

また、Laravel 8以降ではSeederのネームスペース(Namespace)が厳格化されているため、ディレクトリ構造にも注意を払いましょう。database/seeders配下にあるクラスは、オートロードの対象となっているか、ファイル名とクラス名が一致しているかを常にチェックする習慣をつけるのが、バグを未然に防ぐコツです。

先生と生徒の振り返り会話

生徒

「先生、今回のまとめで特定のSeederだけを実行する方法が完全に理解できました!--class=の後ろにクラス名を入れるだけなんですね。思っていたよりもずっとシンプルでした。」

先生

「そうですね。でも、ただコマンドを知っているだけではなく、なぜそれを使うのかという背景も重要です。例えば、本番環境で一部のマスタデータだけを更新したい時などにも応用が利きますよ。ただし、本番環境で実行する時は必ずバックアップを取るようにしましょうね。」

生徒

「本番環境での実行は緊張しますね……。あ、そういえば、もしシーダークラスがサブフォルダの中にある場合はどうすればいいんですか?」

先生

「いい質問ですね。その場合は、ネームスペースを含めて指定する必要があります。例えば、database/seeders/Admin/AdminUserSeeder.phpなら、--class="Admin\AdminUserSeeder"のようにダブルクォーテーションで囲って指定すれば大丈夫です。」

生徒

「なるほど!ディレクトリを整理して管理している場合でも、バックスラッシュを使えばピンポイントで呼び出せるんですね。これなら大規模なプロジェクトでシーダーの数が数百個になっても迷わずに済みそうです。」

先生

「その通りです。あと、開発中は何度も同じシーダーを実行することがあるので、DB::table('users')->truncate();のように、実行前にテーブルを空にする処理を入れておくテクニックもありますよ。ただし、これには注意も必要ですが。」

生徒

「既存のデータが消えちゃうからですね。状況に応じて、updateOrInsertなどを使って、データがなければ作る、あれば更新するという風に書くのが安全かもしれません。PHPの柔軟な書き方を活かして、もっと賢いシーダーを作ってみます!」

先生

「素晴らしい向上心です。LaravelのArtisanコマンドは、開発者のストレスを減らすために作られています。公式ドキュメントも読みながら、自分なりの便利な使い方をどんどん模索していってくださいね。」

関連記事:
カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティングの基本を完全ガイド!YAML・PHP・アノテーションの違いもわかりやすく解説
New2
Laravel
LaravelでAPIのレスポンスをテストする方法を完全解説!assertJsonで初心者も安心
New3
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New4
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.4
Java&Spring記事人気No4
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.5
Java&Spring記事人気No5
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.7
Java&Spring記事人気No7
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelでファクトリを使ってテストデータを作成する方法を完全解説!初心者向けLaravelテスト入門