Edited at

LaravelのMigrationファイルをまとめる


概要

Laravelで開発を続けているとMigrationファイルが溜まってくると思います。

Migrationにカラムの追加、変更、削除、テーブルの削除などが溜まっていくと、開発時などに不必要なMigrationの工程が増えてしまいます。

ある程度Migrationが溜まってきたら、どうせもうrollbackしないし、開発環境での実行とかのことも考えると、過去のMigrationをまとめたほうが、Migrationの実行時間が短くなって良いですね。

実際に開発中のプロジェクトでではMigrationにかかる時間が3分の2に減りました。


やり方

Migrations Generatorを使います。

Xethron/migrations-generator

最終のリリース2年前だし大丈夫なのか?と疑いましたが、ちゃんと動きました。

仕組みとしては今あるDBの情報をマイグレーションファイル化するという仕組みです。なので、自分たちがいたMigrationファイルを元にMigrationを作ってくれるわけじゃないです。

逆に言うと今までMigrationを使っていなかったプロジェクトでも、これを使えばMigrationでの運用に移行できます。


インストール

composer require --dev "xethron/migrations-generator"


実行

php artisan migrate:generate

これで今のDBの状態からMigrationファイルを作ってくれます。


過去のMigrationファイルとmigrationsテーブル内の履歴を削除する

過去分のmigrationsと内容が被るので、Migrationファイルとmigrationsテーブル内の履歴を削除します。


追記

細かく使ってみましたが、以下の点で問題があるので万能ではなさそうです。


  • tinyint型がlengthに限らずbooleanに変換される

  • created_at、updated_at以外のtimestamp型がdatetime型に変更される

これらは全て内部で使っているdoctrineの影響です。

doctrineではmysqlのtinyint型はbooleanに変換される、mysql固有のtimestamp型はdatetime型に変換されます。

ここらへんが問題ない場合はお使い下さい。