記事内にはプロモーションが含まれています

Laravelマイグレーション作成ガイド | make:migrationを徹底解説

Laravelマイグレーション作成ガイド | make:migrationを徹底解説 プログラミングの疑問解決

Laravelで開発を行う際、データベースの管理は避けて通れないプロセスです。

特にチームで開発を進める場合、「Aさんのローカル環境では動くけれど、Bさんの環境ではカラムがなくてエラーになる」といった問題が起こりがちです。

このようなデータベース構造の違いをなくし、全員が同じ状態を保てるようにする仕組みが「マイグレーション(Migration)」です。

この記事では、Laravelでマイグレーションファイルを新規作成するための php artisan make:migration コマンドに焦点を当て、その具体的な使い方を徹底的に解説します。

新規テーブル作成と既存テーブルへのカラム追加という2大パターンをマスターしましょう。

【著者プロフィール&本記事の信頼性】
プロフィール
  • 著者は元エンジニア
  • 大手プログラミングスクールのWebディレクター兼 ライターを経験
  • 自らも地元密着型のプログラミングスクールを運営
プロフィール詳細はコチラ
忖度一切なし!
受講生から評判の良いプログラミングスクール
スクール
特徴
受講料金
大手比較サイトで4年連続人気NO.1!受講生からの評判も非常に高く、Web系のエンジニアを目指すならRUNTEQ一択。
657,000円
(最大約53万円の給付金が適用される)
月単価80万円以上の現役エンジニア講師による指導!一度入会すればサポートは半永久的。
498,000円
格安で質の高いWeb制作スキルを習得したい人におすすめ!業界最安級の料金でありながら、コミュニティやサポートが充実。
129,800円~
完全無料でプログラミングが学べる貴重なスクール!最短1ヶ月で卒業可能。ゼロスク運営会社への就職もできる。
完全無料
長期間に渡って学習し、希少人材を目指す人に最適なスクール!受講料は高いものの、高収入を得られる人材を目指せる。
96~132万円

Laravelのマイグレーションとは?

Laravelにおけるマイグレーションとは、データベースのスキーマ(テーブル構造)をPHPのコードで定義し、その変更履歴をバージョン管理できるようにする仕組みです。

通常、データベースのテーブルを作成するにはSQL(例: CREATE TABLE users ...)を直接実行する必要があります。

しかしマイグレーション機能を使えば、SQLの代わりにPHPのメソッド(例: $table->string('name');)を記述するだけで、Laravelが適切なSQLを自動的に生成・実行してくれます。

これにより、以下のような強力なメリットが生まれます。

  • SQLを直接書く必要がないため、構文ミスが減る。
  • チームメンバー全員が、同じPHPコード(マイグレーションファイル)を共有するだけで、データベースの構造を統一できる。
  • テーブルの変更履歴がGitなどのバージョン管理システムに残り、いつ誰がどのような変更を加えたかが明確になる。
  • rollback(ロールバック)機能により、変更を簡単に追加前の状態に戻すことが可能である。

マイグレーションファイルを作成する基本コマンド

マイグレーションファイルは、database/migrations ディレクトリに格納されます。
このファイルを手動で作成するのではなく、Artisanコマンド(Laravelの専用コマンドラインツール)を使って生成するのが一般的です。

その基本となるコマンドが make:migration です。

php artisan make:migration [マイグレーションファイル名]

例えば、php artisan make:migration create_users_table と実行すると、database/migrations フォルダ内に 2025_11_12_090000_create_users_table.php のようなファイルが作成されます。

ファイル名の先頭には実行日時(タイムスタンプ)が自動的に付与されます。

Laravelは、このタイムスタンプの順序に従ってマイグレーションを実行します。

【パターン別】make:migration の具体的な使い方

make:migration コマンドは、オプションを使い分けることで、目的に応じたテンプレートを自動で生成してくれます。

主に「新規テーブル作成」と「既存テーブル修正」の2パターンを覚えれば、大半のケースに対応可能です。

パターン1:新規テーブルを作成する (--create オプション)

新しいテーブル(例えば users テーブル)をゼロから作成する場合は、--create オプションを使用します。

php artisan make:migration create_users_table --create=users

