【Laravel】マイグレーション:既存テーブルにカラムを追加・変更・削除する

時計 2024.02.15 / 時計

【Laravel】マイグレーション:既存テーブルにカラムを追加・変更・削除する

記事ではLaravelにおける、マイグレーションを利用して既存テーブルにカラム追加変更・削除する方法について解説していきます。

Webアプリケーションの開発では機能の追加や仕様変更に伴い、データベースの構造の変更が必要になります。このような場面で活躍するのがLaravelのマイグレーション機能です。

本記事を通して、Laravelのマイグレーションを使用した既存テーブルにカラムを追加・変更・削除する方法について理解を深めてください。

ここではLaravel10を使用しています。

マイグレーションとは

マイグレーションとはデータベースのスキーマ(構造)を管理するための機能です。データベーススキーマをコードで表現し、それをデータベースに反映することができます。

わかりやすく言うと、マイグレーションはテーブル作成や定義変更(カラムの変更・追加・削除など)を管理する機能ということです。

またデータベーススキーマのバージョン管理が行え、データベースを過去どのように変更したか履歴を記録します。

Laravelのマイグレーションには次のような特徴があります。

マイグレーションの特徴
  • バージョン管理と履歴管理
  • すべてのデータベースシステムで利用可能
  • ロールバックが簡単
  • データベーススキーマの可読性が高い
  • ファイルの共有によりチーム全員が同一テーブルを作成できる
  • 学習コストが若干高い

マイグレーションについて詳しく知りたい方は以下記事をご参照ください。

既存テーブルにカラムを追加・削除・変更する方法

Webアプリケーションでは本番稼働後に新しい機能を追加するにあたって、テーブルの構造を変更することがよくあります。このような場面で便利な機能がマイグレーションです。

Laravelのマイグレーション機能を利用することで稼働中のWebアプリケーションのデータベーステーブルに新しいカラムを追加・削除・編集が簡単に行えます。

データベース用語の確認

カラムとはテーブルの項目にあたる列の部分です。テーブルにはカラム(列またはフィールドとも呼ばれる)とロウ(行またはレコード)からなるExcelのような二次元表です。

POINT

PHPMyAdminなどを利用して直接テーブルにカラムを追加・変更・削除することができます。しかしこれでは変更の履歴が残らないため、マイグレーション機能を利用してカラム操作を行うことをお勧めします

次項よりLaravelのマイグレーションを使ったカラムの追加・削除・編集方法について解説します。

既存デーブルにカラムを追加する方法

既存テーブルにカラムを追加する場合は以下の流れで操作を行います。

  1. カラム追加用のマイグレーションファイルの作成
  2. マイグレーションファイルの編集
  3. マイグレーションファイルの実行

カラム追加用のマイグレーションファイルの作成

artisanコマンドを使ってカラム追加用のマイグレーションファイルを作成します。以下構文に沿ってコマンドを実行しましょう。

構文

php artisan make:migration add_カラム名_to_テーブル名_table –table=テーブル名

ファイル名にあたる「add_カラム名_to_テーブル名_table」はどのような名前でも大丈夫です。ただわかりやすいように、なんのフィールドをどこのテーブルに追加するのかがわかる名前にしましょう。

--tableオプションではどのテーブルに対するマイグレーションファイルなのかを指定しています。

POINT

変更用のマイグレーションファイルでは--tableオプションを指定する

例えばusersテーブルにdepartmentカラムを追加する場合は次のようなコマンドになります。

> php artisan make:migration add_department_to_users_table –table=users
…
created successfully.

上記コマンドを実行することで「database/migrations」フォルダにマイグレーションファイルが作成されます。生成されたマイグレーションファイルの中身は次の通りです。

<?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::table('users', function (Blueprint $table) {
            //
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('users', function (Blueprint $table) {
            //
        });
    }
};

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

次に生成されたマイグレーションファイルにカラムを追加するコードを記述していきます。以下のようにupメソッドにカラムを追加するコード、downメソッドにカラムを削除するコードをそれぞれ記述します。

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

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

マイグレーションファイルの実行

最後にマイグレーションを実行してテーブルにカラムを追加します。

php artisan migrate

上記のコマンドを実行することでマイグレーションが実行され、カラムがテーブルに追加されます。

POINT

