graphvizでの図の表現(1) クラス図とDFD

開発ドキュメントは、折角書いてもアップデートされなかったり、共有フォルダのどこにあるかわからなくなったりして、意味がなくなってしまうことが多いので、最近はPukiWiki上に表現することにしています。

文章や表はそれでもよいのですが、込み入った図などは従来はVISIOで描いていました。
しかし最近はgraphvizに慣れてきたのと、PHPで色々怪しげなPukiWikiプラグインを書くようになったので、図もPukiWikiで表現することが多くなっています。
今のところ

あたりはPukiWikigraphvizプラグインを使って描けるようになりました。
また、

  • シーケンス図

については、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:ではじまるやつ)
そのへんの記述はまたいずれ。