チーム開発において、データベースのスキーマ変更をうまく同期できなくて問題を生じさせることがある。何かいい方法がないか調査中。
機能追加などを複数の人間が同時並行で行っている際などに、データベースのスキーマも複数の人間がそれぞれ変更を行うことがある。
変更した各自は、SQLの変更履歴をバージョン管理下にあるファイルに追記、コミットしている。
その変更内容を追って、各自が他者によって行われた変更内容を適宜適用していけば通常問題は生じないのだが、手作業による適用であるがゆえに完璧ではなく、時折、適用漏れなどが発生したりして不具合が生じてしまう。
この部分を自動化できるツールがデータベースマイグレーションツールと呼ばれるもので、最近のモダンなフレームワークには標準で付属しているものもあるが、いままで利用する機会がなく知識がなかったので、Zend Frameworkで構築しているプロジェクトで使えそうなものを調べてみた。
- phpmig
https://github.com/davedevelopment/phpmig
フレームワークの依存が少ないマイグレーションツールとのこと。
DB接続にZend_Dbが使えるようだ。 - PHPMigrate
https://github.com/kohkimakimoto/phpmigrate - Dbup
https://brtriver.github.io/dbup/ja/
downコマンドがなくupだけのDBマイグレーションツール。 - Evolutions
Ruby on Railsに付属するツール。 - Flyway
https://flywaydb.org/
Javaで書かれたDBマイグレーションツール。
ベタのSQLを書くことで管理できるよう。
試すのはまずはここらへんかな。 - Migr8
https://github.com/kwatch/migr8
Rubyで書かれたDBマイグレーションツール。
外部ライブラリ不要でファイルひとつだけで動作。
探していると、まだまだたくさんあってどれを選ぶか悩みますね。
開発中のプロジェクトのバージョン管理とどう連携させるかが難しそうで、運用ルールを決めるところからしっかりやる必要がありそうです。もう少し研究してみます。
チーム開発といえば、モダンな開発フローにキャッチアップせねばと思いまして
「チーム開発実践入門」
https://gihyo.jp/book/2014/978-4-7741-6428-1
を読んでますが、なかなか勉強になります。