カテゴリ: Laravel 更新日: 2026/02/25

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. freshとは?

2. freshとは?
2. freshとは?

一方でphp artisan migrate:freshは、テーブルをすべて削除してからマイグレーションを実行するコマンドです。refreshとの違いは、個別のロールバックを経ずに一気にテーブルを削除する点です。

つまり、テーブル数が多い場合や、すべてのデータをリセットして一から環境を作りたいときに便利です。


php artisan migrate:fresh

Seederも同時に実行したい場合は、refreshと同じように--seedをつけます。


php artisan migrate:fresh --seed

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でAPIのレスポンスをテストする方法を完全解説!assertJsonで初心者も安心
New2
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New3
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New4
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.2
Java&Spring記事人気No2
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.3
Java&Spring記事人気No3
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.4
Java&Spring記事人気No4
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.5
Java&Spring記事人気No5
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.6
Java&Spring記事人気No6
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelでファクトリを使ってテストデータを作成する方法を完全解説!初心者向けLaravelテスト入門