scheman-rails

沖縄開発合宿2日目: Rails用のDBスキーマ管理ツール scheman-rails を開発した。

使い方

  1. db/schema.sql に理想的なスキーマをSQLで記述する
  2. rake db:schema:diff で現在のDBのスキーマとの差分を確認する
  3. rake db:schema:apply でSQLを適用して差分を埋める

基本的にはこれの繰り返しで、開発者は理想的な db/schema.sql を保つことに集中していれば良いという世界観。 DBスキーマどういう構成だったったっけという場合にもこのファイルを見れば良いのでちょっと楽。 導入時に既にDBが存在するときは、いちいちdb/schema.sqlを書くのはだるいので適当に mysqldump --no-data --compact の結果を貼り付けとけば良いかもしれない。

解決されそうな問題

この辺が解決できそう。

  • 複数ブランチマージ時のMigrationファイルの適用順序に起因する問題
  • MySQL固有の構文を使おうとして結局DSLの中に素のSQLが混在してだるい問題

Rails用につくった理由

強い理由は特に無し。 既存のDBのスキーマを参照するためにDBへの接続情報 (例: host, username, password, database) が必要になるが、 Railsはconfig/database.ymlにこれを書く規約になってるので、その前提であれば簡単にDBへの接続情報を参照できるから。

問題が出るとしたらこの辺

  • この構文パースできなくて例外出てるんだけど → 構文解析器に修正の必要あり
  • 明らかに差分あるはずなのに差分として抽出されないんだけど → 差分抽出器に修正の必要あり
  • 複数DB扱うときどうするの → db/schema.sql で複数DBのスキーマを扱うか要検討