symfonyでgraphvizを使ってDBリレーション図を図式化する

以前よりGraphvizには興味があったのですが
symfony1.2ではスキーマ定義を簡単なコマンドでGraphvizの図式化ができるようです。

以前書いた記事にてGraphvizaskeetのリレーション図を図式化を紹介しましたが、まさにそのまま私の望んでいた機能がsymfony1.2に組み込まれています。これは素敵。


私はEmacsを使っているので応用でEmacsと連動して使ってやってみようと思います。

schema.ymlから "〜.dot"ファイルを作る

graphvizが解釈できる"〜.dot"ファイルを作ります。
Emacsでもpng形式のファイルをつくることができます。詳細は後半で。


$ symfony propel:graphviz
これでsymfonyプロジェクトディレクトリ以下に

graph/propel.shema.dot
というファイルができます。

Graphvizのインストール



Graphvizを持っていない場合、
こちらからインストールしてください
Windows
http://www.graphviz.org/Download_windows.php


macOSX
http://www.pixelglow.com/graphviz/download/


Fedoraなどのディストリビューション
パッケージをインストールします


$ sudo yum install graphviz


〜.dotファイルを画像に変換

このままだと"propel.schema.dot"はdot言語で書かれたままです。graphvizに解釈させて画像にします。


アプリケーションから開く場合、そのまま"propel.schema.dot"ファイルをアプリから開いても見れます。
画像にして保存もアプリからできます。


コマンドで実行する場合は、dotコマンドを使って "〜.dot" ファイルを画像形式に変換してやります。


$ dot -Kdot -Tgif graph/propel.schema.dot -o graph/propel.schema.gif
-K はgraphvizがどんな構造にするかの指定してあげれます。
普段は"dot"で階層構造になっていますが"neato"などを指定してあげると放射状になります。


-T は画像形式です


-o は生成するファイルの名前です

無事画像ができれば、見ることができます。

*jobeetの例

Emacsでdotファイルを画像化してみる

Emacsで"〜.dot"ファイルを画像化して見れます。

Emacsgraphviz-dot-mode.elを入れる

以下のサイトから入手できます。
http://users.skynet.be/ppareit/projects/graphviz-dot-mode/graphviz-dot-mode.html
またはwgetコマンドで


$ wget http://users.skynet.be/ppareit/projects/graphviz-dot-mode/graphviz-dot-mode.el
$ sudo cp graphviz-dot-mode.el /usr/share/emacs/site-lisp
macOSXでアプリケーションのEmacsを使っている場合は

/Applications/Emacs.app/Contents/Resources/site-lisp/
以下にこのgraphviz-dot-mode.elを置きます。


次に、Emacsの設定ファイルに

;;graphviz mode
(load "graphviz-dot-mode.el")
(add-hook 'graphviz-dot-mode-hook (lambda () (local-set-key [f5] "\C-x\C-s\C-cc\C-m\C-cp")))
などど設定してあげます


あとはEmacsで"〜.dot"ファイルを開いて


C-c cpngファイルの"〜.png"を作ります。そして
C-c pで画像をプレビューすることができます。
あまりに画像のサイズが大きいとEmacsでは見れないようですのでプレビューはGraphvizを使うことをお勧めします。