カテゴリ: Laravel 更新日: 2026/04/06

Laravelのrefreshとfreshの違いを初心者でもわかる解説

Laravelの`refresh`と`fresh`の違いとは?再マイグレーションの違い
Laravelの`refresh`と`fresh`の違いとは?再マイグレーションの違い

先生と生徒の会話形式で理解しよう

生徒

「先生、Laravelでマイグレーションをやり直すときにrefreshとfreshってありますけど、何が違うんですか?」

先生

「それは良い質問です。簡単に言うと、両方ともデータベースのテーブルをリセットして再作成するコマンドですが、細かい動作が少し違います。」

生徒

「具体的にはどのような違いがあるんですか?」

先生

「それでは順を追って説明しますね。」

1. refreshとは?(ロールバックを伴う再構築)

1. refreshとは?(ロールバックを伴う再構築)
1. refreshとは?(ロールバックを伴う再構築)

Laravelのphp artisan migrate:refreshは、これまでに実行したマイグレーションを逆順に一つずつ取り消し(ロールバック)してから、再度すべて実行し直すコマンドです。初心者の方には「一度巻き戻してから、もう一度録画し直す」ようなイメージと伝えると分かりやすいかもしれません。

このコマンドの最大の特徴は、各マイグレーションファイルに書かれたdown()メソッドを呼び出す点にあります。そのため、単にテーブルを消すだけでなく、特定の処理を挟みながら安全にリセットしたい場合に適しています。

未経験者向けの具体例:
例えば「usersテーブル」を作った後に「postsテーブル」を作った場合、refreshを実行すると「postsを削除」→「usersを削除」→「usersを作成」→「postsを作成」というステップを丁寧に踏みます。

// ターミナルで実行する基本コマンド
php artisan migrate:refresh

実行すると、コンソールには以下のように「Rolling back(巻き戻し)」と「Migrating(再適用)」のログが順番に表示されます。


Rolling back: 2026_01_01_000001_create_posts_table
Rolling back: 2026_01_01_000000_create_users_table
Migrating:    2026_01_01_000000_create_users_table
Migrating:    2026_01_01_000001_create_posts_table

また、開発中によく使うのが「テーブルを直した後にテストデータを入れ直す」作業です。その場合は--seedオプションを使いましょう。これにより、データの流し込み(Seeding)までを一気に自動化できます。


// テーブルを再作成して、初期データ(Seeder)も注入する
php artisan migrate:refresh --seed

注意点として、refreshは既存のデータをすべて削除します。開発環境で「テーブル構造をちょっと変えたから、最初からやり直したいな」という時に非常に重宝する、Laravel開発の基本コマンドです。

2. migrate:freshコマンドとは?テーブル全削除から再構築する仕組み

2. migrate:freshコマンドとは?テーブル全削除から再構築する仕組み
2. migrate:freshコマンドとは?テーブル全削除から再構築する仕組み

Laravelでの開発中、「データベースを一度まっさらな状態から作り直したい」という場面がよくあります。そんな時に活躍するのが php artisan migrate:fresh コマンドです。

このコマンドの最大の特徴は、「既存のテーブルをすべて強制的にドロップ(削除)してから、マイグレーションを実行する」という点にあります。後述する refresh とは異なり、一つひとつの変更を逆再生(ロールバック)する手順を踏まないため、テーブル数が多いプロジェクトでも非常に高速に動作します。

初心者向けの具体例:古いデータを一掃する

例えば、プログラミング未経験の方が「ユーザー情報の項目を大幅に変更したいけれど、古いテストデータが邪魔でエラーが出る」という状況になったとしましょう。fresh を使うと、複雑な整合性を気にせず一瞬でリセットできます。


// 実行すると、まずデータベース内の全テーブルが消去されます
// その後、定義されているすべてのマイグレーションファイルが実行されます
php artisan migrate:fresh

実行時のログ(出力結果)は以下のようになります。すべてのテーブルが「Dropped(削除)」された後に、新しく「Migrating(作成)」されているのがわかります。


Dropped all tables successfully.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_reset_tokens_table
Migrated:  2014_10_12_100000_create_password_reset_tokens_table

テストデータを自動で入れ直す(--seedオプション)

テーブルを空にした後、すぐに動作確認をしたい場合は、初期データ(Seeder)も一緒に流し込むのが一般的です。以下のコマンドを使えば、「テーブル削除 → 構造作成 → サンプルデータ投入」までをワンコマンドで完結できます。


// 開発環境を最新の状態にリセットし、テストデータまで準備する
php artisan migrate:fresh --seed

注意点: fresh は文字通り「すべてを消し去る」コマンドです。本番環境で実行すると顧客データもすべて消えてしまうため、主にローカル開発環境での微調整や、環境構築の初期段階で使用するようにしましょう。

3. refreshとfreshの違いをイメージで理解

3. refreshとfreshの違いをイメージで理解
3. refreshとfreshの違いをイメージで理解

わかりやすく例えると、refreshは「テーブルを一つずつ掃除して作り直す」、freshは「部屋ごと全部片付けて新しく家具を置く」というイメージです。どちらも最終的には新しい状態になりますが、処理の順序や方法が異なります。

そのため、テーブルに依存関係がある場合や部分的にマイグレーションをやり直したい場合はrefresh、すべてをリセットして一から構築したい場合はfreshを使う、と覚えておくと良いです。

4. 実務での使い分けポイント

4. 実務での使い分けポイント
4. 実務での使い分けポイント

実務では、開発中にテーブルを頻繁に変更する場合やテストデータを何度も入れ直す場合があります。このとき、以下のように使い分けます。

  • 部分的にマイグレーションをやり直したい → php artisan migrate:refresh
  • すべてのテーブルとデータをリセットして一から構築 → php artisan migrate:fresh

また、Seederも同時に使うことで、毎回テスト用の初期データを簡単に準備できます。

5. 注意点

5. 注意点
5. 注意点

どちらのコマンドも、実行すると既存のデータは削除されます。そのため、本番環境では安易に使用せず、開発やテスト環境で使うことが推奨されます。間違えて本番データを消してしまわないように注意してください。

関連記事:
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelのルート管理のベストプラクティスまとめ!初心者でもわかるやさしい解説
New2
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド
New4
Symfony
SymfonyでカスタムURLジェネレーターを作成する方法!初心者でも理解できる手順を完全解説
人気記事
No.1
Java&Spring記事人気No1
CodeIgniter
CodeIgniterでファイルアップロードをマスター!安全な保存と管理方法
No.2
Java&Spring記事人気No2
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.3
Java&Spring記事人気No3
Laravel
LaravelのFeatureテストとUnitテストの違いを理解しよう
No.4
Java&Spring記事人気No4
Laravel
Laravelのルーティングでサブドメインを使う方法!初心者向けにやさしく解説
No.5
Java&Spring記事人気No5
Laravel
Laravelでドメインルートを使う方法!マルチドメイン対応を初心者向けに解説
No.6
Java&Spring記事人気No6
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド
No.8
Java&Spring記事人気No8
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方