【Laravel】artisan schema:dumpの使い方|マイグレーションファイルを整理する方法と–pruneの注意点
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 / MariaDB | database/schema/mysql-schema.sql |
| PostgreSQL | database/schema/pgsql-schema.sql |
| SQLite | database/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
実行されること
- スキーマをSQLファイルに書き出す
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


