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図エディタを起動する」か「DRY妥協」かどっちかですかね。
ここで地豆登場
簡単な事です。ER図データファイルをSQLに変換するロジックをどこからでも呼び出せるようにしちゃえばいいじゃないですか。そしたらわざわざER図エディタを立ち上げなくても済む。
で、DB環境を整えるのもビルドプロセスの一つだよね、という意識でJiemamy Projectでは、この「Jiemamyモデルファイル→SQLファイル」への変換を提供するMavenのプラグインを提供*3しています。Jiemamyってなんぞ(2)でも出てきましたね。