はじめに
プロジェクト初期段階でのシステムの振る舞い検討や、開発に大きく関わっていない方への説明の際に、UMLの相互作用概要図を使いたくなることがよくあります。
一方で私はUMLの描画ツールにPlantUMLを使っていますが、Webで「相互作用概要図 PlantUML」とか「Interaction Overview Diagram PlantUML」と検索をかけても、PlantUMLで相互作用概要図の記述方法がほとんどでてきません。
そのため、本記事ではPlantUMLで相互作用概要図の書き方について紹介します。また、初心者の方にも今回やっている内容を理解していただけるようにUMLとPlantUMLに関して概要をはじめに記載いたします。PlantUMLの開発環境構築手順などに関しては、本記事では取り上げませんのでご注意ください(別サイトで多くご紹介されておりますので、そちらを参照ください)。
本読者のターゲット
- PlantUMLについてよく知らないため、何ができるかざっくり知りたい
- PlantUMLで相互作用図の記述方法を知りたい
作業環境
- OS: Windows11
- エディタ: VSCode
UMLとPlantUMLの概要
相互作用概要図の書き方だけ知りたいという方は、本章を読み飛ばしてください。
本章では、UMLとPlantUMLを知らない方向けに、それぞれの用語について概要を少しだけ紹介します。
UMLとはUnified Modeling Languageの略で、ソフトウェアを形式化するための統一モデリング言語です。UMLは表記法であり、ソフトウェアな静的構造を表す6種類の図と、ソフトウェアの動的振る舞いを表す7種類の図、合計13種類の図が定義されています。
UMLは様々な場面で活用できますが、例えば要件定義で活用した場合、要件定義の設計段階では要件漏れの防止に役立ち、要件定義の合意段階ではシステム全体を俯瞰できるため効率的な議論に役立ちます。
一方でPlantUMLは、テキストベースでUML図を描画するためのオープンソースソフトウェアのツールです。位置調整や線の接続調整に悩まされず、単純なコードでUMLなどの図を記述でき、またテキストベースなのでGitHubなどでのバージョン管理と相性が良いため重宝しています。
上に記載したマインドマップもPlantUMLを用いて下記のように記述して書いています。
@startmindmap
* 静的構造
** クラス図
** オブジェクト図
** 合成構造図
** パッケージ図
** コンポーネント図
** 配置図
* 動的振る舞い
** ユースケース図
** アクティビティ図
** ステートマシン図(状態遷移図)
** 相互作用図
*** シーケンス図
*** コミュニケーション図(コラボレーション図)
*** 相互作用概要図
*** タイミング図
@endmindmap
相互作用概要図以外の各図の記述方法はPlantUML言語リファレンスガイドで体系的にまとめられているので、そちらをご参照いただければと思います。
PlantUMLでの相互作用概要図の記述方法
さて、本題ですが相互作用概要図の書き方です。ここでは、相互作用概要図として一般的に使われるアクティビティ図とシーケンス図の組み合わせを取り扱います。
書き方は単純で、通常通りアクティビティ図の記述をした後、各アクション二重中括弧{{}}
で囲みます。
相互作用概要図:アクティビティ図&シーケンス図
@startuml
Start
if () then (Condition1)
:action1
{{
actor user
Participant system
Mainframe task1
user -> system : message
user <-- system : response
}}
;
else (Condition2)
:action2;
:action3
{{
actor user
Participant system
Mainframe task2
user -> system : message
user <-- system : response
}}
;
endif
stop
@enduml
本当はシーケンス図の周りをアクションブロックで覆わないで書くのが一般的だと思いますが、いろいろ試してもうまくいかなかったので、今後の課題とさせてください。
まとめ
今回はPlantUMLの使い方として、相互作用概要図の記述方法を紹介しました。
個人的にはPlantUMLで上記のやり方が書けないことにしんどさを感じていて、ツール移行も考えていたので今回紹介した記法を発見した時は感動しました。
できたらUML活用情報の紹介記事をシリーズ化していけたらな~と思っています。直近では、他のUML描画ツールとPlantUMLのビジュアルとか使い勝手のレビュー記事とか、PlantUMLを用いたドメイン駆動設計について書きたいと思っています。