graphvizでの図の表現(1) クラス図とDFD
開発ドキュメントは、折角書いてもアップデートされなかったり、共有フォルダのどこにあるかわからなくなったりして、意味がなくなってしまうことが多いので、最近はPukiWiki上に表現することにしています。
文章や表はそれでもよいのですが、込み入った図などは従来はVISIOで描いていました。
しかし最近はgraphvizに慣れてきたのと、PHPで色々怪しげなPukiWikiプラグインを書くようになったので、図もPukiWikiで表現することが多くなっています。
今のところ
- DFD
- クラス図
- ユースケース図
- ステートチャート
- ERD
あたりはPukiWikiのgraphvizプラグインを使って描けるようになりました。
また、
- シーケンス図
については、JAVAでシーケンス図が描けるツールがあるので、それを独自プラグインから呼び出すことで、描けるようになりました。
ここではとりあえずDFDとクラス図の例を示します。
※本当はもうちょっとちゃんとしているのですが、会社の物は持ち出せないので自宅で間に合わせで再現しました。
ソース
digraph { rankdir="LR"; subgraph clusterClass { label="クラス図"; node UML:Class; ActionServlet [label="ActionServlet||+doGet()"]; HttpServlet [label="HttpServlet||+service()\n+doGet()"]; Action [label="Action||+execute()"]; MyAction [label="MyAction||+execute()"]; ActionForm [label="ActionForm||+validate()"]; MyForm [label="MyForm|id\nname|+validate()\n+getId()\n+setId(id)\n+getName()\n+setName(name)"]; ActionServlet -> HttpServlet UML:Extends; MyAction -> Action UML:Extends; MyForm -> ActionForm UML:Extends; MyAction -> MyForm UML:Uses; }; subgraph clusterDFD { label="DFD"; "データ" DFD:Entity; "照会" DFD:Process; "登録" DFD:Process; {rank=same;"照会";"登録";} "登録" -> "データ" -> "照会"; }; };
実は、上のソースは純然たるDOT言語(graphvizの言語)ではなくて、graphvizプラグインでマクロを定義して、それを使っています。(UML:とかDFD:ではじまるやつ)
そのへんの記述はまたいずれ。