この記事の最終更新日: 2025年5月7日

Laravel 12.x では、データベーススキーマのバージョン管理を容易にするために、マイグレーション機能が提供されています。開発中にマイグレーションを取り消したり、再実行したりする必要が生じることがあります。本記事では、マイグレーションのロールバック方法と、関連する Artisan コマンドの違いについて詳しく解説します。
マイグレーションのロールバック方法
1. 最新のマイグレーションバッチをロールバックする
以下のコマンドで、最後に実行されたマイグレーションバッチをロールバックできます。
php artisan migrate:rollback
Laravel では、同時に実行されたマイグレーションファイルのグループを「バッチ」として管理しています。このコマンドは、最後のバッチに含まれるすべてのマイグレーションをロールバックします。
2. 特定のステップ数のマイグレーションをロールバックする
--step
オプションを使用することで、指定した数のマイグレーションをロールバックできます。
php artisan migrate:rollback --step=2
この例では、最後に実行された2つのマイグレーションをロールバックします。
3. 特定のバッチ番号のマイグレーションをロールバックする
--batch
オプションを使用して、特定のバッチ番号のマイグレーションをロールバックできます。
php artisan migrate:rollback --batch=3
このコマンドは、バッチ番号が3のマイグレーションをすべてロールバックします。
4. 特定のマイグレーションファイルをロールバックする
特定のマイグレーションファイルのみをロールバックしたい場合は、--path
オプションを使用します。
php artisan migrate:rollback --path=database/migrations/2024_04_06_144031_create_blogs_table.php
このコマンドは、指定したマイグレーションファイルのみをロールバックします。
その他の関連コマンド
1. すべてのマイグレーションをロールバックする
以下のコマンドで、すべてのマイグレーションをロールバックできます。
php artisan migrate:reset
このコマンドは、アプリケーションのすべてのマイグレーションをロールバックし、データベースを初期状態に戻します。
2. マイグレーションをリフレッシュする
以下のコマンドで、すべてのマイグレーションをロールバックし、再実行できます。
php artisan migrate:refresh
このコマンドは、データベースを再構築する際に便利です。また、--seed
オプションを追加することで、マイグレーション後にシーディングも実行できます。
php artisan migrate:refresh --seed
3. データベースを初期化する
以下のコマンドで、すべてのテーブルを削除し、マイグレーションを再実行できます。
php artisan migrate:fresh
このコマンドは、データベースを完全に初期化したい場合に使用します。--seed
オプションを追加することで、マイグレーション後にシーディングも実行できます。
php artisan migrate:fresh --seed
各コマンドの比較
コマンド | 説明 |
---|---|
migrate:rollback | 最後のマイグレーションバッチをロールバックします。 |
migrate:rollback --step=2 | 最後の2つのマイグレーションをロールバックします。 |
migrate:rollback --batch=3 | バッチ番号が3のマイグレーションをロールバックします。 |
migrate:rollback --path=... | 指定したマイグレーションファイルのみをロールバックします。 |
migrate:reset | すべてのマイグレーションをロールバックします。 |
migrate:refresh | すべてのマイグレーションをロールバックし、再実行します。 |
migrate:refresh --seed | 上記に加えて、シーディングも実行します。 |
migrate:fresh | すべてのテーブルを削除し、マイグレーションを再実行します。 |
migrate:fresh --seed | 上記に加えて、シーディングも実行します。 |
注意点
- マイグレーションファイルには、
up
メソッドとdown
メソッドの両方を適切に実装することが重要です。down
メソッドが未実装の場合、ロールバック時にエラーが発生する可能性があります。 - 本番環境でのロールバック操作は慎重に行う必要があります。特に
migrate:reset
やmigrate:fresh
は、データの損失を招く可能性があるため、事前にバックアップを取得するなどの対策を講じることが推奨されます。
Laravelのマイグレーション機能を適切に理解し、開発を円滑に進めましょう。

大阪のエンジニアが書いているブログ。
コメント