Last Updated on 2024年10月20日 by らくろぐ
この記事は2022年3月のものを更新したものです。
この記事はこんな人におススメです。
- 当サイトの管理人
- ITマイクロ法人運営中
- ソフトウエアエンジニア
- 便利ツールやお役立ち情報など、気になることを発信中
日々の業務で繰り返し調べたりすることをまとめたいとこのサイトを立ち上げました。
同じ疑問を調べていてこのサイトに来てくださった方の少しでもお役に立てればうれしいです。
設計書や仕様書を作成する際に、ブロック図やフローチャート、状態遷移図を描画ツールなどを使わずに簡単に描くにはどうすればいいか悩んでいませんか?
このような経験をされている方にぜひ紹介したいのが「PlantUML」です。
組み込み開発において、フローチャートやシーケンス図など様々なドキュメント作成を経験した筆者が、一番便利だと感じたこの記法について、よく使うパターンを中心に紹介します。
Contents
ドキュメント作成時のフローチャートやシーケンス図をどうするか
フローチャート等は各ドキュメントツールにも部品等あるが、修正したときにレイアウト変更がうまくできないのが難点。たとえばエクセルなどは使い慣れていて書きやすいけど、コンポーネントを追加したときに全体をずらす必要があります。これによってレイアウトがずれることもしばしば。
そこで出会ったのがテキストファイルから様々なUMLがかけるPlantUMLです。最近はもっぱらこちらを利用しています。
いわゆるマークアップ言語のため、テキストエディタにプラグインを追加するだけで利用でき、ビューアーもブラウザで使用できるのでとても便利。
記述方法として、シーケンス図やアクティビティ図なども用意されているので、これらのサンプルにまとめてみました。
UML(ゆーえむえる)とは
UMLとは、オブジェクト指向のソフトウェア開発において、データ構造や処理の流れなどソフトウェアに関連する様々な設計や仕様を図示するための記法を定めたもの。ソフトウェアのモデリング言語の標準としてとして最も広く普及している。IT用語辞典(https://e-words.jp/w/UML.html)より
オブジェクト指向のソフトウエア開発において、仕様を定義するドキュメントの中で使われるアクティビティ図をUMLの記法で表現することも多いです。フローチャートやアローチャート等とは別にUMLで定められたコンポーネントなどを使って表現します。
PlantUMLとは
PlantUMLはシーケンス図やアクティビティ図などを素早く書くことができるコンポーネントです。以下のURLより公式のWebサイトへ行くことが可能。
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
StartとStopを→で結ぶことで処理が進む方向を示す。表現によっては処理を並列に表したい等の場合は、矢印の向きを変更することが可能。
startuml
(*) -up-> " 1st Proc "
-right-> "2nd Proc"
--> "3rd Proc"
-left-> (*)
@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を活用し、様々なドキュメントの表記例をまとめていく予定です。