CLOSE
MENU
Laravel 基礎学習/Migraton の仕組みと書き方

Laravel 基礎学習/Migraton の仕組みと書き方

Laravel の Migration は、データベースのテーブル構造を管理する重要な仕組み。
本記事では、Migration の役割や作成方法、テーブル定義の基本、よく使うコマンドについて解説する。

Migration とは

Laravel の Migration は、
データベースのテーブル構造を管理する仕組み。

通常、
MySQL でテーブルを作成する場合は、
SQL を直接実行する。

Laravel では、
SQL を直接実行する代わりに、
Migration を使用してテーブル構造を定義する。

Migration を使用することで、

などをコードで管理できる。

Migration の作成からテーブル作成までの流れは以下の通り。

Migration ファイル作成

テーブル定義
カラム構造を記述

php artisan migrate
Migration を実行

DB
テーブルが作成される

Migration は、
現在のテーブル構造を管理する仕組みではなく、
DB構造の変更履歴を管理する仕組みと考えると分かりやすい。

本記事では、
MySQL を使用する前提で説明する。

マイグレーション実行前の準備

Migration を実行するには、
Laravel からデータベースへ接続できる状態になっている必要がある。

接続設定は、
Laravel プロジェクトフォルダの直下にある .env ファイルで行う。

project-name/.env

project-name は、
自分で作成した Laravel プロジェクトのフォルダ名を表す。

.env ファイルは、
Laravel の環境設定ファイル。

データベース接続情報など、
アプリごとの設定を管理する。

Migration を実行する前に、
以下の準備が完了していることを確認する。

.env の設定例

例えば MySQL を使用する場合は、
以下のように設定する。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=project-name
DB_USERNAME=root
DB_PASSWORD=

Laravel は、
この設定を使用してデータベースへ接続する。

使用するデータベースによって、
DB_CONNECTION や DB_PORT などの設定値は異なる。

Migration ファイルを作成する

Laravel では、
Migration ファイルを作成してから、
テーブル構造を定義する。

Migration ファイルは、
Artisan コマンドを使用して作成することが多い。

Artisan を使用すると、
Laravel が Migration 用の基本コードやファイル名を自動生成してくれるため、
手動で作成するよりもミスを防ぎやすい。

実行場所

ターミナルで Laravel プロジェクトフォルダへ移動してから実行する。

cd ~/Herd/project-name

project-name の部分は、
自分で作成した Laravel プロジェクトのフォルダ名に読み替える。

実行コマンド

users テーブルを作成する Migration ファイルを作成する場合は、
以下のコマンドを実行する。

php artisan make:migration create_users_table

Migration ファイル名には、

create_テーブル名_table

の形式を使用することが多い。

create_users_table
create_posts_table
create_comments_table

作成されたファイルを確認する

正常に実行されると、

database/migrations

フォルダ内に Migration ファイルが作成される。

database/migrations/2026_01_01_000000_create_users_table.php

ファイル名の先頭には日時が付与される。

ただし、
この時点ではまだデータベースにテーブルは作成されていない。

作成された Migration ファイルへ、
テーブル定義を記述し、

php artisan migrate

を実行して初めて、
データベースへテーブルが作成される。

make:migration は Migration ファイルの作成、
migrate は Migration の実行を行うコマンド。

テーブルごとに Migration ファイルを作成する

Laravel では、
テーブルごとに Migration ファイルを作成することが多い。

テーブルごとに分けることで、
テーブル構造や変更履歴を管理しやすくなる。

例えば、
users テーブル、
posts テーブル、
comments テーブルを作成する場合は、
それぞれ別の Migration ファイルを作成する。

Migration の基本形

Migration ファイルを作成すると、
Laravel が以下のような基本コードを自動生成する。

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        //
    }

    public function down(): void
    {
        //
    }
};

Migration ファイルでは、
主に以下の 2 つのメソッドを使用する。

down() が必要なのは、
Laravel の Migration が単なるテーブル作成用ファイルではなく、
DB 構造の変更履歴を管理する仕組みになっているため。

Migration でテーブルのカラムを定義する

今回は、
会員登録機能で使用する users テーブルを例に説明する。

カラム名 データ型 長さ 用途
id bigint ユーザーID(主キー)
name varchar 100 ユーザー名
email varchar 255 メールアドレス
password varchar 255 ログインパスワード
created_at timestamp 登録日時
updated_at timestamp 更新日時

このテーブル構造を、
Migration ファイルで定義していく。

