今思う、ERDツールに欲しいもの

決定打が...

ひとむかしまえにくらべて、
ずいぶんとERDツールは発展してきたように思えます。
特にフリーのツール、安価なツールが機能を付け、
業務で利用するのに現実的なレベルになってきたかなと。

ただそれでも、やはり「もうこれでいいでしょ」って
言えるツールがないかなと感じています。一方で、
「あともうちょいで、もうこれでいいでしょ」って
感じのツールはあるかなと。
よさそうなものでも、50や100テーブルを超えてくると、
ダメになってしまうものもあります。

ちょっと、ERDツールへの今思う要件をまとめてみました。
代表的なものだけを列挙しています。

ERDツールの要件の羅列

#
# A. 最低限の要件
#
A-1. FK線が90度の折れ線じゃなく直線であること
A-2. FK線でカーディナリティ(多重度)が表現されていること
A-3. DBMSごとのDDLが出力できること
A-4. テーブルの背景色が付けられること
A-5. ノート(注釈)が付けられること
A-6. 論理名と物理名の同時表示 (or ショートカット切り替え)
A-7. "論理名 + 説明" のDBコメントDDL出力
A-8. テーブルのカラム名をダブルクリックですぐにカラム編集
A-9. 上向きであること (今はダメでも改善されるムードが欲しい)
A-10. テーブル数が多くなっても遅くならないこと
A-11. とにかく細かい面でカラム定義にストレスがないこと
A-12. とにかく細かい面でFK定義にストレスがないこと

#
# B. あったらうれしい要件 (代表的なもの)
#
B-1. ERMaster の検索機能
B-2. MySQL Workbench の(選択テーブルの)FK線ハイライト
B-3. ドメイン (論理型、辞書機能と実現は様々)
B-4. 共通カラムの定義 (新規テーブル時のデフォルトカラム)
B-5. 図のままHTML出力

【追記 (2014/04/18)】
ClubDB2で話題になったので、A-1 について補足します。
直角線(垂直平行線)だと、テーブル数が多くなってきたときに、
リレーション線がどこにつながってるのか、
わけわからなくなるんですよね。
一瞬、綺麗に見えてよいのかもですが実際には役に立たない。

斜め一直線だと、テーブルから出発した線の角度から
なんとなくどのテーブルにつながってるのかが
だいたい想像できて、意外に読みやすいんです。
地味にうれしいのです。
なので、何気に最初に来る要件にしています。

EA (EnterpriseArchitect)

自分がよく利用している EA (EnterpriseArchitect) では、
"A" はほとんど網羅されています。
 -> UMLモデリングツール Enterprise Architect

意外に A-7 ができないかな!? あと、細かいところでは
A-11, A-12 も改善の余地はたくさんあるんじゃないかと。

ただ、"B" が、かなり弱いところ。他のフリーのツールが
この辺を押さえていたりするので、安価でも有償の EA はちょっと
苦しい立場になります。UML は EA だけど、ERD は別のもの、
って悲しい感じがしますが、そういう現場は実際にあったりします。

B-1、B-2 は大きなERDになると本当に便利な機能。
EA にぜひ欲しい機能です。(他のツールもぜひ真似て欲しいところ)

B-3 は「データベースモデリング拡張アドイン」を使えば
できるようになるようですが、個人では買っちゃいたい感じですが、
不特定多数の人に奨めるっていったときに、コストの面で要相談に
なるかもしれません。他の機能が全てこの拡張アドインで実現できる
とかであれば説得力は増すかもしれませんが...

B-4 は地味ながら欲しい機能。毎度毎度同じカラムを追加するのは
精神的にも指体力的にも疲れます。EAだと、既存のテーブルを
ダミーコピーして、プロジェクトブラウザ上でドラッグ&ドロップ、
ダミーは削除ってしてましたが、まあちょっと苦肉の策な感じです。

ただ、B-5 は EA の真骨頂。本当に素晴らしいの一言です。
もし B-1 がHTML上で可能になったらスペシャルです。
(地味ながらHTMLの拡張子のデフォルト .htm なのはなぜ!?
 拡張子の設定って .html だけ調整してたりするから、出力時に
 .htm を .html に変更し忘れると開くとき意外にうっとおしい。
 まあ、一度 .html にすれば記憶されますが最初だけ)

細かい点では、FK線の表示設定がデフォルトで表示され過ぎ。
FK名とPK名まで出ていますが、そこまで要りません。
カーディナリティの表現とFKカラム名くらいで十分です。
できれば、デフォルトでそうなってほしい...
他にも細かい点で惜しいと思えるところがあるかな。

