はじめに
こんばんは。
今回はlaravelのマイグレーションsquashを試してみました。
マイグレーションの圧縮 アプリケーションを構築していくにつれ、時間の経過とともに段々と多くのマイグレーションが蓄積されていく可能性があります。これにより、database/migrationsディレクトリが数百のマイグレーションで肥大化する可能性があります。必要に応じて、マイグレーションを単一のSQLファイルに「圧縮」できます。利用するには、schema:dumpコマンドを実行します。
本題
とりあえず現在の状況はこんな感じです。
# php artisan migrate:status +------+-------------------------------------------------------------+-------+ | Ran? | Migration | Batch | +------+-------------------------------------------------------------+-------+ | Yes | 2022_07_03_000001_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_115334_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_002226_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_162746_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_173628_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_145946_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_171927_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_231312_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_150115_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_232721_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_123222_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_000000_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_125829_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_130608_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_163742_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_182736_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_115056_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_111118_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_205804_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_180337_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_152910_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_201730_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_201142_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_150301_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_140639_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_140717_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_165047_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_171820_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_160136_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_160253_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_162213_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_234404_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_100606_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_100645_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_145901_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_013828_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_165741_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_101855_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_152852_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_190354_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_190424_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_155606_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 1 | | Yes | 2022_07_03_145650_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 2 | | Yes | 2022_07_03_145821_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 2 | | Yes | 2022_07_03_170137_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 4 | | Yes | 2022_07_03_104338_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 3 | +------+-------------------------------------------------------------+-------+
実行するコマンドはこちら
$ php artisan schema:dump
ダンプを取りつつ現在のマイグレーションファイルを削除してしまうコマンドはこちら
$ php artisan schema:dump --prune
今回は、後者のコマンドを実行します。
# php artisan schema:dump --prune Database schema dumped successfully. Migrations pruned successfully.
実際にマイグレーションファイルが削除されているか確認します。
# ls -la database/migrations ls: database/migrations: No such file or directory
ディレクトリごとなくなっています。 では、取得したdumpファイルがどこにあるかというと
# ls database/schema/ mysql-schema.dump
migrations
というディレクトリが削除されて schema
というディレクトリが作成されて、その下に配置されています。
そしてDBの再構築をしてみます。
# php artisan migrate:fresh Dropped all tables successfully. Migration table created successfully. Loading stored database schema: /path/to/database/schema/mysql-schema.dump Loaded stored database schema. (159.91ms) Nothing to migrate.
ダンプしたファイルが読み込まれています。
終わりに
何年も続いているプロジェクトとかはこういうのあると便利ですよね。
他のフレームワークとかでもないのかなぁとか思ったんですが、cakephpはなかったです。
提案はされてみたみたいですが、結局コマンドでよくね?ってなったみたいですね。
現場からは以上です。