コマンドの解説

  • create_users_table: マイグレーションファイル名です。「何をするファイルか」が分かる名前にするのが一般的です(例:「usersテーブルを作成する」)。
  • --create=users: これが最も重要なオプションです。= の後に指定したテーブル名(users)で、Schema::create 構文のひな形を自動生成するよう指示しています。

生成されるファイル (..._create_users_table.php)

上記コマンドを実行すると、以下のような内容のファイルが生成されます。

<?php

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

return new class extends Migration
{
    /**
     * マイグレーションの実行
     */
    public function up(): void
    {
        // --create=users により、このひな形が自動挿入される
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * マイグレーションの取り消し
     */
    public function down(): void
    {
        // --create オプションを使うと、down側も自動挿入される
        Schema::dropIfExists('users');
    }
};

ソースコードの解説

  • up() メソッド: マイグレーションを実行(php artisan migrate)した際に呼び出される処理です。Schema::create('users', ...) が自動で入っており、この中に id(自動増分)や timestampscreated_at, updated_at)のカラム定義がすでに追加されています。
  • down() メソッド: マイグレーションを取り消し(php artisan migrate:rollback)した際に呼び出される処理です。Schema::dropIfExists('users') が自動で入り、users テーブルが存在すれば削除する、という up とは逆の処理が定義されます。

パターン2:既存テーブルを修正する (--table オプション)

すでに存在するテーブル(例えば users テーブル)に、新しいカラム(例えば email カラム)を追加したり、既存のカラムを変更したりする場合は、--table オプションを使用します。

php artisan make:migration add_email_to_users_table --table=users

コマンドの解説

  • add_email_to_users_table: ファイル名です。「usersテーブルにemailを追加する」という具体的な内容が推奨されます。
  • --table=users: こちらも重要なオプションです。= の後に指定したテーブル名(users)で、Schema::table 構文(テーブル修正用)のひな形を自動生成するよう指示します。

生成されるファイル (..._add_email_to_users_table.php)

上記コマンドを実行すると、今度は Schema::table を使ったひな形が生成されます。

<?php

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

return new class extends Migration
{
    /**
     * マイグレーションの実行
     */
    public function up(): void
    {
        // --table=users により、このひな形が自動挿入される
        Schema::table('users', function (Blueprint $table) {
            // ここにカラム追加の処理を記述する
            // 例: $table->string('email')->unique()->after('name');
        });
    }

    /**
     * マイグレーションの取り消し
     */
    public function down(): void
    {
        Schema::table('users', function (Blueprint $table) {
            // up() で行った処理の「逆」を記述する
            // 例: $table->dropColumn('email');
        });
    }
};

ソースコードの解説

  • up() メソッド: Schema::table('users', ...) が自動生成されます。create と異なり、中身は空です。ここに、開発者自身が「追加したいカラム」の定義(例: email カラムの追加)を記述する必要があります。
  • down() メソッド: こちらも Schema::table のひな形が生成されます。up でカラムを追加したなら、down ではそのカラムを削除(dropColumn)する処理を記述するのが一般的です。

作成したマイグレーションファイルの中身(Schema)の書き方

make:migration でファイルを作成したら、次は up メソッドと down メソッドの中身を具体的に記述していきます。

up() と down() メソッドの役割

  • public function up(): void マイグレーションを「実行」する際の処理を記述します。php artisan migrate コマンドを実行すると、この up メソッドが呼び出されます。 (例:テーブルの作成、カラムの追加、インデックスの追加)
  • public function down(): void マイグレーションを「取り消し(ロールバック)」する際の処理を記述します。php artisan migrate:rollback コマンドを実行すると、この down メソッドが呼び出されます。 (例:テーブルの削除、カラムの削除、インデックスの削除)

down メソッドには、up で行った操作を元に戻す処理を必ず記述し、可逆的な(元に戻せる)状態を保つことが非常に重要です。

カラム追加の具体的な書き方

パターン2(既存テーブルの修正)で生成されたファイルの up / down メソッドに、具体的なカラム定義を追加してみましょう。