テスト環境でマイグレーションを実行して問題なく動作することを確認してから本番環境に適用するようにしましょう

既存テーブルからカラムを削除する方法

既存テーブルからカラムを削除する場合は以下の流れで操作を行います。

  1. カラム削除用のマイグレーションファイルの作成
  2. マイグレーションファイルの編集
  3. マイグレーションファイルの実行

カラム削除用のマイグレーションファイルの作成

artisanコマンドを使ってカラム削除用のマイグレーションファイルを作成します。以下構文に沿ってコマンドを実行しましょう。

構文

php artisan make:migration delete_カラム名_from_テーブル名_table –table=テーブル名

ファイル名にあたる「delete_カラム名_from_テーブル名_table」はどのような名前でも大丈夫です。ただわかりやすいように、なんのフィールドをどこのテーブルから削除するのかがわかる名前にしましょう。

例えばusersテーブルからdepartmentカラムを削除する場合は次のようなコマンドになります。

> php artisan make:migration delete_department_from_users_table –table=users
…
created successfully.

上記のコマンドでカラム削除用のマイグレーションファイルが生成されます。

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

次に生成されたマイグレーションファイルにカラムを削除するコードを記述していきます。以下のようにupメソッドにカラムを削除するコード、downメソッドにカラムを再生成するコードをそれぞれ記述します。

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

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

マイグレーションファイルの実行

最後に以下のコマンドを実行してカラムの削除をテーブルに適用します。

php artisan migrate

既存テーブルのカラム(データ型や長さ)を変更する方法

既存テーブルのカラムを編集する場合でもマイグレーションを利用します。例えばカラムのデータ型を変更する、長さを変更する、デフォルト値を設定するといった場合です。

既存テーブルのカラムを編集する流れは以下の通りです。

  1. doctrine/dbalパッケージをプロジェクトにインストール
  2. カラム編集用のマイグレーションファイルを作成
  3. マイグレーションファイルを編集
  4. マイグレーションファイルの実行

doctrine/dbalパッケージをプロジェクトにインストール

Laravelで既存テーブルのカラムを編集する場合は「doctrine/dbal」パッケージをLaravelプロジェクトにインストールする必要があります。

doctrine/dbalパッケージとは

doctrine/dbalパッケージとはPHPで利用されるデータベース抽象化のライブラリです。MySQLやSQLiteなど様々なデータベースに対応しています。

Laravelでは既存のカラムを変更する場合にはdoctrine/dbalをインストールします。これにより生のSQLを書くことなく、クエリビルダを使ってカルムの編集が可能になります

doctrine/dbalパッケージのインストールにはプロジェクトで以下コマンドを実行します。

composer require doctrine/dbal

カラム変更用のマイグレーションファイルを作成

artisanコマンドを使ってカラム変更用のマイグレーションファイルを作成します。以下構文に沿ってコマンドを実行しましょう。

構文

php artisan make:migration change_カラム名_変更の種類_in_テーブル名_table –table=テーブル名

ファイル名にあたる「change_カラム名_in_テーブル名_table」はどのような名前でも大丈夫です。ただわかりやすいように、なんのフィールドをどこのテーブルから変更するのかがわかる名前にしましょう。

例えばusersテーブルからdepartmentカラムの長さを変更する場合は次のようなコマンドになります。

> php artisan make:migration change_department_length_in_users_table –table=users
…
created successfully.

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

次に生成されたマイグレーションファイルにカラムを変更するコードを記述していきます。以下のようにupメソッドにカラムを変更するコード、downメソッドにカラムを変更前に戻すコードをそれぞれ記述します。

以下ではusersテーブルのdepartmentカラムの長さを10から20に変更しています。

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('department', 20)->change();
    });
}

public function down()
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('department', 10)->change();
    });
}

カラムのデータ型を変更する場合は次のように記述します。

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->text('department')->change();
    });
}

public function down()
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('department')->change();
    });
}
POINT

カラムの変更なのでchangeメソッドを使用しています

マイグレーションファイルの実行

最後に以下のコマンドを実行してカラムの変更をテーブルに適用します。

php artisan migrate

まとめ

本記事「【Laravel】マイグレーション:既存テーブルにカラムを追加・変更・削除する」はいかがでしたか。

ぜひデータベースのカラム変更はマイグレーション機能を利用して、データベースの変更の記録が残るようにしておきましょう。