category

category

laravel

2025.8.9

2025.8.10

62

【Laravel】マイグレーションの基本的な手順(テーブル作成やカラムの追加・編集)

Laravelではテーブル作成やカラムの追加・編集をマイグレーションで行います

「データベースを直接操作できるから、マイグレーションを使わない」というのはNG。

他の作業者や別の環境の管理が難しくなるためで、100%世に出さないシステムでない限りマイグレーションで行うようにします。

ここではマイグレーションの基本を説明します。

マイグレーションの手順の流れ

手順は大きく4つです。

【手順1】マイグレーションファイルのひな型を作成

【手順2】作成したファイルを修正

【手順3】マイグレーションを実行(テーブル作成やカラムの追加・編集)

【手順4】実行したマイグレーションを取り消したい場合はロールバックを実行

では、手順ごとのやり方です。

【手順1】マイグレーションファイルの作成

ターミナル(コマンドプロンプト)を起動し、laravelプロジェクトがあるディレクトリにcdし、以下のコマンドを実行します。

artisanコマンド

php artisan make:migration ファイル名

artisanを実行すると、database/migrations/にファイルが作成されます

作成されたファイル

作成されたファイルを開きます。

①upメソッドと②downメソッドの2つのメソッドが作成されています↓

①②それぞれの役割は以下となります。

大事

①upメソッドmigrate実行時(手順3)で実行されるメソッド

②downメソッドmigrateのロールバック時(手順4)で実行されるメソッド

【手順2】作成したファイルの修正

①②に処理を追加していきます。

何をしたいか(テーブルを作成したいのか、カラムを追加・編集したいか等)で処理が違ってきます。

テーブル作成時

テーブルを作成したい場合の①②それぞれのサンプルコードです。

【①upメソッド】テーブル作成時

    public function up(): void
    {
        Schema::create('テーブル名', function (Blueprint $table) {
            $table->id();
            $table->longText('message');
            $table->tinyInteger('enable')->nullable();
            $table->timestamps();
        });
    }

●テーブルを作成する時はcreateメソッドを使用します(Schema::createの箇所)

●「$table->カラムの型(’カラムの名前’)」でカラムの数だけ定義していきます。

例えば、以下の場合

$table->longText('message');

longText型で名前が「message」のカラムが作成される。

※他にはinteger(整数)や、string(文字列)や、date(日付)などがあります。

●チェーンメソッドでカラムの制約等を記述できる。

例えば、「->nullable()」はnullを許可する、という意味。

※他にも「->index()」(インデックス=索引)等があります。

●$table->id()は主キーとなるオートインクリメントのカラムを作成してくれる。

●$table->timestamps()は、登録日(カラム名はcreated_at)と更新日(カラム名はupdated_at)が入る日付型のカラムを作成してくれる(この項目があると、レコードの新規登録や更新を行う度にlaravelが自動的に日時を入れてくれる)

【②downメソッド】テーブル作成時

    public function down(): void
    {
        Schema::dropIfExists('テーブル名');
    }

こちらは、①upメソッド(テーブル作成)を取り消す(ロールバック)処理になるのでdropIfExistsメソッド(テーブルがあれば削除)を記述する。

カラム追加時

カラムを追加したい場合の①②それぞれのサンプルコードです。

【①upメソッド】カラム追加時

    public function up(): void
    {
        Schema::table('テーブル名', function (Blueprint $table) {
            $table->timestamp('announce_date')->nullable()->after('enable');
        });
    }

●カラムを追加する時はtableメソッドを使用します(Schema::tableの箇所)

●「$table->カラムの型(’カラムの名前’)->after('このカラム名の後に追加')」で追加したいカラムの数だけ定義する(他に条件があればチェーンメソッドで繋ぐことも可)

例えば、以下の場合

$table->timestamp('announce_date')->nullable()->after('enable');

timestamp(日付)型で名前が「announce_date」で、nullを許し、「enable」というカラムの後に追加する、ということになる。

【②downメソッド】カラム追加時

    public function down(): void
    {
        Schema::table('テーブル名', function (Blueprint $table) {
            $table->dropColumn('announce_date');
        });
    }

こちらは、①upメソッド(カラム追加)を取り消す(ロールバック)処理になるのでdropColumnメソッド(カラムの削除)を記述する。

カラム修正時

カラムを修正したい場合の①②それぞれのサンプルコードです。

サンプルでは型を変更(date型に変更)します。

【①upメソッド】カラム修正時

    public function up(): void
    {
        Schema::table('messages', function (Blueprint $table) {
            $table->date('announce_date')->change();
        });
    }

●カラムを修正する時はtableメソッドを使用します(Schema::tableの箇所)

●「$table->カラムの型(’カラムの名前’)->change()」で変更したいカラムの数だけ定義する(他に条件があればチェーンメソッドで繋ぐことも可)

例えば、以下の場合

$table->date('announce_date')->change();

date(日付)型に変更しています。

この時注意しないといけないのは、他の条件も記述する必要があるということです。

例えば、元々null可のカラムだったとして上記を実行するとnull不可になってしまいます。

その場合は以下を記述するとnull可で型を変更できます。

$table->date('announce_date')->nullable()->change();

【②downメソッド】カラム修正時

    public function down(): void
    {
        Schema::table('messages', function (Blueprint $table) {
            $table->元の型('announce_date')->change();
        });
    }

こちらは、①upメソッド(カラム変更)を取り消す(ロールバック)処理なので元の型や条件を記述します。

【手順3】マイグレーションの実行マイグレーションの実行方法

ターミナル(コマンドプロンプト)で実行します。

「up」メソッドの実行

php artisan migrate

データベースが更新されていますので、データベースを確認します。

もし、意図したものではなかったら取り消しができます(そのための②downメソッドです)

【手順4】ロールバック

もし、意図したものではなかった等、取り消したい場合はターミナルから以下のコードを実行します。

「down」メソッドの実行

php artisan migrate:rollback

補足

無事データベースが更新され、新たに別のマイグレーションファイルを作成することになったとします。

「別のマイグレーションファイルを作成しターミナルから実行したら、以前に作成したマイグレーションファイルも実行されるんじゃないの?」と思うかもしれません。

実は、一度実行したマイグレーションファイルは「実行済」としてデータベースにその情報が保存されいるのです。

データベースを開くと「migrations」というテーブルがあるので、レコードを見てみます。

このように実行されたファイル名が「migration」というカラムに保存されています。

ここにあるものは「実行済み」として、ターミナルからmigrateコマンドを実行してももう実行されません

また、ロールバックで実行されるのは1つ前に実行したmigrateに対してです

※ファイル名を指定したロールバックもできます。

1093

コメント

コメントを残す

ニックネームは公開されます

CAPTCHA


閉じる