make:seeder
- カテゴリ: artisan
- 掲載バージョン: Laravel 12・PHP 8.4
- 名前空間 / FQCN / コマンド:
php artisan make:seeder - 関連: make:model, make:factory, make:migration, php artisan db:seed, php artisan migrate
- 変更履歴: Laravel 12 では
--forceオプションが追加され、既存Seederを上書きできるようになった。
要点(TL;DR)
- 何に使うか:データベースシーダークラスを生成する。
- 最低限の使い方:
php artisan make:seeder UserSeeder - よくある罠
- 既存ファイルを上書きしたいときに
--forceを付け忘れる。 - 名前にプレフィックスを付けずに
make:seederするとクラス名がSeeder.phpになる。 - マイグレーションと同時にシーダーを実行したい場合は
php artisan migrate --seedを忘れないこと。
概要
make:seeder は database/seeders ディレクトリにシーダークラスを生成する Artisan コマンドです。
生成されたクラスは run() メソッドでデータを挿入でき、php artisan db:seed で呼び出します。
実務では Factory と組み合わせて大量データの作成やテストデータの生成に使われます。
構文 / シグネチャ
php artisan make:seeder {name} [--force]
| 引数 | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
| name | string | ○ | なし | シーダークラス名(例: UserSeeder) |
| –force | bool | × | false | 既存ファイルを上書きする |
戻り値:void(標準出力に生成結果を表示)。
例外/副作用:
- ファイル作成時にディレクトリが無い場合は自動生成。
- 既存ファイルを上書きするときは
--forceが必要。
使用例
最小例
php artisan make:seeder UserSeeder
生成されるファイル (database/seeders/UserSeeder.php):
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\User;
class UserSeeder extends Seeder
{
public function run()
{
// デフォルトでは何もしない
}
}
実務例
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\User;
class UserSeeder extends Seeder
{
public function run()
{
// 50件のユーザーをファクトリで作成
User::factory()->count(50)->create();
}
}
シーダーを実行するには:
php artisan db:seed --class=UserSeeder
またはマイグレーションと同時に:
php artisan migrate --seed
よくある落とし穴・注意
- 名前空間:
make:seeder Admin/UserSeederを実行するとDatabase\Seeders\Admin\UserSeederが作成されるので、ファイルパスと名前空間が一致しているか確認。 - 上書き:既存シーダーを生成し直すときは
--forceを忘れない。 - 自動読み込み:
database/seedersは Composer の PSR‑4 自動ロード対象外のため、composer dump-autoloadを実行する必要はない。 - 実行順序:複数シーダーを呼び出す場合は
DatabaseSeederでcall()メソッドに追加するか、--class=を使って個別に指定。
テスト例(Pest)
<?php
it('creates a seeder file', function () {
$name = 'TestSeeder';
$path = database_path('seeders/' . $name . '.php');
// 既存があれば削除
@unlink($path);
// コマンド実行
$this->artisan('make:seeder', ['name' => $name]);
expect(file_exists($path))->toBeTrue();
});
トラブルシューティング
| エラー | 原因 | 対策 |
|---|---|---|
Cannot create file: Permission denied |
database/seeders への書き込み権限が無い |
chmod -R 775 database/seeders で権限を付与。 |
Class UserSeeder not found |
PSR‑4 の自動ロードが反映されていない | composer dump-autoload でオートローダーを再生成。 |
参考リンク
- Laravel 公式ドキュメント – make:seeder
- Laravel 公式ドキュメント – シーダー
- Laravel 公式ドキュメント – Database Factories
- Laravel 公式ドキュメント – db:seed

