Jiemamyってなんぞ(3) - ER図とSQLの二重管理をやめよう

あー、これそのまんまっすね。

大抵のWebアプリは、DBが無いと動かない。つまり、そのWebアプリ用のDB初期化SQLがあるはずです。そこにはCREATE TABLEを中心に色々なSQLがズラッと並んでいる。

だがしかし。SQLって読みづらいんですよねー。IDEリファクタリング機能とかもないし…*1

あと、ER図ってのがあって、こいつは人間としては直感的で分かりやすい。ドキュメントとしてメンテナンスしなきゃいけない対象だったりもする。ER図エディタはそのER図から上記のSQLファイルを生成してくれたりもする。地豆もそう。

でも、DBを更新するたびに、ER図エディタを立ち上げて、SQLのエクスポートして、それをDBに流すの嫌だ。

そんなわけで、SVNリポジトリには「ER図データファイル」と、それをエクスポートした「SQLファイル」の両者がコミットされたりする。さてさて、DRY的にいかがなものか。DRYは有名だけどおさらい。Don't Repeat Yourself。1つの情報(データとかロジック)は1箇所に記録すべきであって、複数箇所に冗長に記録すべきではない、という考え方*2

ER図とSQLファイルは、表現方法は違うけど、どちらも「DBの構造をあらわす情報」であって、二重に管理すべきではない。二重管理はどんな混乱をもたらすか、その可能性には例えばこんなものが。どちらもありがちで、そして気づきにくいトラブルである。

  • ER図は更新したけど、SQLエクスポートを忘れたままコミットした
  • 新メンバーがER図の存在に気づかず、SQLを直接編集してコミットした


じゃーどうしたらいいんだ。まぁ「めんどくさくても毎回ER図エディタを起動する」か「DRY妥協」かどっちかですかね。

ここで地豆登場

簡単な事です。ER図データファイルをSQLに変換するロジックをどこからでも呼び出せるようにしちゃえばいいじゃないですか。そしたらわざわざER図エディタを立ち上げなくても済む。

で、DB環境を整えるのもビルドプロセスの一つだよね、という意識でJiemamy Projectでは、この「Jiemamyモデルファイル→SQLファイル」への変換を提供するMavenプラグインを提供*3しています。Jiemamyってなんぞ(2)でも出てきましたね。

これがあれば、「DBの構造をあらわす情報」はJiemamyモデルファイルだけで済み、DRY原則に従うことができます。

補足

ちなみに、Jiemamyモデルファイルを単純にSQLに変換するだけじゃなくて、他の変換も行いたい、変換だけじゃなくてモデル情報のコントロールも行いたい、なんて時には、Jiemamyのデータモデルを操作するAPI、「Jiemamy API」があります。Jiemamyってなんぞ(1)で紹介したもう一つの視点です。まぁこれに関して詳しくはまた別の機会に。

*1:俺の知る限り。カラム名変えたらINSERT文のカラム名も変わってくれるようなSQLエディタってありますかね。

*2:参考:http://ja.wikipedia.org/wiki/Don%27t_repeat_yourself

*3:今後、Mavenだけでなく、Antタスクにも対応する予定です。