Laravelのrefreshとfreshの違いを初心者でもわかる解説
生徒
「先生、Laravelでマイグレーションをやり直すときにrefreshとfreshってありますけど、何が違うんですか?」
先生
「それは良い質問です。簡単に言うと、両方ともデータベースのテーブルをリセットして再作成するコマンドですが、細かい動作が少し違います。」
生徒
「具体的にはどのような違いがあるんですか?」
先生
「それでは順を追って説明しますね。」
1. refreshとは?
Laravelのphp artisan migrate:refreshコマンドは、すでに存在するテーブルを一度削除(ロールバック)して、再度マイグレーションを実行する方法です。簡単に言うと「リセットして作り直す」操作です。
例えば、テーブル構造を変更した場合やSeederでデータを入れ直したいときに使います。ポイントは既存のデータは削除されますが、マイグレーションファイルは順番通りに再実行されます。
php artisan migrate:refresh
もしSeederも同時に実行したい場合は、--seedオプションを追加します。
php artisan migrate:refresh --seed
この場合、マイグレーションをリセットして再作成したあとに、登録用のSeederも自動で実行されます。
2. freshとは?
一方でphp artisan migrate:freshは、テーブルをすべて削除してからマイグレーションを実行するコマンドです。refreshとの違いは、個別のロールバックを経ずに一気にテーブルを削除する点です。
つまり、テーブル数が多い場合や、すべてのデータをリセットして一から環境を作りたいときに便利です。
php artisan migrate:fresh
Seederも同時に実行したい場合は、refreshと同じように--seedをつけます。
php artisan migrate:fresh --seed
3. refreshとfreshの違いをイメージで理解
わかりやすく例えると、refreshは「テーブルを一つずつ掃除して作り直す」、freshは「部屋ごと全部片付けて新しく家具を置く」というイメージです。どちらも最終的には新しい状態になりますが、処理の順序や方法が異なります。
そのため、テーブルに依存関係がある場合や部分的にマイグレーションをやり直したい場合はrefresh、すべてをリセットして一から構築したい場合はfreshを使う、と覚えておくと良いです。
4. 実務での使い分けポイント
実務では、開発中にテーブルを頻繁に変更する場合やテストデータを何度も入れ直す場合があります。このとき、以下のように使い分けます。
- 部分的にマイグレーションをやり直したい →
php artisan migrate:refresh - すべてのテーブルとデータをリセットして一から構築 →
php artisan migrate:fresh
また、Seederも同時に使うことで、毎回テスト用の初期データを簡単に準備できます。
5. 注意点
どちらのコマンドも、実行すると既存のデータは削除されます。そのため、本番環境では安易に使用せず、開発やテスト環境で使うことが推奨されます。間違えて本番データを消してしまわないように注意してください。