カテゴリ: Laravel 更新日: 2026/02/20

Laravelでテーブルを作成・変更・削除するマイグレーションの書き方を解説!初心者でも理解できるデータベース操作

Laravelでテーブルを作成・変更・削除するマイグレーションの書き方
Laravelでテーブルを作成・変更・削除するマイグレーションの書き方

先生と生徒の会話形式で理解しよう

生徒

「Laravelでデータベースにテーブルを作るって、どうやるんですか?」

先生

「Laravelでは『マイグレーション(migration)』という仕組みを使って、テーブルを作ったり、変更したり、削除したりできますよ。」

生徒

「マイグレーションって難しそうですが、どういうものなんですか?」

先生

「心配いりません。マイグレーションは、データベースの“設計図”のようなものなんです。実際にコードで操作できるので、初心者でも慣れれば簡単に使えますよ!」

1. マイグレーションとは?初心者でもわかる基本概念

1. マイグレーションとは?初心者でもわかる基本概念
1. マイグレーションとは?初心者でもわかる基本概念

Laravelのマイグレーション(Migration)とは、一言で言えば「データベースのバージョン管理システム」です。 通常、データベースのテーブルを作成・変更する際は「phpMyAdmin」や「Sequel Ace」といったツールを使ってマウスで操作(GUI操作)することが一般的ですが、LaravelではすべてをPHPのコードで管理します。

プログラミング未経験の方にとって、「なぜわざわざコードで書くの?」と疑問に思うかもしれません。その理由は、チーム開発やアプリの公開(デプロイ)時に絶大な威力を発揮するからです。

【手動操作の場合】
  • 手順書を作って全員に共有が必要
  • 操作ミスでデータが消えるリスク
  • 過去にどう変更したか履歴が追えない
【マイグレーションの場合】
  • コマンドひとつで全員同じ状態に
  • プログラムなのでミスが少ない
  • Gitなどで「誰がいつ変えたか」わかる

たとえば、家を建てるときの「設計図」をイメージしてください。 設計図(マイグレーションファイル)さえあれば、大工さん(Laravel)がその通りに部屋(テーブル)を作り、後から「ここに窓(カラム)を追加して」という指示も設計図を更新するだけで、誰でも同じ家を再現できるのです。

具体的には、以下のようなシンプルなPHPファイルを1つ作成するだけで、データベースに「名前」や「メールアドレス」を入れる箱が自動で出来上がります。


// これが「設計図」のイメージです
Schema::create('profiles', function (Blueprint $table) {
    $table->id();              // ID(自動で増える番号)
    $table->string('name');    // 名前を入れる場所
    $table->text('bio');       // 自己紹介文を入れる場所
    $table->timestamps();      // 作成された日時を記録する場所
});

このように、難しいSQL構文を覚えなくても、直感的なPHPコードでデータベースを自由自在に操れるのが、Laravelマイグレーションの最大のメリットです。

2. テーブルを作成するマイグレーションの基本

2. テーブルを作成するマイグレーションの基本
2. テーブルを作成するマイグレーションの基本

まず、新しいマイグレーションファイルを作成します。ターミナル(コマンドプロンプト)で次のコマンドを実行しましょう。


php artisan make:migration create_users_table

このコマンドを実行すると、database/migrationsフォルダ内に「create_users_table」という名前のマイグレーションファイルが作成されます。

中身は次のような構成になっています。


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) {
            $table->id(); // 自動でIDカラムを作成
            $table->string('name'); // 名前カラム
            $table->string('email')->unique(); // 重複しないメールアドレス
            $table->timestamps(); // 作成日時と更新日時
        });
    }

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

up()メソッドには「テーブルを作る処理」が書かれており、down()メソッドには「取り消す処理(削除)」が書かれています。 Schema::create()の中で$tableを使い、カラム(列)の種類を定義します。

作成したマイグレーションを反映するには、次のコマンドを実行します。


php artisan migrate

これで実際にデータベースに「users」テーブルが作成されます。

3. テーブルを変更するマイグレーション

3. テーブルを変更するマイグレーション
3. テーブルを変更するマイグレーション

既にあるテーブルに新しいカラムを追加したい場合は、次のようにマイグレーションを作成します。


php artisan make:migration add_age_to_users_table --table=users

ファイルが作成されたら、次のようにup()メソッド内に新しいカラムを追加します。


public function up(): void
{
    Schema::table('users', function (Blueprint $table) {
        $table->integer('age')->nullable(); // 年齢カラムを追加
    });
}

変更を反映するには、再びphp artisan migrateを実行します。

ちなみに、カラムを削除したい場合はdropColumn()を使います。


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

4. テーブルを削除するマイグレーション

4. テーブルを削除するマイグレーション
4. テーブルを削除するマイグレーション

テーブル全体を削除するには、Schema::dropIfExists()を使います。 これは「もし存在すれば削除する」という意味で、エラーを避ける安全な方法です。


Schema::dropIfExists('users');

マイグレーションファイル内のdown()メソッドでも同じ処理がよく使われます。 これにより、php artisan migrate:rollbackコマンドで、テーブル作成前の状態に戻すこともできます。

5. よく使うマイグレーション構文まとめ

5. よく使うマイグレーション構文まとめ
5. よく使うマイグレーション構文まとめ

Laravelのマイグレーションで使われる代表的なカラム定義をいくつか紹介します。

  • $table->id();:自動で連番のIDカラムを作成
  • $table->string('title');:文字列カラムを作成(255文字まで)
  • $table->text('body');:長文カラム
  • $table->integer('age');:整数カラム
  • $table->boolean('is_active');:真偽値(true/false)
  • $table->timestamps();:作成日時・更新日時カラム

