RailRoadでRailsのソースからER図を作成する

soraさんが http://sora2hs.blog70.fc2.com/blog-entry-438.html
Rails2.3の新機能を紹介していますが、その中で[railroad で吐き出した er 図]と言うのが出てきています。RailRoadというのをつかうとRailsのソースからER図を作成できるらしい。
"RailRoad"で検索してみたらMoongiftで紹介されていました。
http://www.moongift.jp/2007/07/railroad/

なんかRailsの新機能よりも衝撃を受けてしまったので自分の環境にもRailRoadを入れてみました。

RailRoadとは

RailRoad is a class diagrams generator for Ruby on Rails applications.

http://railroad.rubyforge.org/#whatis

Railsのソースからクラス図を作ってくれるものです。
こんな図が書き出されます。
(soraさんのところから引用)
http://18.media.tumblr.com/qMiboPzatla982bbeYlDkTojo1_400.jpg
Modelのクラス図を出力させれば、広い意味でER図が書き出せると言うわけです。
モデル、コントローラ、"acts as state machine" diagram(これが何を指すか良くわからない)の図を書き出すことが出来ます。

インストール

gem でかんたんにインストールできます。

$ sudo gem install railroad
Successfully installed railroad-0.5.0
1 gem installed
Installing ri documentation for railroad-0.5.0...
Installing RDoc documentation for railroad-0.5.0...


RailRoadが出力するファイルはDOTと言う形式で、普通の画像ビューアではみられないのでこれをSVGPNGなどに変換するためにGraphVizというツールを入れます。
自分の環境(CentOS5.2)の場合はdagリポジトリにパッケージが用意されていたのでそこからyumでインストールしました。

$ sudo yum install graphviz-devel graphviz-doc
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package graphviz-devel.i386 0:2.22.0-4.el5.rf set to be updated
--> Processing Dependency: libpathplan.so.4 for package: graphviz-devel
--> Processing Dependency: graphviz = 2.22.0-4.el5.rf for package: graphviz-devel
--> Processing Dependency: libcdt.so.4 for package: graphviz-devel
--> Processing Dependency: libgvc.so.5 for package: graphviz-devel
--> Processing Dependency: libgraph.so.4 for package: graphviz-devel
--> Processing Dependency: libcgraph.so.4 for package: graphviz-devel
---> Package graphviz-doc.i386 0:2.22.0-4.el5.rf set to be updated
--> Running transaction check
---> Package graphviz.i386 0:2.22.0-4.el5.rf set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 graphviz-devel          i386       2.22.0-4.el5.rf  dag                59 k
 graphviz-doc            i386       2.22.0-4.el5.rf  dag               2.4 M
Installing for dependencies:
 graphviz                i386       2.22.0-4.el5.rf  dag               2.5 M

Transaction Summary
=============================================================================
Install      3 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 4.9 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): graphviz-2.22.0-4. 100% |=========================| 2.5 MB    00:02
(2/3): graphviz-doc-2.22. 100% |=========================| 2.4 MB    00:02
(3/3): graphviz-devel-2.2 100% |=========================|  59 kB    00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: graphviz                     ######################### [1/3]
  Installing: graphviz-devel               ######################### [2/3]
  Installing: graphviz-doc                 ######################### [3/3]

Installed: graphviz-devel.i386 0:2.22.0-4.el5.rf graphviz-doc.i386 0:2.22.0-4.el5.rf
Dependency Installed: graphviz.i386 0:2.22.0-4.el5.rf
Complete!

使い方

railsアプリのホームディレクトリ(Rakefileとかがあるディレクトリ)に移動して以下のようなコマンドを実行します。

* railroad -o models.dot -M
Modelの図を'models.dot'に書き出す
* railroad -M | dot -Tsvg > models.svg
Modelの図をSVGフォーマットで書き出す
* railroad -C | neato -Tpng > controllers.png
Controllerの図をPNGフォーマットで書き出す
* railroad -h
ヘルプを表示する

http://railroad.rubyforge.org/#examples

SVGPNGに変換するときに使うdotとかneatoというコマンドはGraphVizのパッケージに含まれています。


ためしに絶対復習のModelを図にしてみたらこんな感じになりました。
http://gyazo.com/b45984d2fc82e6a0a8eb49bbd47feab8.png
こうして一枚の図でみるとソースでは見落としがちだった内容も見えやすくなるような気がします。