laravel artisan コマンド: migrate:reset
一言概要
- カテゴリ: artisan
- バージョン: Laravel 12
- 名前空間 / FQCN / コマンド:
php artisan migrate:reset
- 関連:
migrate:refresh, migrate:rollback, migrate:status, db:wipe, migrate
- 変更履歴
- 2014‑08‑24: Laravel 4.1 で追加
- 2015‑04‑01: Laravel 5.0 で正式サポート
- 2020‑04‑15: Laravel 6.0 でマイグレーションフレームワーク更新
- 2023‑06‑01: Laravel 9.0 で
--pretend オプションを追加
- 2025‑02‑10: Laravel 12 で
--realpath が自動認識に統合
TL;DR
- 目的: すべてのマイグレーションをロールバックし、データベースを初期状態に戻す。
- 最低限の実行:
php artisan migrate:reset
- 注意点
- 全テーブルが削除され、データは失われる。
- 本番環境では
--force が必須。
--path を使えば特定ディレクトリのみを対象にできる。
概要
migrate:reset は、現在のデータベースを「クリーンな状態」にリセットします。
開発中にテーブル構造を頻繁に変更する際や、テストデータを再投入する前に使用します。
構文 / シグネチャ
php artisan migrate:reset
{--database= : The database connection to use}
{--path= : The path to the migrations}
{--pretend : Dump the SQL queries that would be run}
{--force : Force the operation to run when in production}
{--realpath : Indicates that the given path is a full path}
オプション表
| オプション |
型 |
必須 |
既定値 |
説明 |
database |
string |
いいえ |
null |
使用する DB 接続名 |
path |
string |
いいえ |
null |
マイグレーションファイルへの相対/絶対パス |
pretend |
bool |
いいえ |
false |
SQL を出力するだけで実行しない |
force |
bool |
いいえ |
false |
本番環境での実行許可 |
realpath |
bool |
いいえ |
false |
path がフルパスであることを示す |
戻り値
void(コンソールに出力するのみ)
例外 / 副作用
- RuntimeException: マイグレーションファイルが見つからない時などに投げられる。
- データ損失: すべてのテーブルが削除され、データは失われる。
- pretend モード: 実際には変更が行われないが、SQL を表示するだけ。
使用例
最小例
php artisan migrate:reset
実務例
# 開発環境でマイグレーションをリセットし、テストデータを再投入
php artisan migrate:reset
php artisan db:seed
よくある落とし穴
- データの完全消失:必ずバックアップを取得すること。
- 本番環境:
--force が付与されていないと実行できない。
- マルチデータベース:
--database を指定しないとデフォルト接続が使われる。
- パス指定:
--path で指定したディレクトリにあるマイグレーションのみが対象になる。
代替 / 関連 API
| API |
主な違い |
選択基準 |
migrate:refresh |
reset + migrate を連続で実行 |
すべてのマイグレーションをやり直したい |
migrate:rollback |
直近のバッチだけをロールバック |
最近の変更だけを取り消したい |
db:wipe |
すべてのテーブルをドロップ |
マイグレーション無しで完全に空にしたい |
migrate |
新しいマイグレーションだけを実行 |
新規変更のみ適用したい |
テスト例(Pest)
use Illuminate\Support\Facades\DB;
it('resets all migrations', function () {
// Arrange
DB::statement('CREATE TABLE test (id INT)');
// Act
$output = $this->artisan('migrate:reset');
// Assert
$tables = DB::select('SHOW TABLES LIKE "test"');
expect($tables)->toBeEmpty();
});
トラブルシュート(エラー別)
| エラー |
原因 |
対処 |
Could not find a migration path |
--path が無効 |
パスを再確認し、正しいディレクトリを指定 |
SQLSTATE[HY000] |
データベース接続失敗 |
.env の DB_* 設定を確認 |
Command cannot run in production |
--force が不足 |
本番で実行する場合は --force を付与 |
参考リンク