Q&A:Doxygenで構造を記述して各種UML図・メッセージシーケンスチャート・フローチャート等を出力するには?

Q:Doxygenで構造を記述して各種UML図・メッセージシーケンスチャート・フローチャート等を出力するには?

A:各種サポートツールを使用し、図の構造をテキスト等で記述し出力する。

自動的に出力される図については、下記を参照
『Q&A:Doxygenで自動的にクラス図・コラボレーション図(コミュニケーション図)・呼び出し関係図等を出力するには?』


詳細

各種サポートツール(PlantUML・Mscgen・Graphviz・Dia 等)を使用して出力する。
(以下Doxygenコマンド・設定項目は親サイトにリンク)
例は下記の設定で出力

目次

PlantUML(UML 等)
Mscgen(メッセージシーケンスチャート)
Graphviz(ノードとエッジ)
Dia(Visioライク:フローチャート等)
その他(画像)

PlantUML

図の種類

  • UML
    • シーケンス図
    • ユースケース図
    • クラス図
    • アクティビティ図
    • コンポーネント図
    • 状態遷移図(ステートマシン図)
    • オブジェクト図
    • 配置図
    • タイミング図
  • UML 以外
    • ワイヤーフレーム
    • アーキテクチャ図
    • 仕様及び記述言語(SDL)
    • Ditaa
    • ガントチャート
    • マインドマップ
    • WBS 図(作業分解構成図)
    • AsciiMath や JLaTeXMath による、数学的記法
    • ER図

設定

PlantUML をインストールし下記を設定する。(Java 及び シーケンス図とアクティビティ図 以外を出力するには、Graphviz も必要)

使用方法

@startuml@enduml の間のテキスト(PlantUML 言語)に従って、図を出力できる。

中間ファイルの “inline_umlgraph_cache_all.pu” でエラーになる場合は、実行前に削除する。

/// 関数の説明(PlantUML)
/// @par アクティビティ図
/// @startuml
/// start
/// if (判定 ? ) then(yes)
///     :処理A;
/// else (no)
///     :処理B;
/// endif
/// stop
/// @enduml
/// @par 状態遷移図(ステートマシン図)
/// @startuml
/// [*] --> 状態A
/// 状態A -> 状態B
/// 状態B --> 状態C
/// 状態C -> 状態A
/// 状態A --> [*]
/// @enduml
void funcPlantUML() {
}

Mscgen

図の種類

  • メッセージシーケンスチャート(MSCMessage Sequence Chart)

設定

Mscgen をインストールし下記を設定する。(Doxygen 1.8.16 以降は組み込みの為、インストールは不要)

使用方法

@msc と @endmsc の間のテキスト(Mscgen 言語)に従って、図を出力できる。
テキストは外部ファイルに出すことが可能で、@mscfile で挿入する。

/// 関数の説明(Mscgen)
/// @par メッセージシーケンスチャート
/// @msc
/// c [label="Client"],s [label="Server"];
/// c=>s [label = "MSG1"];
/// c<=s [label = "MSG2"];
/// @endmsc
/// @par メッセージシーケンスチャート(ファイル)
/// @mscfile diagrams.msc
void funcMscgen() {
}

【diagrams.msc】

msc {
  c [label="Client"],s [label="Server"];
  c=>>s [label = "MSG3"];
  c<<=s [label = "MSG4"];
}

Graphviz

図の種類

  • ノード(各種形状)と エッジ(ノード間の関係:各種線分)で表現できる図

設定

Graphviz をインストールし下記を設定する。

使用方法

@dot@enddot の間のテキスト(DOT言語)に従って、図を出力できる。
テキストは外部ファイルに出すことが可能で、@dotfile で挿入する。

/// 関数の説明(Graphviz)
/// @par 図1
/// @dot
/// digraph {
///     layout = circo;
///     X -> A;
///     X -> B;
///     X -> C;
/// }
/// @enddot
/// @par 図2
/// @dotfile diagrams.dot
void funcGraphviz() {
}

【diagrams.dot】

digraph {
  rankdir = LR;
  node [shape = record];

  l [label = "A|B|<c>C"];
  r [label = "{<x>X|Y|Z}"];
  l:c -> r:x [label = "c - x"];
}

Dia

図の種類

  • UML
  • フローチャート
  • ER図
  • データベース
  • ネットワーク
  • 回路図
  • その他各種図
  • 独自の図形の作成も可能

設定

Dia (MS Visio ライクな作図ソフト)をインストールし下記を設定する。
日本語化:インストール時に [English] を選択、[Translations] にチェックを付けたまま実行する。起動後、メニューの [入力メソッド] を [シンプル] に設定する。(Windows版 ver 0.97.2 で検証)

使用方法

Dia で作成した図表ファイルを @diafile で挿入する。

/// 関数の説明(Dia)
/// @par フローチャート
/// @diafile diagrams.dia
void funcDia() {
}

その他

図の種類

  • 任意の図

設定

使用方法

ドローイングソフト等で作成した画像ファイルを挿入する。