Laravelでは、開発やテストの効率化のために、データベースに初期データを自動的に挿入できる「シーディング(Seeding)」という仕組みが用意されています。本記事では、Seederの基本からFactoryとの連携、実行方法までを網羅的に解説します。
シーディングとは何か?
シーディングとは、テーブルに初期データを投入する処理のことです。LaravelではDatabaseSeederクラスと、それに紐づく個別のSeederクラスを使って、任意のデータを登録することができます。開発環境やステージング環境で、あらかじめ用意したテストデータを素早く投入できるため、効率的な開発に欠かせない機能です。
Seederクラスの作成
LaravelでSeederクラスを作成するには、以下のArtisanコマンドを使用します。
php artisan make:seeder UsersTableSeeder
このコマンドでdatabase/seeders/UsersTableSeeder.phpというファイルが生成されます。
中身は以下のように記述します。
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
class UsersTableSeeder extends Seeder
{
public function run()
{
DB::table('users')->insert([
'name' => 'テストユーザー',
'email' => 'test@example.com',
'password' => Hash::make('password'),
]);
}
}
この例では、usersテーブルに1件のデータを直接挿入しています。
DatabaseSeederでの呼び出し
作成したSeederを実行対象にするには、DatabaseSeeder.phpファイルに追記します。
public function run()
{
$this->call([
UsersTableSeeder::class,
]);
}
この状態で以下のコマンドを実行すれば、Seederに記述された処理が実行されます。
php artisan db:seed
複数のSeederをまとめて実行する
$this->call()メソッドには複数のSeederクラスを配列で指定することができます。
$this->call([
UsersTableSeeder::class,
PostsTableSeeder::class,
CategoriesTableSeeder::class,
]);
このように記述すれば、関連するテーブルへの初期データをまとめて登録できます。
Factoryと連携した大量データの投入
Laravelでは「Factory」と「Faker」ライブラリを使って、ランダムなダミーデータを簡単に生成できます。
まずFactoryファイルを作成します。
php artisan make:factory UserFactory --model=User
作成されたdatabase/factories/UserFactory.phpに、以下のようなダミーデータ定義を記述します。
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Hash;
public function definition()
{
return [
'name' => $this->faker->name(),
'email' => $this->faker->unique()->safeEmail(),
'password' => Hash::make('password'),
'remember_token' => Str::random(10),
];
}
SeederでFactoryを呼び出すには、以下のように記述します。
public function run()
{
\App\Models\User::factory()->count(10)->create();
}
これにより、10件のランダムなユーザーデータが生成されます。
シーディングの再実行方法と注意点
すでにシーディングを実行済みの場合、再投入の前にテーブルのデータをリセットしたいケースもあります。その場合は、以下のコマンドを使います。
php artisan migrate:refresh --seed
このコマンドはマイグレーションを初期化し、シーディングまで一括で実行します。開発中によく使われる便利なコマンドです。
ただし、実行時にはデータベースが初期化されるため、本番環境での使用は避けてください。
本番環境での利用時の注意
シーディングは基本的に開発やテスト用の仕組みですが、本番環境で必要な初期データ(例:管理者ユーザーや設定項目)を登録する目的で使うこともあります。その場合は、–classオプションを使って、特定のSeederだけを実行するようにしましょう。
php artisan db:seed --class=AdminUserSeeder
また、シーディング処理には破壊的な操作(truncateなど)を含めないよう十分に注意してください。
まとめ
LaravelのSeeder機能を活用すれば、初期データの登録作業が大幅に効率化されます。Factoryと組み合わせることで、リアルなダミーデータも手軽に生成でき、開発やテストの精度向上にもつながります。目的に応じて適切に使い分けながら、堅牢なアプリケーション構築に役立てましょう。