これらを組み合わせることで、ブログ記事やユーザー情報など、あらゆるテーブルを自由に設計できます。

6. マイグレーションを使うメリット

6. マイグレーションを使うメリット
6. マイグレーションを使うメリット

マイグレーションを使うと、コードでテーブルを管理できるため、手作業でデータベースを編集するよりも安全で確実です。 さらに、チーム開発で複数人が同じ環境を構築するときも、コマンドひとつで同じテーブルを再現できます。

また、履歴管理ができるのも大きな利点です。 たとえば、間違えてテーブルを変更してしまっても、php artisan migrate:rollbackで前の状態に戻せます。 まさに「データベースのタイムマシン」といえる機能です。

まとめ

まとめ
まとめ

ここまで、Laravelにおけるマイグレーションの基本から応用、そして実際の操作方法について詳しく解説してきました。データベースの操作と聞くと、SQL文を直接書いたり、GUIツールでポチポチとテーブルを作成したりするイメージが強いかもしれません。しかし、Laravelのマイグレーション機能を活用することで、PHPのコードとして「データベースの設計図」を管理できるようになります。

マイグレーションがWeb開発に不可欠な理由

Webアプリケーションの開発現場では、一人で完結することは少なく、多くのエンジニアがチームとなって一つのシステムを作り上げます。その際、誰かがデータベースの構造を変えたときに、他のメンバーにもその変更を伝えなければなりません。手動で操作していると「どのカラムを追加したんだっけ?」といったミスが発生しやすくなります。

マイグレーションを使えば、Gitなどのバージョン管理システムを通じてコードを共有するだけで、全員が同じデータベース構造を再現できます。まさに現代の開発における「標準装備」といえるでしょう。

実践:より具体的なサンプルコード

例えば、ブログシステムを作るとしましょう。記事を保存する「posts」テーブルを作成する場合、どのようなコードになるか改めておさらいしてみましょう。


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('posts', function (Blueprint $table) {
            $table->id(); // 記事ID
            $table->string('title'); // 記事タイトル
            $table->text('content'); // 本文
            $table->foreignId('user_id')->constrained(); // 投稿ユーザーID(外部キー)
            $table->boolean('is_published')->default(false); // 公開フラグ
            $table->timestamps(); // 登録・更新日時
        });
    }

    /**
     * マイグレーションの取り消し(テーブル削除)
     */
    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};

上記のコードでは、単なるデータ型の指定だけでなく、default(false)を使って初期値を設定したり、foreignIdを使って他のテーブルとの紐付け(リレーション)を考慮したりしています。これらもすべてPHPのメソッド形式で記述できるのがLaravelの強みです。

マイグレーション実行の流れとコマンド

実際にテーブルを生成する際は、ターミナルで以下のコマンドを打ち込みます。実行結果のイメージも確認しておきましょう。


php artisan migrate

実行に成功すると、以下のようなメッセージが表示されます。


2026_01_31_000000_create_posts_table ........................... DONE

もし、テーブル構造を少し修正したい場合は、一旦ロールバック(巻き戻し)を行うことも可能です。


php artisan migrate:rollback

実行結果:


Rolling back: 2026_01_31_000000_create_posts_table
Rolled back:  2026_01_31_000000_create_posts_table

このように、コマンド一つで「作成」と「破棄」を自由に行き来できるため、開発中の試行錯誤が格段に楽になります。

最後に:学習のステップアップ

初心者のうちは、まず「テーブルを作ってみる(create)」ことから始め、次に「カラムを追加する(table)」、そして「ロールバックで戻す」という一連の流れを体に覚えさせることが大切です。これに慣れてくると、インデックス(Index)を貼って検索スピードを上げたり、外部キー制約でデータの整合性を保ったりといった高度な設計もできるようになります。

Laravelの公式ドキュメントには、他にも多くの便利なメソッドが紹介されています。まずは自分の手で動かしてみて、思い通りのデータベースが出来上がる楽しさを実感してください。

先生と生徒の振り返り会話

生徒

「先生、ありがとうございました!マイグレーションを使えば、直接SQLを書かなくてもPHPの知識だけでデータベースが操作できるんですね。」

先生

「その通りです!しかも、コードで管理しているから、半年後に『どんな設定でテーブルを作ったっけ?』と忘れてしまっても、ファイルを見ればすぐに分かりますよ。」

生徒

「確かに、メモを残すより確実ですね。でも、もし間違えて php artisan migrate をしちゃったらどうすればいいんですか?」

先生

「そんなときは rollback コマンドの出番です。ただ、本番環境で実行するときは中のデータが消えてしまう可能性もあるので、しっかりバックアップをとったり、慎重に操作することを心がけましょう。」

生徒

「なるほど。まずは自分のパソコン(ローカル環境)でたくさん練習して、コマンドの扱いに慣れていこうと思います!」

先生

「その意気です。マイグレーションをマスターすれば、Laravelでのアプリ開発がもっと楽しく、効率的になりますよ。頑張ってくださいね!」

関連記事:
カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyでテンプレートを使う方法!初心者向けTwig入門ガイド
New2
Symfony
Symfonyのルーティングの基本を完全ガイド!YAML・PHP・アノテーションの違いもわかりやすく解説
New3
Laravel
LaravelでAPIのレスポンスをテストする方法を完全解説!assertJsonで初心者も安心
New4
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.4
Java&Spring記事人気No4
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.5
Java&Spring記事人気No5
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.6
Java&Spring記事人気No6
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelでコントローラを作成する方法(artisanコマンド)
No.8
Java&Spring記事人気No8
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方