Laravelマイグレーション入門!DBを簡単に管理する方法

Laravel

こんにちは!

今回はLaravelのマイグレーションをご紹介していきます。

読者
読者

「マイグレーションってそもそも何?」

「マイグレーションってどうやって使っていくの?」

このような疑問を持つ方に向けて、Laravelのマイグレーションを使ったDBの管理方法を詳しく解説していきます。

本記事を読めば、以下のようなことがわかります。

  • マイグレーションとは何か
  • マイグレーションの作成手順
  • テーブルの作成・編集・削除方法

具体的にどのようにマイグレーションファイルを作成するのかなどは、サンプルコードを交えて解説していきます。

✔︎ 筆者の経験
・現役のWeb開発者
・Laravel歴3年
・複数の開発プロジェクトを経験

マイグレーションとは

そもそもマイグレーションとは、DBのテーブルを管理するためのLaravelに備わっている機能のことです。
マイグレーションを使うことで、Laravelからテーブルを作成したり、テーブルにカラムを追加したりなどを行うことができます。
マイグレーションの実行履歴はDBによって管理され、ファイル名にもいつマイグレーションファイルが作成されたのかなどが書かれているため、DBの変更履歴を追うことができるようになっています。
そのため、Laravelを使う場合は、基本的にDBはマイグレーションファイルで管理するのが一般的となっています。

以下は公式サイトになります。
https://readouble.com/laravel/10.x/ja/migrations.html

マイグレーションの流れ

以下のような流れでDBに反映します。

  1. マイグレーションファイルを作成
  2. マイグレーションファイルを編集
  3. マイグレーションを実行し、DBに反映

テーブル作成

このセクションでは、マイグレーションファイルからテーブル作成を行う方法を解説します。

マイレグレーションの生成

まずは、マイグレーションファイルの作成する必要があります。
make:migration コマンドにより、データベースマイグレーションを作成できます。テーブルを作成する場合は以下のようになります。

$ php artisan make:migration create_flights_table

上記サンプルコードは、flightsテーブルを作成する場合のコードです。
作成したいテーブル名に合わせて、コマンドを叩いてください。

作成したマイグレーションファイルは、「database/migrations/xxxx_xx_xx_xxxxxx_create_flights_table.php」のようなファイル名で作成されます。「xxxx_xx_xx_xxxxxx」となっているところは、作成した日時になっているはずです。

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

マイグレーションファイル内にはupメソッドとdownメソッドがあります
それぞれ、以下のような違いがあります。

upメソッド・・・テーブル、カラム、インデックスを追加するために使用される。
downメソッド・・・ロールバックを実行した時に使用される。以前の状態に戻す。

以下、サンプルコードです。

<?php

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

return new class extends Migration
{
    /**
     * マイグレーションの実行
     *
     * @return void
     */
    public function up()
    {
        Schema::create('flights', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * マイグレーションを戻す
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('flights');
    }
};

マイグレーションファイルが実行されたときに行いたい処理をupメソッドに書きます。

戻したい場合は、ロールバックという操作を行うことでDBに反映した変更を戻すことができます。その際、実行されるのはdownメソッドに書いた処理になります。ロールバックの実行方法は後ほど解説します。

マイグレーションファイルの編集

upメソッドの詳細を見てみましょう。

public function up()
{
    Schema::create('flights', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('airline');
        $table->timestamps();
    });
}

以下の2行はデフォルトで作成されているはずです。

$table->id();
$table->timestamps();

これらはそれぞれ、レコードIDとレコード作成日時・更新日時です。timestamps()の1行で作成日時カラムと更新日時カラムの2つを生成します。

以下の2行はそれぞれ、飛行機の機体名と航空会社名のカラムです。

$table->string('name');
$table->string('airline');

マイグレーションファイルの書き方としては、サンプルコードのようにデータ型とカラム名を記述します。

また、オプションとして以下のようにカラムにコメントをつけたり、NULL許可を行ったりすることもできます。

