たなかこういちの資料室

システム開発に携わる筆者があれこれ試したことや学んだことについてのまとめ

ERD→DDL→Flyway Migrationファイルというプロセスを回したい

やりたいこと
 
下記プロセスを回したい。
 
  1. テーブル定義を、ER Diagram描きながら設計&集中管理する。
  2. ERDによる成果物は、デプロイのために、最終的にFlyway migrationファイルに仕立てる。
 
このプロセス実現には下記の考慮事項がある。
 
  • ERDツールは一般にDDLスクリプトを生成できるが、一般にそれは全体を再構築するような、全体をDROP & CREATEするようなもので、DB migrationプロセスにそのまま適用できるようなものにはならない。デプロイターゲットのDBインスタンス実体との差分を得られる必要がある。
  • そのままデプロイに適用できるDDLスクリプトを生成したいので、ERDツールは、ターゲットDBMSであるMySQLの固有オプション類も扱える必要がある。
 
ERDツールの評価ポイント
 
前節の「やりたいこと」を支援してくれるERDツールを探したい。ERDツールに対して以下のような機能要件をあげて、これらがどれだけ満たされているかで評価することとする。
 
【大項目】
(0) macOS上で動かせる。
(1) ERDが描ける。
(2) ERDからDDLをジェネレートできる。
(3) DBインスタンス実体から、ERDをリバース生成できる。
(4) 作成したERDに基づくスキーマ定義と、指定したDBインスタンスの現状のスキーマ定義を比較して、差分をALTER TABLEスクリプト(=migrationスクリプト(の元ネタ))として生成できる。
 
【小項目】
(1-1) 論理名(日本語説明名)と物理名(CREATE TABLEに用いられる識別名)の両方を併記して扱える。
(1-2) ERD上で、テーブルをグループ化して、グループ毎の表示非表示を制御できる。
(1-3) カラムの型で、BIGINTとINTを区別して使える。
(1-4) カラムの型で、DATETIME(6)を使える。(※DATETIMEに精度を付与できる。)
(1-5) カラムの型で、AUTO_INCREMENT、その他MySQL固有オプションを指定できる。
(2-1) DDLのテーブルコメント、カラムコメントに、論理名(日本語説明名)を出力できる。
(2-2) CREATE TABLE文にMySQL固有オプションを付加できる。
 
(1-1)と(2-1)は、"設計"作業として語彙の整備も行いたいので、ドキュメント上の用語(日本語説明名)とコード上の識別子との対応が管理できる仕組みが欲しいところから上げている。
(1-2)は、大規模化する場合、必要である。
(1-3)〜(1-5)と(2-2)は、ターゲットDBMSであるMySQLの具体的なオプションを指定して、生成されたDDLをそのままデプロイへ適用できる精度のものとしたいところから上げている。
 
各ERDツールの評価
 
今回調べたERDツールとその評価は下記の通り。(※見出しは各ツールの公式サイトへのリンクとなっている。)
 
 
《総評》
・機能としては、評価ポイント(4)以外はPASSしている様子。
・ただWindowsアプリなので、Mac前提だとやはり運用には難ありか。。
 
〜・〜
 
Windowsアプリである。Windows上でのERDツールのデファクト標準の地位を占めており、機能性としてはおそらく一番充実している。よって、リファレンスとして評価対象とした。
 
Windowsアプリなので、そのままではmacOS上で動かない。ので、Wineという処理系を用いて動かした。Wineについては参考までに下記記事にて。
 
 
Wine上で動かすことはできたが、いくつかの制約やクセがあった。個人プロジェクトやワンショットのタスクにはよいと思うが、今回目的の「やりたいこと」としては、業務上の持続性の求められるプロセスの運用ツールをWineに依存させるのは、違うと思った。他の選択肢が皆無だったら戻ってくる意味はある。
 
 
《総評》
・直ぐに落ちてしまい、まともに動かせなかった。残念。
 
〜・〜
 
公式サイトの機能説明によると、今回調べた範囲で最も充実した機能がありそうだった。評価ポイントの全てを満たしそうで期待していた。
 
Javaアプリとして実装されていた。JREは、Visual Paradigmのパッケージが内包していて、それを使う様子。
 
実際に動かすと、起動後、何か操作すると直ぐに落ちてしまった。どうにも安定動作しなかったので、残念ながら評価対象外。
なお、確認環境は次の通り。:
 
- macOS Mojava 10.14.6
- Visual Paradigm 16.1 (20200630bc)
 
 
《総評》
・MySQL固有オプションをハンドルするのが出来なさそう。リバースDDL生成では、MySQL固有型をうまく拾ってくれない様子。
 
〜・〜
 
UML系モデリングツールとして、一定の評価がある。が、ER Diagramについてはどうか?
評価ポイント(1-1)は、表示がトグルで並べて表示ができないが、まあOK。
(1-2)は、ER図を複数用意して、含めるテーブルを選択することで、概ね実現できそう。
(1-3)、(1-4)は、カラムのデータ型をユーザー定義できるので、OK。
(1-5)と(2-2)が出来なさそう。
(2-1)はできるが、CREATE TABLE文埋め込み形式ではなく、外出し形式だった。それでも、たぶん問題ない。
(3)はサポート対象外のオプションプラグインで実現されるが、MySQL固有型があまり上手く拾えてなかった。
(4)はできない。
 
 
《総評》
・調べた範囲で唯一、評価ポイント(4)を実現できた。
・評価ポイント(1-1)、(1-2)がNG。MySQL固有事項への対応は(当然ながら)完璧かもしれない。
 
〜・〜
 
実はERDを描けたのと、今回調べた範囲で唯一ERDによるスキーマとDBインスタンスとの差分をALTER TABLEスクリプトとして吐き出せる機能を持っていた。
 
MySQL特化なので当然かもだが、(1-3)〜(2-2)は問題なし。(※(2-1)は要はコメントは書ける、ということ。ただコメントをERDに表示できなかったので、(1-1)はNGとなる。)
 
(1-1)と(1-2)がNGなのは、ERモデリングとしては良くないので、もっぱら(4)の点を実現するツールとして用いることとする。(※他のツールが吐き出すDDLが"DROP & CREATE"でもよい、ということ。)
 
 
《総評》
・良い。
・ただし、((4)を除いて、)(1-2)が△評価、(1-4)がNG。ここをどうみるか。
 
〜・〜
 
Eclipseプラグインとして実装されている。かつて市場で一定の地位を占めたが、現在は保守がとまっている様子。とはいえ機能性は十分で、現時点(※2020年6月21日)の最新Eclipseで動作することも確認できた。
 
(1-2)については、矩形範囲でのみグループ化できる。(1-4)については、DATETIMEへの精度指定ができなかった。これら以外のMySQL固有事項への対応は、リバース生成含めて良好。
(1-2)、(1-4)に目をつむることができるなら、採用できる。
 
 
《総評》
・良い。
・ただし、「ERモデル」を扱うのではなく、あくまでDBインスタンス実体に対する操作、という仕立ての様子。
・(1-1)、(1-2)もOK。MySQL固有事項への対応も良好。
 
〜・〜
 
Eclipseプラグインとして実装されているが、Eclipse本体部分も含んだ単体アプリとして配布されている。
 
他のツールと違うのは、「ERモデル」を扱うのではなく、あくまでDBインスタンス実体に対する操作、となっている様子。ER図も、レイアウト保存はできるが、それでもDBインスタンスに紐づいて管理される様子。
以上の点さえ踏まえれば、機能性は(Macネイティブに動くものの中で)一番よさそう。
 
(4)はできない。
 
◆以上