あと、これは仕方ないことですが、EA独自の操作のクセがあります。
例えば、テーブルを削除(delボタン)しても図上から消えただけで
プロジェクトブラウザ上には残っていたり(ctrl + D なら完全削除)、
FK線を削除してもFK情報は残っていたり、コピー後のペーストは
ctrl + shift + V と shift が必要だったりと、ほとんど初心者は
かなり高い確率で戸惑います。まあ慣れればって感じだけど、
ちょっと印象悪く受け取られちゃうことも...
(ただ、FK線などは設定で色々と調整もできるようですが)

コスト面も含めた総合点では、明らかに EA かなと感じては
いるのですが、高機能なフリーのERDツールの台頭で悩みます。
もうちょいだけレベルアップすれば、
「もう EA でいいでしょう」
って言い切れそうなのですが(言い切りたい)。

#
# 追記 (次の日):
# 拡張アドインは、上向きなツールのようなので、
# 今後期待したいところです。というか今の時点で、
# 既に解決されている問題もあるかもしれないので、
# ちょっと個人で試してみたいなと考えています。
#

【追記 (2014/04/18)】
だいぶ時が経ちました。
友人から、アドインツールの DBMode が
どんどん良くなっているという話を耳にしました。
機会があったらぜひ試してみたいですね。

ERMaster (Eclipse Plugin)

ERMaster (Eclipse Plugin) は、オープンソースながら
"A" も "B" もかなり網羅していて、驚愕のツールです。
 -> SourceForge - ERMaster

ある面では有償の EA よりも優秀な部分もあります。
A-6 はなんなくできるし、B-1 は本当に素晴らしい。
B-3 もちょっとクセはありますが、デフォルトで利用可能。

ただ、二点を除いては...

A-10 が全然だめです。テーブル数やカラム数が多いと、
とてつもなく動作が遅くなります。我慢できるレベルじゃない
くらい遅くなったりします。

A-9 がよくわからない。コミットログは最近もあるようですが、
探しても開発者コミュニティがいまいち見えてきません。
フォーラムはあるようですが、全然活発じゃありません。

この二点さえしっかりしていれば...惜し過ぎる

AmaterasERD

AmaterasERD は、"A" も "B" もなかなか満たしていませんが...
 -> ProjectAmateras - AmaterasERD

ただ、二点の良いところ。

o フリーで軽量、テーブル数が増えてもOK。
o ソースがシンプルで追いやすい (機能不足の裏返しですが)

これで、A-9 であれば希望はあるのですが、
残念ながらそこまで活発な感じは見受けられません。
それでもパッチを送れば取り込んでくれます。
(その節はありがとうございました)

個人的にはポテンシャルの高いツールだと思っていますが、
どうしても現状では他のツールとの比較は避けられません。

さいごに

ということで、いつの時代もERDツールで悩むものですね。

ドメインとかわかりやすいところは別にして、印象的なのが、
それぞれのツールがそれぞれ独自の良い点をもっているところ。
B-1, B-2 が代表的なもので、細かいところでは他にも色々。
全部出してまとめたいですが、それをやるだけで「仕事」と
言ってもいい作業量が発生するのでボランティアではちょっと...

逆に言うと、「ERDツールの要件」というものが世の中的に
いまいち確立されていないとも言えるかも。それぞれの
アドリブでアイディアを出しあっているような状態。
「高価なERDツール or ERDを書かない」という時代が長く続き、
ようやく安価 or フリーのERDツールが出てきたということで、
ある意味ERDツール市場の歴史は浅いと言えるかもしれません。

「ERDツールの要件」というのをいかにキャッチして、
ツールに反映させていくか、それができたERDツールが
DB設計者の良きパートナーとなっていくのかなと。

【追記 (2014/04/18)】ERMaster-b 使ってます!

このエントリを書いてから何年も経ちましたが、
ERMasterのつらい点が改善された
「ERMaster-b」
なるツールが公開されています。

// ERMaster-b
https://github.com/naoki-iwami/ermaster-b

実際に現場で使っていますが、非常に快適です。
100, 200テーブルでも普通に使えています。
ここがクリアされると、無料で使えるツールの中では
ERMasterに匹敵するものがないかも!? とは感じています。
また、githubで管理されているので、
自分で改善してプルリクすれば取り込んでもらえるかも!?
(jfluteが実際にプルリクしてマージしてもらっています)