$table->string('name')->comment('機体名')->nullable();
$table->string('airline')->comment('航空会社名')->nullable();

他にもさまざまなオプションがあるので、気になる方は公式サイトを読んでおくと良いと思います。

downメソッドの方は特に編集する必要はありませんが、以下のようにdropメソッドを使うことでロールバック時にテーブルを削除することができます。

public function down()
{
    Schema::drop('flights');
}

マイグレーションの実行

さあ、マイグレーションファイルが作成できたら、実際にマイグレーションファイルのスクリプトを実行してみましょう!
マイグレーションを実行するには、migrate コマンドを叩きます。

$ php artisan migrate

データベースを確認してみてください。
テーブルが作成されていることが確認できるかと思います。

カラム追加

流れやマイグレーションファイルの編集方法などはテーブル作成時と同じですが、使用するコマンドが若干違います。

$ php artisan make:migration add_pilot_to_flights

実行すると、以下のようにマイグレーションファイルを編集します。

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

class AddPilotToTableName extends Migration
{
    public function up()
    {
        Schema::table('flights', function (Blueprint $table) {
            $table->string('pilot')->comment('機長名')->nullable();
        });
    }

    public function down()
    {
        Schema::table('flights', function (Blueprint $table) {
            $table->dropColumn('pilot');
        });
    }
}

あとは、テーブル作成時と同じようにマイグレーションを実行すれば、DBに反映されます。

$ php artisan migrate

マイグレーションの状態確認

どのマイグレーションが実行されているか確認したい場合は、migrate:status コマンドを叩きます。

php artisan migrate:status

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

最新のマイグレーションをロールバックする(戻す)場合は、rollback コマンドを叩きます。

$ php artisan migrate:rollback

これは、最新のマイグレーションのみロールバックすることに注意しましょう。

どれだけ戻すか指定してロールバックを行う場合は、—stepオプションで指定します。

$ php artisan migrate:rollback --step=5

上記コマンドの場合、最新5回分のマイグレーションをロールバックします。

全て戻したい場合はmigration:resetコマンドを叩きます。

$ php artisan migrate:reset

ロールバックとマイグレーションを同時に行う

migrate:refresh コマンドは、全てのマイグレーションをロールバックしてから、migrateコマンドを再度実行します。

$ php artisan migrate:refresh

# データベースを真新しくし、データベースのシーダーを実行する
$ php artisan migrate:refresh --seed

ロールバックと同じく、特定の数を指定することが可能です。

$ php artisan migrate:refresh --step=5

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

$ php artisan migrate:fresh

$ php artisan migrate:fresh --seed

マイグレーション状態の管理

マイグレーションがどこまで進んでいるのか等はphp artisan migrate:statusで確認することができますが、そもそもなぜこのコマンドを実行すると、状態確認ができるのでしょうか?状態に関するデータは一体どこに持っているのでしょうか?

この答えは、実はDBにあります。

Laravelはデフォルトでmigrationsテーブルを持っており、ここにマイグレーションに関する状態のデータを保持しています。

Screenshot

この知識は必須ではありませんが、このような仕組みで管理しているということは頭の片隅に置いておいた方が良いと思います。

まとめ

いかがでしたでしょうか?

Laravelはマイグレーションファイルを使うことで、データベースのカラムやテーブルなどを簡単に操作することができます。また、DBへの変更をコードで管理することができ、実行履歴なども残すことできます。

マイグレーションは非常に便利な機能なので、ぜひ使いこなしていってほしいと思います。

忘れてしまったら、再度この記事を確認してみてください。

以上です。それでは、ご清聴ありがとうございました!!

参考

参考リンク

【Laravel】マイグレーションの基本 - Qiita
Laravelのマイグレーションとはデータベースの作成や編集、削除などを管理する方法として、PHPフレームワークのLaravelには「マイグレーション」というものが備わっています。正しくコードを…

参考書籍


PHPフレームワークLaravel入門第2版 [ 掌田津耶乃 ]

コメント

タイトルとURLをコピーしました