Migration ファイル

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {

            // ユーザーID(主キー)
            $table->id();

            // ユーザー名
            // 最大100文字
            $table->string('name', 100);

            // メールアドレス
            // 重複不可
            $table->string('email')->unique();

            // パスワード
            $table->string('password');

            // 作成日時・更新日時
            $table->timestamps();
        });
    }

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

Migration 実行に必要なファイルを読み込む

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

Migration で使用する Laravel の機能を読み込んでいる。

Migration ファイル作成時に Laravel が自動で生成するため、
初心者のうちは「Migration に必要な機能を読み込んでいる」と理解すれば十分。

Migration クラスを定義する

return new class extends Migration
{
    public function up(): void
    {
    }

    public function down(): void
    {
    }
};

Migration の処理を記述するためのクラスを定義している。

Laravel は、
このクラス内の up() と down() を実行して、
テーブル作成や変更処理を行う。

このコードは Laravel が自動生成するため、
初心者のうちは Migration の処理を書くための入れ物と理解すれば十分。

テーブルを作成する

Schema::create('users', function (Blueprint $table) {

});

users テーブルを作成する処理。

第1引数にはテーブル名を指定する。

この例では、
users という名前のテーブルを作成している。

function (Blueprint $table) の中へ、
作成するカラムを定義していく。

主キーを作成する

$table->id();

id カラムを作成する。

Laravel では、
主キーとして使用することを想定した bigint 型の AUTO_INCREMENT カラムが作成される。

多くのテーブルで使用されるため、
主キー専用のメソッドとして用意されている。

各カラムの定義は、
基本的に以下の形式で記述する。

$table->型('カラム名')->オプション

$table->string('name');
$table->string('email')->unique();
$table->integer('age');
記述 意味
$table 現在定義中のテーブル
string() 文字列型のカラムを作成
‘name’ カラム名
unique() 重複を禁止するオプション

name カラムを作成

$table->string('name', 100);

string() は文字列型(VARCHAR)のカラムを作成するメソッド。

第2引数には最大文字数を指定できる。

この例では、
最大100文字の name カラムを作成している。

email カラムを作成

$table->string('email')->unique();

email カラムは重複を許可しないカラムとする。

unique() を付けることで、
同じ値を登録できなくなる。

メールアドレスやログインIDなど、
重複を防ぎたい場合によく使用する。

password カラムを作成

$table->string('password');

パスワードは通常、
ハッシュ化した値を保存する。

そのため、
一般的には string() を使用する。

created_at と updated_at を作成

$table->timestamps();

Laravel では頻繁に使用するため、
timestamps() という専用メソッドが用意されている。

down() の記述

Schema::dropIfExists('users');

これは、up() で作成した users テーブルを削除する処理。

この処理は down() の中で使用する。

down() は、
up() の処理に問題があった場合などに、
変更内容を取り消すために使用する。

よく使うカラム型

Migration では、
メソッドを使用してカラム型を定義する。

よく使用するカラム型は以下の通り。

Migration DB型 用途
$table->id() bigint 主キー
$table->string(‘name’) varchar 短い文字列
$table->text(‘body’) text 長文
$table->integer(‘price’) int 整数
$table->bigInteger(‘view_count’) bigint 大きな整数
$table->boolean(‘is_public’) boolean true / false
$table->decimal(‘price’, 8, 2) decimal 小数
$table->date(‘birthday’) date 日付
$table->dateTime(‘start_at’) datetime 日時
$table->timestamp(‘last_login_at’) timestamp 日時
$table->timestamps() timestamp created_at・updated_at
$table->foreignId(‘user_id’) bigint 外部キー

Laravel では、
データ型を直接記述するのではなく、
Migration 用のメソッドを使用して定義する。

Migration を実行する

Migration ファイルの作成とテーブル定義が完了したら、
Migration を実行してデータベースへ反映する。

実行場所

ターミナルで Laravel プロジェクトフォルダへ移動してから実行する。

cd ~/Herd/project-name

project-name の部分は、
自分で作成した Laravel プロジェクトのフォルダ名に読み替える。

実行コマンド

php artisan migrate

このコマンドを実行すると、
未実行の Migration が全て順番に実行される。

既に実行済みの Migration は再実行されない。

正常に実行されると、
Migration ファイルに記述した内容をもとに、
データベースへテーブルが作成される。

INFO  Running migrations.

2026_01_01_000000_create_users_table ........ DONE