// ...
    public function up(): void
    {
        Schema::table('users', function (Blueprint $table) {
            // 'name' カラムの後に、'email' カラム(ユニーク制約付き)を追加
            $table->string('email')->unique()->after('name');
            // 'age' カラム(整数、NULL許容)を追加
            $table->integer('age')->nullable();
        });
    }

    public function down(): void
    {
        Schema::table('users', function (Blueprint $table) {
            // up() とは逆の順序で削除するのが安全
            $table->dropColumn('age');
            $table->dropColumn('email'); // dropColumn に配列 ['age', 'email'] を渡すことも可
        });
    }
// ...

よく使うカラム定義(スキーマビルダ)

Laravelのスキーマビルダ($table)では、様々なデータ型をメソッドで簡単に定義できます。

メソッド 説明 (SQLの型に近いもの)
$table->id(); BIGINT の自動増分(プライマリーキー)
$table->timestamps(); created_atupdated_at の2つの TIMESTAMP カラムを自動で追加
$table->string('name', 100); VARCHAR 型。第2引数で長さ(デフォルト255)を指定可能
$table->text('description'); TEXT 型。長い文字列用
$table->integer('price'); INTEGER 型(数値)
$table->boolean('is_active')->default(false); BOOLEAN 型(真偽値)。default() でデフォルト値を指定
$table->date('birth_date'); DATE 型(日付)
$table->dateTime('published_at'); DATETIME 型(日時)
$table->foreignId('user_id'); BIGINT 型(符号なし)。外部キー用のカラム
$table->enum('status', ['pending', 'completed']); ENUM 型(列挙型)

さらに、これらのメソッドに「メソッドチェーン」で制約を追加できます。

  • ->nullable(): NULL 値を許可します(デフォルトは NOT NULL)。
  • ->default(値): デフォルト値を設定します。
  • ->unique(): ユニーク(重複禁止)制約を追加します。
  • ->after('column'): 指定したカラムの「後」に配置します(MySQLのみ)。
  • ->comment('コメント'): カラムにコメントを追加します。

マイグレーション作成後の流れ

ファイルを作成し、up / down メソッドの記述が完了したら、いよいよデータベースに反映させます。

マイグレーションの実行

まだ実行されていない(database/migrations フォルダには存在するが、migrations テーブルに記録がない)マイグレーションを実行します。

php artisan migrate

このコマンドを実行すると、Laravelは up メソッドをタイムスタンプ順に実行し、データベースにテーブルやカラムが作成されます。

マイグレーションのロールバック(取り消し)

直近で実行したマイグレーションを取り消し、down メソッドを実行します。

php artisan migrate:rollback

特定のステップ数だけ戻したい場合は --step オプションを使います。

# 3回分のマイグレーションを取り消す
php artisan migrate:rollback --step=3

特定のマイグレーションファイルだけを再作成したい場合

開発中、特定のマイグレーションファイル(例: ..._add_email_to_users_table.php)だけを修正して、もう一度実行したい場合があります。

# 1. まず該当のマイグレーションをロールバックする
php artisan migrate:rollback --path=database/migrations/YYYY_MM_DD_HHMMSS_add_email_to_users_table.php

# 2. マイグレーションファイルの内容を修正する

# 3. 再度マイグレーションを実行する
php artisan migrate

Laravelのスキルを高める最適な方法

以上、Laravelのマイグレーションについて、サンプルコード付きで詳しく解説してきました。

なお、マイグレーションを含むLaravelの理解を深めるためには、プログラミングスクールの利用が最適です。

「趣味程度でLaravelを学んでいる」「すでに現役エンジニアとして働いている」という場合には不要ですが、これからエンジニアを目指すためにLaravelを学ぼうとしている方にとっては、プログラミングスクールに通う恩恵が非常に多いです。

  • 独学とは比較にならない高いスキルが身に付きやすい
  • いつでも現役エンジニア講師に質問できる
  • 自分と同じようにプログラミングを学ぶ仲間とのコミュニティに参加できる
  • エンジニア面接の肝となる「ポートフォリオ」の作成を支援してもらえる
  • 転職支援を行なっているスクールも多い

Laravelは、PHPとセットで学ぶことがほとんどですので、もしスクールの利用を検討する場合は、以下のようなPHPに強いプログラミングスクールをチェックしてみるとよいでしょう。