Laravel Migration 作成の基本と実践

はじめに

皆さんはアプリケーションを開発するとき、データベースのテーブル設計や変更をどのように管理しているでしょうか。 手作業でテーブルを作成したり変更したりすると、記録を残すのが大変になることが多いですね。

Laravelには、Migration という仕組みが用意されています。 これを活用すれば、データベースの構造をバージョン管理し、チーム全員で共有・適用を行いやすくなります。

この記事では、LaravelでMigrationを作成する方法について、初心者の方にも理解しやすいように整理してみます。 実際に使われる場面や、どのようにコマンドを実行すれば良いのかを具体例とともに確認してみましょう。

この記事を読むとわかること

Migrationとは何か

データベースの管理をコードで行うメリットや実務での使い道を把握できます。

Migrationの作成手順

新規テーブル作成と既存テーブルの変更、それぞれの方法を学べます。

よく使われるコマンド

Migrationの適用や取り消しのコマンドを理解できるようになります。

注意点と命名のポイント

実務で気を付けたい点や、わかりやすいファイル名の付け方などをつかめます。

Migrationとは何か

Migrationは、テーブルの作成や変更といったデータベース構造の更新手順をPHPのコードとして定義する仕組みです。 通常は手動でALTER文やCREATE文を書いてテーブルを操作することが多いですが、Migrationを使うと、Laravelが提供する豊富なメソッドを通して安全に変更を加えやすくなります。

データベース管理とMigrationの関係

データベース構造の管理は、アプリケーション開発の要といえるでしょう。 仮に複数人で開発を行う場合、誰がいつどんなテーブルを変更したのかを正確に共有するのは難しいですよね。

Migrationを導入すると、テーブルの変更履歴をきちんとソースコードの形で残せます。 つまり、Gitなどのバージョン管理システムでコードを共有するだけで、チームメンバーと同じデータベース構造を瞬時に再現できます。

また、一度変更を適用した後でも、Rollback(取り消し)を簡単に行える点が大きなメリットです。 手動でのミスを減らし、開発現場で起こりがちな「どのカラムをいつ追加したんだっけ?」という混乱を防ぎやすくなります。

実務での利用シーン

例えば、ユーザー管理システムを作るケースを考えてみましょう。 最初はユーザー名とパスワードのような単純なテーブル構造だけでスタートしたのに、途中からメールアドレスや電話番号のカラムが必要になることはありませんか。

このような変更が発生したときに、Migrationを1つ追加するだけで、テーブル定義をスムーズに更新できます。 Rollback機能を使えば、不都合が生じたときにもすぐに元の状態に戻せるので安心です。

開発後期のリリース時に、ステージングや本番環境へデータベース構造を反映するときにも役立ちます。 手動でSQL文を実行するよりミスが起きにくく、一貫した手順で作業ができるでしょう。

Migration作成手順

Migrationを使う際には、php artisan make:migration コマンドを中心に活用します。 Laravelプロジェクトのルートディレクトリ(artisanコマンドがある場所)で実行することで、新しいMigrationファイルが生成されます。

新規テーブルを作成するケース

新しいテーブルを作る場合は、--create オプションを付与すると便利です。 たとえば「users」という名前のテーブルを新規に作成したいなら、以下のように入力します。

コマンド例

php artisan make:migration create_users_table --create=users

上記コマンドを実行すると、database/migrations ディレクトリの中にファイルが生成されます。 ファイル名には実行時刻のタイムスタンプが付与されるので、テーブル作成の順番がわかりやすいですね。

生成されたMigrationファイルの中には、up メソッドと down メソッドが定義されます。 up ではテーブルのカラムを作成し、down ではそれらを削除するコードを書くのが一般的です。

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

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
}

上のコード例では、id() メソッドで自動増分の主キーを作成し、timestamps() メソッドで作成日時・更新日時を管理するカラムが追加されています。 好きなカラムを追加する場合は $table->string('カラム名') のように書けばOKです。

既存テーブルを変更するケース

