【Laravel】マイグレーションとは?作成と実行、ロールバックから基本的なコマンドまで解説

Laravel PHP

【Laravel】マイグレーションとは?作成と実行、ロールバックから基本的なコマンドまで解説

なやむくん
Laravelのマイグレーションとは何でしょうか…。
なやむさん
マイグレーションファイルの使い方について知りたい。

などの疑問や悩みを解決してまいります。

マイグレーションは、データベースを操作する上でとても重要な機能です。

Laravelでデータベースを扱う場合マイグレーションは必ず使用するので、この記事でマイグレーションとは何たるか、また作成から実行、その他コマンドの使い方をしっかり理解していただけたらと思います。

マイグレーションとは

Laravelのマイグレーションは、データベースの構造(テーブルやカラムなど)を管理し、変更するための仕組みです。

この機能を使うことで、データベースのスキーマ(設計図)をコードとして記録し、変更を簡単に追跡したり、チームで共有したりすることができます。

なやむくん
うーん、いまいち理解ができていないです。
みつた
実際に操作してみると分かりやすいと思います!

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

マイグレーションファイルとは、データベースの構造(スキーマ)を管理するためのコードファイルで、テーブルの作成やカラムの追加・変更・削除など、データベースに対する操作を定義するものです。

マイグレーションファイルを作成するには以下のコマンドを実行します。

php artisan make:migration create_{テーブル名}_table

例えば以下のコマンドを実行します。

php artisan make:migration create_tests_table

成功すると以下のメッセージが表示され、database/migrations配下にマイグレーションファイルが作成されます。

INFO Migration [database/migrations/2024_09_18_083620_create_tests_table.php] created successfully.

マイグレーションファイル名

マイグレーションファイル名は、作成年_作成月_作成日_作成時間_create_テーブル名_table.phpとなります。

つまり今回の例では、2024_09_18_083620_create_tests_table.phpとなります。

マイグレーションファイルの中身

それではマイグレーションファイルの中身を見ていきましょう。

<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('tests', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

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

up() メソッド

マイグレーションが実行時up()メソッドが実行されます。

デフォルトの処理内容には、Schema::createメソッドがあります。

create()メソッド

第一引数作成するテーブル名を指定します。今回はtestsテーブルを作成するので'tests'と記述します。

第二引数テーブルカラムの設定する関数の処理内容を記述します。デフォルトではidtimestampcreated_atupdated_at)が設定されています。

今回はnameというカラムも追加しようと思いますので、コードに以下のように追記してください。

    public function up(): void
    {
        Schema::create('tests', function (Blueprint $table) {
            $table->id();
            $table->string('name', 20); // 追加カラム
            $table->timestamps();
        });
    }

このマイグレーションファイルを実行するとidcreated_atupdated_at、そして追加したnameのカラムを持つtestsテーブルがデータベースに作成されます。

down() メソッド

マイグレーションのロールバック実行時down()メソッドが実行されます。

down() メソッド(ロールバック)は、up() メソッドで行った変更を元に戻すことができます。

みつた
ロールバックの使い方については後ほど解説します。

マイグレーションの実行

マイグレーションファイルの準備が出来ましたら、マイグレーションを以下コマンドで実行します。

php artisan migrate

このコマンドを実行することで、未実行のマイグレーションファイルを上から順に実行していきます。

実行して以下のメッセージが表示されればOKです。

INFO Running migrations.

またマイグレーションファイルを個別に実行していきたい場合は以下のコマンドで実行するファイル名を指定します。

php artisan migrate --path=/database/migrations/{マイグレーションファイル名}.php

これでデータベースを確認してみると、testsテーブルが作成されているはずです。

マイグレーションのロールバック

down() メソッドの紹介でも少し説明しましたが、ロールバックはup() メソッドで行った変更を元に戻すことができます。

例えば先程作成したtestsテーブルを、作成する前に戻すことができるということです。

以下のコマンドを実行することでマイグレーションを1つ前の状態に戻すことができます。

php artisan migrate:rollback

こちらもマイグレーション実行時と同様に個別のファイルをロールバック実行したい場合は、ファイル名を指定します。

php artisan migrate:rollback --path=/database/migrations/{マイグレーションファイル名}.php

これでtestsテーブルがデータベースからなくなっているはずです。

また特定のマイグレーションまで戻したい場合は、--stepオプションで指定した数だけマイグレーションを戻すことが可能です。

php artisan migrate:rollback --step=2

マイグレーションの主なコマンド

次にマイグレーションに関する基本的なコマンドをいくつか紹介します。

migrate:status

以下のコマンドで、マイグレーションファイルの状態を確認することができます。

php artisan migrate:status

するとすべてのマイグレーションファイルの状態確認ができます。

Ranとなっていれば実行済みのファイルで、Pendingとなっていれば未実行のファイルであることが分かります。

みつた
以下はコマンド実行時の例です。
migrate:statusの実行結果

migrate:freshとmigrate:refresh

どちらともデータベースの状態をリセットし、最新のマイグレーションを適用するために使われますが、それぞれの動作に違いがあります。

migrate:freshは、データベースの全テーブルを削除してから、すべてのマイグレーションを最初から再実行します。

php artisan migrate:fresh

そのため、データベースをリセットして最新な状態からスタートさせることができますが、マイグレーションの管理外のテーブルも削除することになるのでコマンドの実行には注意が必要です。

みつた
プロジェクトのデータベース構造を大幅に変える場合、データをすべて消してクリーンな状態で再構築する場合などの用途で使用されます。

一方のmigrate:refreshは、既に実行されているマイグレーションを全てロールバックし、その後再度すべてのマイグレーションを実行します。

php artisan migrate:refresh

migrate:freshと違い、すべてのテーブルが削除されるのではなく、既存のデータベース構造を変更することなく更新することができます。

みつた
migrate:refreshでは、マイグレーションの履歴は削除されないので覚えておいてください!
機能migrate:freshmigrate:refresh
動作内容全テーブルを削除してから再マイグレートマイグレーションをロールバックして再実行
データの消失全テーブルのデータが削除ロールバックによりデータが失われることがある
使用目的クリーンな状態でデータベースを再構築したい時マイグレーションをロールバックして再実行
リセット方法テーブルを一から削除して再作成マイグレーションを適用して戻す
データ履歴削除保持

migrate:reset

migrate:resetは、すべてのマイグレーションをロールバックするコマンドです。

migrate:reset

すべてのマイグレーションがロールバックされるため、マイグレーションが実行される前、つまり初期状態に戻ります。

みつた
migrate:refreshのマイグレーションが実行されない版ですかね。

まとめ

Laravelのマイグレーションは、データベースの変更や管理を効率的に行うための便利な機能です。

基本的なコマンドを使いこなすことで、テーブルの作成や修正、ロールバックが簡単に実行することができますので、この記事でマイグレーションを理解し、今後のアプリ開発において参考にしていただけると幸いです。

  • この記事を書いた人
  • 最新記事

みつた

完全未経験&異業種から30歳の年でIT企業に転職。

Web系開発言語が好き。
どちらかというとバックエンドよりもフロントエンドが好き(現時点では…)

最近はサウナと観葉植物にハマっている。
野球が好きで一応投手。

-Laravel, PHP