migrate:reset — マイグレーションをリセットするコマンド

artisan

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] データベース接続失敗 .envDB_* 設定を確認
Command cannot run in production --force が不足 本番で実行する場合は --force を付与

参考リンク

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする