Flyway は複数人での開発に向かないという誤解について
“データベースマイグレーションについて考えないといけないことや諦めないといけないことが結構あるでよ”
http://t.co/BYna6w5luj
期待して記事見たが、複数人開発時におけるバージョン番号の衝突について説明がなかったのが残念。紙面が限られてるししゃあない。
— 早すぎる最適化オジサン (@makotokuwata) 2014, 12月 29
flyway って、V1_ みたいな prefix をつけるけど、integer を increment するのって、ブランチきって平行で開発してる場合どうなるの?という気がしている
— tokuhirom (@tokuhirom) 2014, 7月 30
flywayのマイグレーションについて見てたけど、これ、バージョン番号をファイル名につける感じなのですかね。まだよく見てないが。Railsのマイグレーションと比べて複数人開発に強くないですねぇ。
— でこくん (@dekokun) 2013, 3月 26
というように、Flyway は複数人開発に向かないという噂をたまに聞くのですが、多分誤解です。
誤解が生まれるのは公式ドキュメントで Flyway のマイグレーションスクリプトのファイル名として、V1__Add_new_table.sql
みたいなファイル名が例に出されており、これが V2__
、V3__
のような名前をつける必要があるという印象を与えるためかと思われます。
ドキュメントを良く読むと、バージョンのルールは
- One or more numeric parts
- Separated by a dot (.) or an underscore (_)
- Underscores are replaced by dots at runtime
- Leading zeroes are ignored in each part
なので、もう少し柔軟です。だから rails のようにタイムスタンプベースのファイル名付けちゃえば良いです。
sql ├── V20150127114055__create_user_table.sql ├── V20150127114322__add_country_column.sql └── V20150127114323__add_age_column.sql
このようにタイムスタンプベースのバージョン付けを行うとブランチをマージしたときなどに順番が狂うという問題が発生しますが、 outOfOrder
という設定があるのでこいつを on にしてやれば OK です。
WEB+DB PRESS VOL.84 の Flyway の記事にもなかったので書いてみました。