Closed7

ブランチの切り替えに伴うマイグレーション状態の修正

bisquebisque

Railsプロジェクトの開発で、ローカルのブランチを切り替える時に、DBのマイグレーション状態も修正する必要がある場合がある。どうしたら開発体験をよくできるか。

bisquebisque

既存のアプローチを調べる

手動切替

checkoutする前に db:rollback または db:migrate:down をする。
=> うっかり忘れてしまう事がある。

スクリプトで切替

手動で行うコマンドをまとめてスクリプトで実行する
https://gist.github.com/jonlemmon/4076864

DBを切り替えるパターン

https://naoty.hatenablog.com/entry/2015/01/19/003242

その他

マイグレーションファイルをgitの管理外の領域に保存しておいてrollbackできるようにするという発想
https://qiita.com/meganemura/items/5baeef3964aab3e3b608#gem-ghost_schema

bisquebisque

スクリプトがシンプルで良さそう。これをgit hookで実行できるようにしたらどうだろう。

bisquebisque

Git hookを調べる

https://git-scm.com/book/ja/v2/Git-のカスタマイズ-Git-フック

実行タイミングとして checkout成功後( post-checkout )はあるけど、checkout実行前はないので、ロールバックさせるタイミングがない。

git checkout にaliasを当てて、スクリプトを実行した後本当の git checkout を実行すという方法も考えられるけど、1つのプロジェクトに対して適用したいのにシェル全体でaliasを当ててしまうことになるのがいまいち。

bisquebisque

スクリプトの手動実行忘れ防止に post-checkout でなにかできるだろうか。

マイグレーション状態に変更があるかどうか判断するのは難しそう(commitせずstashにする場合もあるだろうし)なので、毎回警告メッセージを出すくらいか。

そもそもstashしちゃってたらスクリプト使ってもロールバックできないという問題もある。

このスクラップは2022/06/16にクローズされました