【更新】よく使うPlantUMLのフローチャートやシーケンス図の記述パターンをまとめてみた

Last Updated on 2023年10月18日 by らくろぐ

この記事は2022年3月のものを更新したものです。

設計書や仕様書を作成する際に、ブロック図やフローチャート、状態遷移図を描画ツールなどを使わずに簡単に描くにはどうすればいいか悩んでいませんか?

このような経験をされている方にぜひ紹介したいのが「PlantUML」です。

組み込み開発において、フローチャートやシーケンス図など様々なドキュメント作成を経験した筆者が、一番便利だと感じたこの記法について、よく使うパターンを中心に紹介します。

ドキュメント作成時のフローチャートやシーケンス図をどうするか

フローチャート等は各ドキュメントツールにも部品等あるが、修正したときにレイアウト変更がうまくできないのが難点。たとえばエクセルなどは使い慣れていて書きやすいけど、コンポーネントを追加したときに全体をずらす必要があります。これによってレイアウトがずれることもしばしば。

そこで出会ったのがテキストファイルから様々なUMLがかけるPlantUMLです。最近はもっぱらこちらを利用しています。

いわゆるマークアップ言語のため、テキストエディタにプラグインを追加するだけで利用でき、ビューアーもブラウザで使用できるのでとても便利。

記述方法として、シーケンス図やアクティビティ図なども用意されているので、これらのサンプルにまとめてみました。

UML(ゆーえむえる)とは

UMLとは、オブジェクト指向のソフトウェア開発において、データ構造や処理の流れなどソフトウェアに関連する様々な設計や仕様を図示するための記法を定めたもの。ソフトウェアのモデリング言語の標準としてとして最も広く普及している。IT用語辞典(https://e-words.jp/w/UML.html)より

オブジェクト指向のソフトウエア開発において、仕様を定義するドキュメントの中で使われるアクティビティ図をUMLの記法で表現することも多いです。フローチャートやアローチャート等とは別にUMLで定められたコンポーネントなどを使って表現します。

PlantUMLとは

PlantUMLはシーケンス図やアクティビティ図などを素早く書くことができるコンポーネントです。以下のURLより公式のWebサイトへ行くことが可能。

https://plantuml.com/ja/

PlantUMLの環境を作ってみる。

  • OS:windows10
  • エディタ:Sublime3またはVisual Studio Code
  • Java:JDK-17
  • Graphviz
  • VSCodeのコマンドパレットからPlantUMLをインストールします。

インストールはこちらを参照

PlantUMLを使って様々な図を描いてみる。

PlantUMLでは様々な図が書くことができるが、ソフトウエア開発においてよく用いられる以下のような図のコンポーネントも提供されています。

  • アクティビティ図(フローチャート/flow chart)
  • シーケンス図
  • 状態遷移図

アクティビティ図(フローチャート)

UMLでのアクティビティ図はいわゆるフローチャートです。この記事ではPlantUMLのサイトでも表記されているアクティビティ図として表現します。

開始と停止

アクティビティを示すコンポーネントの処理の開始と終了を示す。

開始:start

終了:stop

@startuml
start
stop
@enduml

ループ処理(for loop/ while loop)

forループの直接な記述はないようなので、whileループ(前判定)と同じ処理手表現

@startuml
title ループ処理
start
:処理1;
while (i < 10)
    :処理2;
endwhile
:処理3;
stop
@enduml

分岐条件(if文/switch文)if文/switch文

  • 並列処理

switch文の直接表記はないので、if/elseをつかって並列(水平)表現が可能

@startuml
start
if (test==A) then (yes)
  :処理A]
elseif(test == B) then(yes)
  :処理B]
else (no)
  :処理C]
endif
stop
@enduml
  • 垂直処理
    並列処理と同様に分岐処理を垂直処理として書くこともできます。
@startuml
!pragma useVerticalIf on
start
if (test == A) then (yes)
  :アクティビティ1;
elseif (test == B) then (yes)
  :アクティビティ2;
  stop
elseif (test == C) then (yes)
  :アクティビティ3;
elseif (test == D) then (yes)
  :アクティビティ4;
else (nothing)
  :アクティビティ;
endif
stop
@enduml

シーケンス図

シーケンス図は異なるモジュールの処理の流れをシーケンス(→)によって表現した図です。

@startuml
hnote over TaskA : Init
hnote over TaskB : Init
TaskA -> TaskB : Request Start
TaskB --> TaskC: Request Start
hnote over TaskC : Init
TaskC -> TaskB: Resupose Info
TaskC --> TaskA: Notify 
TaskA <- TaskB :Notify
@enduml

シーケンス図の場合はスイムレーンという手法もあります。こちらの方が比較的すっきりして見えます。

@startuml
|State_1|
Start
 :Init;
|State_2|
 :Start;
|State_3|
 :Complete;
 if (ret = OK) then
  :Error;
  |State_1|
  else
  :Stop;
  |State_2|
 endif
stop
@enduml

状態遷移図(ステートマシン)

ステートマシン

@startuml
[*] -> State_1
State_1 --> State_2 : Init
State_2 --> State_3 : Start
State_3 --> State_2 : Complete
State_2 --> State_1 : Error
State_3 --> State_1 : Error
State_3 --> [*] : Stop
@enduml

開始と終了

@startuml
state Test {
  state entry1 <<inputPin>>
  state StateA
  entry1 --> StateA
  StateA -> StateB
  StateB --> exitA <<outputPin>>
}

[*] --> entry1
exitA --> Out
@enduml

Mermeid記法との比較

同じマークダウン言語でソースコードのドキュメント化によく使われるもので、「Mermaid記法」があります。こちらについても以下の記事で紹介しています。PlantUMLとの違いをぜひ比べてください。

まとめ

ソフトウエアの設計ドキュメント作成に非常に便利な記法、PlantUMLについて紹介しました。ソフトウエア開発工程においてフローチャート(アクティビティ図)とシーケンス図、ステートマシンがあれば簡単な仕様は表現できるので、この記事の中でもこれらを中心にサンプルをわかりやすくまとめたつもりです。

細かい条件など、PlantUMLにはまだまだま規定されている表記法があり、これらを使ってより複雑なシステムも可視化していけるようです。

なによりPlantUMLの良いところは、専用のツールではなく、テキストとしてドキュメントを残せるので、長い目でみても資料の引き継ぎなどがとてもしやすいところだと考えます。

今後も、PlantUMLを活用し、様々なドキュメントの表記例をまとめていく予定です。