この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:atom
更新日時:2026-05-18 01:50:51

タイトル: マイグレーションとテーブル定義

本稿はLaravelのマイグレーションとテーブル定義に関する記事です。

子ページから項目を選択してください。

マイグレーションとは?

マイグレーションとはテーブル定義の作成、変更を管理する機能です。

マイグレーションファイルを作成し、ファイル内にテーブル定義の作成、変更を記述することでマイグレイトした際に変更が反映されます。スキーマ変更をPHPコードとしてバージョン管理できるため、本番反映の安全性とチーム間の共有が大きく向上します。

本ページの子ページ一覧

項目内容
テーブルの作成と定義の変更Schema::create / Schema::table の基本
カラムの追加、変更、削除方法addColumn / change / dropColumn
データ型とカラム修飾子string / integer / boolean / nullable / unique 等
デフォルト値の設定default() 修飾子の使い方

基本コマンド早見

コマンド用途
php artisan make:migration create_xxx_table新規テーブル用マイグレーションファイル作成
php artisan make:migration add_yyy_to_xxx_table --table=xxx既存テーブル変更用
php artisan migrate未適用のマイグレーションを実行
php artisan migrate:rollback直前のマイグレーションを取り消し
php artisan migrate:rollback --step=22世代前まで取り消し
php artisan migrate:reset全マイグレーションを取り消し
php artisan migrate:refreshreset + migrate
php artisan migrate:fresh全テーブルDROP + migrate(開発で便利)
php artisan migrate:status適用状況の確認

新規テーブル作成の最小例

// database/migrations/xxxx_create_users_table.php
public function up(): void {
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamps();
    });
}

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

カラム追加の例

Schema::table('users', function (Blueprint $table) {
    $table->string('phone', 20)->nullable()->after('email');
});

本番運用での注意

  • マイグレーションは追記式: 既存ファイルを編集するのではなく、新しいマイグレーションを追加する
  • ROLLBACK可能なように書く: down() も必ず実装
  • 大規模テーブルへのALTER: ロック時間に注意。pt-online-schema-change 等を検討
  • 本番マイグレーションは必ずバックアップ後: マイグレーションでデータ破損するケースを想定
  • migrate:fresh は本番では絶対に使わない(全テーブルDROP)

マイグレーションが本番で失敗したとき

  1. エラー内容を確認(最後の出力1〜2行が肝心)
  2. 失敗したマイグレーションはDBに記録されない(rollback不要)
  3. 原因を修正(既存データとの矛盾、外部キー違反、Index長等)
  4. 本番DBの該当行を手動修正、または条件付きでマイグレーション本体を修正
  5. 再実行

関連