Railsのマイグレーションファイルをまとめる
Railsで、テーブル構成を変更するたびに作成するマイグレーションファイルが増加しまくるので、
何か良い方法はないか調査した。
二つみつけた。Squasherが手軽な感じがする。
Squasherを使ってまとめる方法
お手軽なやつ。ただしdry runは対応していない模様。
まずはGemの取得。いつも通りGemfileに書いて、installする。
gem 'squasher'
bundle install
例えば、db/migrateディレクトリに以下のようにマイグレーションファイルがあったとする。
tomy2002:~/workspace/db/migrate $ ls 20150818134346_create_journals 20150918153823_add_column_to_journals
テーブル作成とカラム追加のマイグレーションファイルがそれぞれ存在する。
これらをsquaserで1つにまとめる。
tomy2002:~/workspace/db/migrate $ squasher 2016
上記で、2016/01/01以前に作成されたマイグレーションファイルを一つにまとめる。
年だけでなく、月・日付単位まで指定できる。(yyyy/mm/dd形式)
まとまった結果が以下のとおり。
tomy2002:~/workspace/db/migrate $ ls 20160207060023_init_schema.rb
あとはこれに対してrake db:migrateすればOK。
Ridgepoleを使った方法
rails標準のマイグレーションを使用しない方法。
このツールでは、DBスキーマはSchemafileと呼ばれるファイルに
ActiveRecord Schemaと同じDSLで記述しておく。
create_table "articles", force: :cascade do |t| t.string "title" t.text "text" t.datetime "created_at" t.datetime "updated_at" end
カラムを修正する場合、Schemafileの定義を修正し、以下のコマンドを叩くだけでOK。
ridgepole -c config.yml --apply
ツールが自動的に変更点を識別し、マイグレーションを行ってくれる。
カラム名をリネームしたり、外部キーを追加したりもできる模様。