カテゴリ: Laravel 更新日: 2026/03/31

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. テーブルを作成するマイグレーションの基本

Laravelでデータベースを操作する際、直接SQLを書く必要はありません。その代わりに使うのが「マイグレーション」です。まずは、設計図となる新しいマイグレーションファイルを作成しましょう。

今回は初心者の方でも分かりやすいよう、プロフィールの基本となる「ユーザー情報(users)」を保存するためのテーブルを作成します。ターミナル(WindowsならコマンドプロンプトやPowerShell)を開き、以下の職人コマンド(Artisan)を実行してください。


php artisan make:migration create_users_table

コマンドを実行すると、database/migrationsディレクトリ内に「日付_create_users_table.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
    {
        // 'users'という名前のテーブルを作成する指示
        Schema::create('users', function (Blueprint $table) {
            $table->id(); // 1, 2, 3...と自動で増えるID(背番号のようなもの)
            $table->string('name'); // 名前を保存する「文字列型」のカラム
            $table->string('email')->unique(); // 重複登録できない「メールアドレス」用カラム
            $table->string('password'); // パスワードを保存するカラム
            $table->timestamps(); // 「作成日時」と「更新日時」を自動で記録する便利なセット
        });
    }

    /**
     * マイグレーションの取り消し(元に戻す)
     */
    public function down(): void
    {
        // 失敗した時ややり直したい時に、作成したテーブルを削除する
        Schema::dropIfExists('users');
    }
};

up()メソッドは「新しくテーブルを作ったり、カラムを追加したりする処理」を書き、down()メソッドには「その操作を元に戻す(削除する)処理」を書きます。このように「作成」と「削除」がセットになっているおかげで、チーム開発でもデータベースの状態を安全に管理できるのがLaravelの強みです。

設計図が完成したら、いよいよ実際のデータベースに反映させます。以下のコマンドを入力してください。


php artisan migrate

実行後、以下のようなメッセージが表示されれば成功です!


2026_01_01_000000_create_users_table ........................... DONE

これで、あなたのデータベースの中に「users」という名前の空箱(テーブル)が作成されました。$table->string('name')のように記述するだけで、複雑なSQL言語を使わずにデータベースを構築できるのが、マイグレーションの大きなメリットです。

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のルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.2
Java&Spring記事人気No2
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.3
Java&Spring記事人気No3
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.4
Java&Spring記事人気No4
Laravel
Laravelのresponse()関数の使い方を完全ガイド!初心者でもわかるレスポンス制御とHTTPレスポンスの基本
No.5
Java&Spring記事人気No5
CodeIgniter
CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法
No.6
Java&Spring記事人気No6
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.7
Java&Spring記事人気No7
Laravel
LaravelでHello Worldを表示する方法を完全解説!初心者向けにルーティングと画面表示をやさしく説明
No.8
Java&Spring記事人気No8
Laravel
LaravelでRemember Me(ログイン状態保持)機能を実装する方法を完全解説!初心者でも安心の認証入門