上記のように DONE と表示されれば成功。

make:migration は Migration ファイルを作成するコマンド。
migrate は Migration を実行するコマンド。

Migration を取り消す

実行した Migration を取り消す場合は、
以下のコマンドを使用する。

php artisan migrate:rollback

このコマンドを実行すると、
直前に実行した Migration が取り消され、
対応する down() が実行される。

Laravel が自動で変更内容を解析して元に戻しているわけではなく、
Migration 内に記述した down() が実行される。

そのため、
down() の記述に誤りがある場合は、
正しく元に戻せない可能性がある。

よく使う Migration コマンド

Laravel では、
Artisan コマンドを使用して Migration を実行・管理する。

よく使用する Migration コマンドは以下の通り。

コマンド 用途
php artisan make:migration Migration ファイルを作成する
php artisan migrate 未実行の Migration を実行する
php artisan migrate:rollback 直前に実行した Migration を取り消す
php artisan migrate:fresh 全テーブルを削除して Migration を再実行する
php artisan migrate:status Migration の実行状況を確認する

migrate:fresh を実行すると、
DB 内のテーブルとデータが全て削除される。
そのため、
運用開始後の環境では使用せず、
テーブル設計を頻繁に変更する開発段階で使用することが多い。

既存テーブルを変更する

Laravel の Migration は、
テーブル作成だけでなく、
既存テーブルの構造変更にも使用できる。

実際の開発では、
テーブル作成後にカラムを追加したり、
不要なカラムを削除したりすることがよくある。

例えば、
users テーブルへ最終ログイン日時を保存する
last_login_at カラムを追加する場合を考える。

Migration ファイルを作成する

既存のテーブルに変更を加える場合、
Laravel では作成済みの Migration を直接修正するのではなく、
新しい Migration ファイルを作成して変更内容を管理するのが基本。

これは、
DB構造の変更履歴を残すため。

まずは、
テーブル変更用の Migration ファイルを作成する。

php artisan make:migration add_last_login_at_to_users_table --table=users

このコマンドを実行すると、
users テーブル変更用の Migration ファイルが作成される。

カラムを追加する

作成された Migration ファイルへ、
追加したいカラムを記述する。

public function up(): void
{
    Schema::table('users', function (Blueprint $table) {

        $table->timestamp('last_login_at')->nullable();

    });
}

public function down(): void
{
    Schema::table('users', function (Blueprint $table) {

        $table->dropColumn('last_login_at');

    });
}

Schema::table() を使用すると、
既存テーブルの構造を変更できる。

この例では、
users テーブルへ
last_login_at カラムを追加している。

Migration を実行する

php artisan migrate

Migration を実行すると、
users テーブルへ
last_login_at カラムが追加される。

作成されたテーブルを確認する

Migration 実行後は、
テーブルが正しく作成されたか確認する。

方法1:MySQL コマンドで確認する

まず、
ターミナルを起動し、
MySQL へ接続する。

接続コマンド

mysql -u root -p

コマンド実行後、
パスワード入力を求められるため、
MySQL のパスワードを入力する。

接続できたら、
使用するデータベースを選択する。

USE project_name;

project_name の部分は、
.env ファイルの DB_DATABASE に設定した
データベース名へ読み替える。

データベース選択後、
以下のコマンドでテーブル一覧を確認できる。

テーブル一覧を確認する

SHOW TABLES;

users テーブルなどが表示されれば、
Migration は正常に実行されている。

テーブル構造を確認する

DESCRIBE users;

users テーブルのカラム構成を確認できる。

方法2:GUI ツールで確認する

TablePlus や Sequel Ace などの
DB 管理ツールを使用すると、
テーブル構造を画面上で確認できる。

Laravel 初心者は、
GUI ツールを使用した方が確認しやすい。

Mac 環境では、
Sequel Ace を使用するケースが比較的多い。

まとめ

Migration は、
Laravel でデータベースのテーブル構造を管理する仕組み。

Migration を使用することで、
テーブル作成や構造変更の履歴をコードで管理できる。

Migration の基本的な流れは以下の通り。

  1. Migration ファイルを作成する
  2. カラム定義を記述する
  3. php artisan migrate を実行する
  4. 必要に応じて新しい Migration を追加して構造変更を行う

また、
Laravel では Migration 用のメソッドを使用して、
テーブルやカラムを定義する。

まずは、
users テーブルのような簡単なテーブルを作成し、
Migration の基本的な流れを理解することが重要。