sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

MySQLからER図を作ってみました

私が今手がけているプロジェクトは、よそからソースコード一式を譲り受けたものをベースとしており、いわゆる「ソースが仕様書」状態。

ドキュメント類が非常に少なくて解析作業に手間を取られていますし、 DDLの並んだテキストファイルをエディタで修正し、それをDBに反映していくという、一体何十年前の開発手法やねんという習慣がずっと繰返されております。

これまで、リリース最優先でドキュメント類はあまり整備していなかったのですが、残り日数も300日切ってますし、後の人のためにちょっとはマシな環境を残しておいてあげないとということで、テーブル定義書兼ER図を整備することにしました。

テーブルコメントとカラムコメント

さて、このDDLのテキストファイル、見事にテーブルやカラムにコメントが付いていません。

create文の前に

##########
# テーブル1
##########

とか、各カラムのお尻に

column1 integer, # カラム1

が入っているだけという有様。

とりあえず create文のお尻に comment=''を追加して、先頭のテーブルコメントをコピペ。200個ほどなので、確認も兼ねて手作業で対応。

問題はカラムコメント、数千行を手作業でなんてやってられませんので、 標準入力からテキストを受け取り、¥s*#でなく、"comment" が入ってなくて、かつ行末に # ほげ な行なら ほげを切り出して comment = 'ほげ' を埋め込むフィルタプログラムを作成して対応しました。

私がまともに扱えるスクリプト言語といえばrubyだけなのですが、C#の勉強も兼ねてフィルタを書いてみました。結局のところ正規表現が肝ですし、Win10のbashがかなり便利なのでrubyの方が楽ぽいです・・・

ER図生成ツール

世の中には、DBのスキーマからER図を作ってくれる便利なツールがたくさん存在します。私のお気に入りはこれ。

データベース設計ツール SI Object Browser ER

有償ですが、Oracle/SQL Server/MySQL/PostgreSQL等 に対応しており、テーブル設計を行うのがかなりラクになるツールです。

今回もこれを使う予定だったのですが、Unicodeなテーブルには最新のVer.8が必要と判明。あいにくライセンスを持っているのはVer.5ですし、一本10万と結構なお値段なため、他のツールを探すことにしました。

プロダクト 説明
A5:SQL Mk-2 汎用の軽量高機能なSQL開発ツール。フリーソフトです。
MySQL Workbench MySQLオフィシャルのツール。MySQLの起動や停止といった管理もできます。
ERMaster eclipseプラグイン

ざっと調べたところ、この3つが高評価。A5:SQLは以前ちょっと使ったことがあったので、WorkbenchとERMasterを試してみました。

Workbench

確かに便利なのですが、SI ObjectBrowser ER みたいに論理名と物理名の切り替え表示もできず、各テーブル定義の編集も微妙に操作性が悪く、期待したほどではないなという印象。もっと使いこなすことができれば便利なのでしょう。

ERMaster

うーん、カラムコメントは綺麗に取り込めますが、テーブルの論理名がダメ。自動翻訳を切っておかないと、中途半端に翻訳されちゃったりもします。

結論

テーブルの論理名が取り込めませんが、200個程度のテーブルでも苦もなく動きますし、ERMasterを使うことにしました。

テーブルの論理名はぼちぼちと入れていくことにします。

そんなことより、今後DDLからER図を正とする体制に切り替えるという一大事業が 始まりますので、WorkbenchのERDと実際のスキーマの差分を出す機能を使って、

  • 編集したDDLから作ったコメント入りのスキーマからWorkbenchでER図を作成し、本番稼働中のスキーマのコピーと比較
  • コメント入りのスキーマをERMasterでインポートし、それをDDLでエクスポート
  • ERMaster由来のDLLで作ったスキーマをWorkbenchで検証

というまどろっこしい手順をたどって、正当性を担保しつつ、DDLファイルの管理からさよならしたいと思います。


ドキュメントは将来の自分に向けてのメッセージですし、たとえ有償であっても管理コストを下げてくれるツール類は積極的に取り入れるのが良いと思うのですが、忙しいとなかなかそうもいかないもんですよね・・・とは言っても、トータルで考えると安上がりになることが多いので、しんどくてもこういった作業は積極的にやっていこうと思います。