はじめに

Laravelでは、データベースのテーブル構造を定義・変更したり、初期データを登録したりするための便利な仕組みとして「マイグレーション」と「シーダー」が用意されています。
これらを活用することで、SQLを直接書かずにデータベース操作ができ、開発効率が大幅に向上します。

この記事では、Laravel初心者の方に向けて、マイグレーションとシーダーの基本的な使い方や作成方法、実行手順までをわかりやすくまとめました。
「そもそもマイグレーションやシーダーって何?」「どうやって使えばいいの?」という疑問を持っている方は、ぜひこの記事を参考にしてみてください。

マイグレーション(migration)

マイグレーションとは、データベースのテーブル作成や編集などを管理する方法です。
1つのテーブルを作成するのに必要なマイグレーションファイルは1つ必要になります。

マイグレーションファイルの作成

Laravel Sailで開発環境を構築しているので、下記のようなコマンドを実行し、マイグレーションファイルを作成します。

$ ./vendor/bin/sail php artisan make:migration create_テーブル名(名詞の複数形)_table
  • Laravel Sailで開発環境を構築した場合は./vendor/bin/sail php artisanとなるので注意してください。
  • テーブル名のところは作成するテーブル名を複数形で入力してください。

マイグレーションファイルの構成

Laravelのバージョンによっても異なりますが、デフォルトで下記のマイグレーションファイルが存在します。

  • 2014_10_12_000000_create_users_table.php
  • 2014_10_12_100000_create_password_resets_table.php
  • 2019_08_19_000000_create_failed_jobs_table.php
  • 2019_12_14_000001_create_personal_access_tokens_table.php

これらデフォルトで存在するマイグレーションファイルのほとんどは、ログイン機能を実装する場合などに使用します。

マイグレーションファイルの記述

マイグレーションファイルを使用してカラムを追加する場合、基本$table->カラムタイプ(‘カラム名’)という形でカラム定義を記述します。

ちなみに利用可能なカラムタイプはドキュメントに一覧が載っているので、参照してみてください。
※バージョンの違い等で利用可能なカラムは変わる場合もあります。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('テーブル名', function (Blueprint $table) {
            $table->id();
            $table->string('title', 100); // ここを追加
            $table->text('content');      // ここを追加
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('articles');
    }
};

$table->string(‘title’, 100); とすることでtitleというカラム名の100文字という文字数制限があるカラムを生成します。
$table->text(‘content’); とすることでcontentというカラム名の文字数制限がないカラムを生成します。

マイグレーションの実行

記述が終わったら、下記コマンドでマイグレーションの実行をしていきましょう。

$ ./vendor/bin/sail php artisan migrate

実行が成功したら、phpMyAdminへアクセスして、データベースにテーブルが作成されていると思います。

補足

未処理のマイグレーションをすべて実行するには、migrate Artisanコマンドを実行します。

./vendor/bin/sail php artisan migrate

データベースからすべてのテーブルを削除したあと、migrateコマンドを実行します。

./vendor/bin/sail php artisan migrate:fresh
./vendor/bin/sail php artisan migrate:fresh --seed

すべてのマイグレーションをロールバックしてから、migrateコマンドを実行します。このコマンドは、データベース全体を効果的に再作成します。

./vendor/bin/sail php artisan migrate:refresh
./vendor/bin/sail php artisan migrate:refresh --seed

シーダー(seeder)

シーダーとは、データベースにテストデータを作成するための機能です。

シーダーファイルの作成

シーダーファイルもマイグレーションファイル同様、コマンドで作成することができます。
下記コマンドを実行してください。

$ ./vendor/bin/sail php artisan make:seeder テーブル名TableSeeder

テーブル名の1文字目は大文字にしてください。

シーダーファイルの記述

記述したテーブル名のテーブルへデータを追加する場合、DB::table(‘テーブル名’)->insert([追加するデータ群]);という形でカラム定義を記述します。

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB; // ここを追加

class テーブル名TableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // --- ここから追加 ---
        DB::table('テーブル名')->insert([
            'title' => 'タイトル1',
            'content' => 'テストデータ1',
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s'),
        ]);

        DB::table('テーブル名')->insert([
            'title' => 'タイトル2',
            'content' => 'テストデータ2',
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s'),
        ]);

        DB::table('テーブル名')->insert([
            'title' => 'タイトル3',
            'content' => 'テストデータ3',
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s'),
        ]);
        // --- ここまで追加 ---
    }
}

シーダーファイルの登録

作成したシーダーファイルは、実行するためにDatabaseSeeder.phpへ登録することが必要です。

登録の仕方は下記の通り編集してください。

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(テーブル名TableSeeder::class); // ここを追加
        // \App\Models\User::factory(10)->create();

        // \App\Models\User::factory()->create([
        //     'name' => 'Test User',
        //     'email' => 'test@example.com',
        // ]);
    }
}

シーダーファイルの実行

記述が終わったら、下記コマンドでシーダーファイルの実行をしていきましょう。

$ ./vendor/bin/sail php artisan db:seed

実行が成功したら、phpMyAdminへアクセスして、データベースにテストデータが登録されていると思います。

さいごに

今回は、Laravelのマイグレーションとシーダーについて、基本的な使い方や実行方法を中心に解説しました。
これらの機能を使いこなすことで、データベースの管理がより効率的になり、チーム開発でも一貫性のある環境を構築しやすくなります。

最初は慣れない部分もあるかもしれませんが、何度か手を動かして試すことで、自然と理解が深まっていきます。
次のステップとしては、ファクトリ(Factory)との連携や、本番環境でのマイグレーション運用などにもチャレンジしてみると、さらにLaravel開発の幅が広がりますよ。

ぜひ今回の内容を、あなたのLaravelプロジェクトに役立ててみてください!