既存のテーブルに新しくカラムを追加したいときは、--table オプションを使います。 たとえば「users」テーブルに「phone_number」というカラムを追加する場合は、次のようにコマンドを実行します。

php artisan make:migration add_phone_to_users_table --table=users

このように、Migrationファイル名は自由に決められますが、何のテーブルをどう変更するのかを明示するとわかりやすいでしょう。 生成されたファイルの up メソッドには以下のように追記できます。

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('phone_number')->nullable();
    });
}

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

このコードを適用(migrate)すると、usersテーブルにphone_numberカラムが追加されます。 もし不要になった場合は、downメソッドで定義したカラム削除の処理を行うことで元に戻せます。

変更内容を反映する方法

Migrationファイルを作成した後は、以下のコマンドでデータベースに反映できます。

php artisan migrate

これを実行すると、新規に作成されたMigrationファイルの内容が順番に適用されます。 特に新規テーブル作成やカラム追加に失敗がない場合は「Migration table created successfully」のようなメッセージが表示されるでしょう。

一方で、既に反映したMigrationを取り消したいときには、次のコマンドを使います。

php artisan migrate:rollback

複数回前に戻りたい場合は、--step オプションを指定します。 手戻りを検証する場面などでは便利です。

Migration作成時の注意点

Migrationは開発プロセスの中核になるため、細かいところまで気を配ると良いでしょう。

命名規則のポイント

Migrationファイル名は、どんな変更を行うのかを簡潔に示すことが大切です。 例えば「create_users_table」や「add_phone_to_users_table」のように、目的がわかる名前にするのがおすすめです。

同時に、チーム開発の場合は「add_xxx_column_to_yyy_table」などの形式で一定のルールを共有すると混乱が少なくなります。 実行時刻のタイムスタンプはLaravelが自動的に付与してくれるため、複数のMigrationが重なっても衝突しにくい仕組みになっています。

トランザクションとの組み合わせ

Migrationにおいて、複雑なテーブルの変更を行う場合は、トランザクションが有効に活用されることがあります。 例えば複数のテーブルを同時に更新するケースでは、もし途中でエラーが発生しても、一部の操作だけが反映されてしまうのを防ぎたいですよね。

LaravelのMigrationでは、対応しているデータベースであればトランザクションを使った変更が可能です。 ただし、テーブルエンジンによってはトランザクションが効かない場合もあるため、利用するDBに合わせて調整してください。

本番環境でのMigration適用は、事前にバックアップを取るなど十分な注意を払うと安全です。

よく使われるコマンド一覧

Migrationにはさまざまなコマンドがありますが、特に使われる頻度が高いものをまとめてみます。 皆さんが開発を進める中で、状況に応じて使い分けてみてください。

コマンド主な用途
php artisan migrate未実行のMigrationを一括で適用
php artisan migrate:rollback直近のMigrationを取り消す
php artisan migrate:refresh全Migrationを取り消し、再度すべてを適用する
php artisan migrate:freshテーブルをすべて削除してからMigrationを実行
php artisan migrate:statusMigrationが適用済みかどうかを一覧で確認できる

これらを使い分けることで、複数の変更を安全に試したり、テスト用の環境をまっさらな状態に戻しやすくなります。

Migrationを習得すると、複雑なDB変更にも一貫した手順で対応できるため、開発効率が高まりやすいです。

まとめ

LaravelのMigrationは、データベースの構造管理を効率化する便利な仕組みです。 コードベースで変更を管理するので、テーブル定義を後から確認するのも楽になります。

まずはコマンドの使い方やファイルの命名規則など、基本的な操作を身につけるとスムーズでしょう。 また、実務ではRollbackやRefreshなどのコマンドを活用しながら、テーブルの変更履歴をきちんと管理してみてください。

Migrationを使いこなせると、アプリケーションの成長に合わせてデータベースを柔軟に進化させることができます。 ぜひプロジェクトでも活用してみてはいかがでしょうか。

Laravelをマスターしよう

この記事で学んだLaravelの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。