すがブロ

sugamasaoのhatenablogだよ

yard graphでクラス図を生成しちゃえ☆(ゝω・)vキャピ

yardは単なるドキュメンテーションライブラリではない!!

みなさん Yard はご存知ですか。ご存知ですよね。
RDocとか、Rubyソースコードに書くドキュメンテーションツールでYARD(http://yardoc.org/)ってありますよね。

プロジェクトのルートでyard docってやるとrdocで実行するのと同じようにドキュメントが生成されるのですが、それだけで満足しては行けないんだよ。

yard helpって打つとサブコマンドがいろいろ出てくるんだよ。

% yard help
Usage: yard <command> [options]

Commands:
config   Views or edits current global configuration
diff     Returns the object diff of two gems or .yardoc files
doc      Generates documentation
gems     Builds YARD index for gems
graph    Graphs class diagram using Graphviz
help     Retrieves help for a command
list     Lists all constant and methods. Uses `yard doc --list`
ri       A tool to view documentation in the console like `ri`
server   Runs a local documentation server
stats    Prints documentation statistics on a set of files

異なるバージョンのgem同士を比較するdiffとかもスゴい面白いんだけれど、今回は graph サブコマンドについてだよ。

で、yard graphとは

百聞は一見にしかずだよね。今回は https://github.com/esminc/tapp をクラス図にして出力してみたよ。

こんな感じにしてくれるよ。(思ってたよりも)ちゃんとクラス図になるよ。

クラス図の作成方法

yard で行うのは Graphviz 用の dot ファイルを作成するまでなんだよ。だから、まずは Graphviz をインストールする必要があるよ。

Mac(確認に使ってるOSはOSX Lion)ではhomebrew で簡単にインストールできるよ。

brew install Graphviz

インストールが終わるとdotコマンドが使えるようになっているはずだよ。これを片手にyardで dot ファイルを作成してくよ。
今回は tapp を入手する*1ところから書いているけれど、ソースコードがあればなんでも大丈夫だよ。

% git clone https://github.com/esminc/tapp.git
% cd tapp
% yard doc # yard graph をするにはドキュメンテーション化する必要があるよ。正確には .yardoc が必要になるよ。
% yard graph --full -f tapp.dot # --full をつけると、メソッド名やプロパティまで出力してくれるようになるよ。
% dot -Tpng tapp.dot  -o tapp.png # dot コマンドで画像化するよ

簡単だよね。

ちなみに

yard diff を使うとこんな感じだよ。

*1:ちょうど手軽なサイズだったのでtappにしたけど、特に意味はないよ