【Laravel】artisan schema:dumpの使い方|マイグレーションファイルを整理する方法と–pruneの注意点

2026-04-05

Laravelプロジェクトを長く運用していると、database/migrations 配下のファイルが100個を超えてくることがあります。

php artisan schema:dump は、そのマイグレーションファイルをSQLファイルに圧縮・整理するためのコマンドです。

「schema:dumpって何をするコマンド?」
「–pruneオプションは使っても大丈夫?」
「実行後にどんなファイルが生成されるの?」

実務経験をもとに、コマンドの仕組みから安全な使い方まで具体的に解説します。


1. schema:dumpとは何か

schema:dump は、現在のデータベーススキーマをSQLファイルとして書き出し、マイグレーションファイルの肥大化を解消するためのコマンドです。

Laravelを長期運用していると、マイグレーションファイルが積み重なって以下の問題が起きます。

  • php artisan migrate:fresh の実行が遅くなる
  • ファイル数が多くて管理しにくい
  • 新しい開発者がマイグレーションの歴史を追いにくい

schema:dump を使うことで、現在のDB構造を1つのSQLファイルにまとめ、過去のマイグレーションファイルを整理できます。

2. 基本的な使い方

php artisan schema:dump

実行結果:

INFO  Database schema dumped successfully.

生成されるファイル

DBドライバーによって保存先が変わります。

DBドライバー生成ファイル
MySQL / MariaDBdatabase/schema/mysql-schema.sql
PostgreSQLdatabase/schema/pgsql-schema.sql
SQLitedatabase/schema/sqlite-schema.sql

ファイルの中身

生成されたSQLファイルには以下の2種類の内容が含まれます。

  • 全テーブルのCREATE TABLE文
  • migrations テーブルへの INSERT文(どのマイグレーションが実行済みかの記録)

シーダーで投入したレコードは含まれません。あくまでスキーマ(構造)のダンプです。

3. オプション一覧

php artisan schema:dump [--database [DATABASE]] [--path [PATH]] [--prune]
オプション説明
--database=使用するDB接続を指定(config/database.phpの接続名)
--path=SQLファイルの出力先を指定(デフォルト:database/schema/
--pruneダンプ後にマイグレーションファイルを削除する

4. –pruneオプションの注意点

--prune は非常に強力なオプションです。使い方を誤るとマイグレーションファイルが失われます。

php artisan schema:dump --prune

実行されること

  1. スキーマをSQLファイルに書き出す
  2. database/migrations/ 配下のマイグレーションファイルをすべて削除する

注意:ディレクトリ自体は削除されません。ファイルのみ削除されます。

–pruneを使う前に必ずやること

# 1. 現在のマイグレーション状態を確認
php artisan migrate:status

# 2. 全マイグレーションが "Yes"(実行済み)になっていることを確認
# ひとつでも "No" があれば先にmigrate実行

# 3. Gitにコミットしてバックアップ
git add database/migrations/
git commit -m "backup: before schema:dump --prune"

# 4. 実行
php artisan schema:dump --prune

–pruneを使っていい条件

  • 全マイグレーションが本番環境で適用済みである
  • Gitでバックアップしてある
  • チーム全員が migrate:fresh 後に再セットアップ可能な状態にある

5. schema:dump後のmigrate:freshの動作

schema:dump 実行後に migrate:fresh を実行すると、Laravelは個別のマイグレーションファイルではなく、生成されたSQLファイルを使ってDBを構築します。

# schema:dump後のmigrate:fresh
php artisan migrate:fresh

# → database/schema/mysql-schema.sql を読み込んでDBを構築
# → 個別のマイグレーションファイルは使われない

これにより migrate:fresh の実行速度が大幅に改善します。

6. 実務での活用シーン

マイグレーションファイルが増えすぎた時の整理

# 現状確認
ls database/migrations/ | wc -l
# 100以上あれば整理の検討を

# 全環境でマイグレーション済みを確認後
php artisan schema:dump --prune

新しい開発者のセットアップを高速化

schema:dump 済みのリポジトリでは、migrate:fresh が数十ファイルではなく1つのSQLファイルから構築するため、セットアップが速くなります。

複数DB接続がある場合

# メインDBをダンプ
php artisan schema:dump --database=mysql

# 分析用DBをダンプ
php artisan schema:dump --database=analytics

まとめ

やりたいことコマンド
スキーマをSQLファイルに書き出すphp artisan schema:dump
マイグレーションファイルも一緒に削除php artisan schema:dump --prune
特定のDB接続でダンプphp artisan schema:dump --database=mysql

--prune は便利ですが、全マイグレーションが適用済みであることを確認し、Gitにバックアップしてから使うのが鉄則です。焦って実行するとマイグレーションファイルが失われるので注意してください。

## Source

LaravelLaravel,MySQL

Posted by 千原 耕司