Graphvizでテキストから画面遷移図を自動生成してみる

ありがちな画面遷移図をGraphvizで生成してみた。画面遷移図のもとネタは「Webプログラミング2.0」に掲載されていたid:hyukiさんによるサンプルアプリから拝借。

dotのソースはこんな感じ:

digraph G {
    node [shape = record, height = .1,fontname="MSGOTHIC.ttc", fontsize=10]; 
    edge [fontname="MSGOTHIC.ttc", fontsize=8];

    /* 画面情報の定義 */
    PageTop     [label = "{<id>P0000 |<title>トップページ |<file>Root.pm}"];
    PageCreate  [label = "{<id>P0001 |<title>作成画面  |<file>Create.pm}"];
    PageEdit    [label = "{<id>P0002 |<title>編集画面  |<file>Edit.pm}"];
    PageList    [label = "{<id>P0003 |<title>一覧画面  |<file>List.pm}"];
    PageSearch  [label = "{<id>P0004 |<title>検索画面  |<file>Search.pm}"];
    
    PageUpload  [label = "{<id>P0005 |<title>アップロード画面  |<file>Upload.pm}"];
    PageView    [label = "{<id>P0006 |<title>表示画面  |<file>View.pm}"];
    
    /* 画面遷移定義 */
    PageTop     -> PageTop      [label=" clearHistory"];
    
    PageTop     -> PageCreate   [label=" linkCreate"];
    PageTop     -> PageList     [label=" linkList"];
    PageTop     -> PageSearch   [label=" linkSearch"];
    PageTop     -> PageUpload   [label=" linkUpload"];
    PageUpload  -> PageUpload   [label=" doUpload\n(POST)"];
    
    PageCreate  -> PageView     [label=" doCreate\n(POST)"];
    PageList    -> PageView     [label=" selectWord"];
    PageSearch  -> PageView     [label=" selectWord"];
    PageSearch  -> PageSearch   [label=" doSearch\n(POST)"];
    
    PageView    -> PageEdit     [label=" linkEdit "];
    PageEdit    -> PageView     [label=" doEdit\n(POST)"];
}

で、出力結果はこんな感じ:


所感

  • 特に装飾していないが、意外にきれい。
  • 同じものをVisioで作成するよりは上のdotファイルを作成するほうが簡単かな。特にレイアウトに悩む必要がないところがよい。TeXと一緒。(一方でレイアウトの微調整ができないというのは欠点でもある。これもTeXと一緒)
  • Visioよりはdotの方が後続工程での再利用性は高い。後工程でありがちな以下のようなことも容易に実現できるだろう:
    • 画面遷移に漏れがないか、画面一覧と照合したい
    • 画面の名称が変更になったので、一括置換したい
    • テストケース作成のためにすべてのリンクを抽出したい
  • あとは、コメントとして作成日や作成者、機能名などを決まった書式で記述しておけば、見栄えのよいヘッダをつけてHTMLを生成とかも簡単。
  • この程度のソースならExcelからの出力も簡単そう。