こちらの記事は、PlantUMLの実行環境が既に準備済みの方向けの記事になります。まだ環境作成が終わっていない方、PlantUMLを初めてお使いの方は、先に基礎編をご覧ください。また、事前にシーケンス図の知識が多少あることが望ましいです。
はじめに
PlantUMLはオープンソースのUML描画ツールです。前回はツールのインストールから基本的な操作方法までを学びました。今回もPlantUMLでシーケンス図を扱っていきますが、前回の記事でご紹介したもの以外の文法を学び、より実践的に使えるようになることを目標として進めていきます。また、より効果的に使える方法などもご紹介したいと思います。
レッスン1.新しいファイルの作成
では、まずは今回使用するファイルを新規作成しましょう。Visual Studio Code(以下VS Code)を開いて、ファイルの新規作成を行います。
空ファイルが開いたら、「Ctrl+S」を押してファイルを作ります。今回は、「test2」というファイル名で作成します。ファイルの種類は忘れずに「PlantUML」としておいてください。
これでファイルの準備ができました。次からは早速演習に入っていきましょう。
レッスン2.ユーザの動作を定義する
シーケンス図を作る時に、「ユーザ」のラインを追加することができます。何か操作を伴うようなシステムの場合には、ユーザを追加しておくことで、その入出力を表すことができます。今回はパソコンを例にとってシーケンスを表してみます。
では、早速試してみましょう。コードは以下を入力します。
@startuml actor ユーザ ユーザ -> PC : キー入力 PC -> ディスプレイ : 文字 ディスプレイ -> ユーザ : 表示文字 @enduml
プレビューで確認すると、下記のように表示されたかと思います。
ここで、コード上赤字で示した「actor ユーザ」という部分が「ユーザ」の定義で、コードの冒頭で宣言しておくことで使えるようになります。このように、ユーザを追加すると入出力が明確になり、分かりやすいシーケンスになります。
レッスン3.分類子を事前に定義する
続いて「分類子」をあらかじめ定義しておく方法を学びましょう。基本的にはコードを書いていくと、存在しない分類子は自動的に追加されますが、あらかじめ定義しておくことで、複数人で作成するシーケンス図になっても、同じものなのに異なった名前の分類子が乱立するといったことを防ぐことができます。また、既にシーケンス図がテンプレート化されている場合のガイドとしても有効です。さらに分類子の順番を変更したい場合にもこの方法が使えます。
先ほどのコードに、分類子の定義を追加してみます。赤字で記載しました。
@startuml actor ユーザ 'ここで定義した順番に並ぶ participant PC participant ディスプレイ participant 外付けHDD participant プリンタ ユーザ -> PC : キー入力 PC -> ディスプレイ : 文字 ディスプレイ -> ユーザ : 表示文字 @enduml
キーワードは「participant」です。これをコードの冒頭に追加しておくと、分類子が定義された順番に左から並びます。
順番を変更し、間にユーザを入れることもできます。
'ここで定義した順番に並ぶ participant PC participant ディスプレイ actor ユーザ participant 外付けHDD participant プリンタ
このように、事前に分かっている分類子は追加しておくことでシーケンス図が整理されます。
レッスン4.グループ分けする
シーケンス図で条件分岐を表す場合にaltというグループを使いますが、その表現も行うことができます。
まずはコードを見てみましょう。前回のコードを少し直しています。
@startuml actor ユーザ participant PC participant ディスプレイ '条件分岐を定義 alt キーボード ユーザ -> PC : キー入力 else マウス ユーザ -> PC : マウス入力 end PC -> ディスプレイ : 結果表示 ディスプレイ -> ユーザ : 操作結果 @enduml
altというのが条件分岐のキーワードです。if文のような構造になっており、条件はネストも可能です。グループの最後には必ず「end」キーワードを忘れずに入れるようにしてください。
レッスン5.注釈を入れる
シーケンスの説明を入れる時には注釈を使います。場所も細かく設定が可能です。まずは、分類子を基準とした相対位置で指定する方法です。
@startuml actor ユーザ participant PC participant ディスプレイ '分類子を中心に位置指定できる note over PC: 上部 note left PC: 左側 note right PC: 右側 alt キーボード ユーザ -> PC : キー入力 else マウス ユーザ -> PC : マウス入力 end PC -> ディスプレイ : 結果表示 ディスプレイ -> ユーザ : 操作結果 @enduml
「over」の後に分類子名を入れると、位置指定ができます。今回は「PC」を中心に配置してみました。では、各コードの表示位置を確認してみましょう。
確認できましたでしょうか?続いて、メッセージの位置に表示する方法です。下記のコードを実行してみましょう。
@startuml actor ユーザ participant PC participant ディスプレイ alt キーボード ユーザ -> PC : キー入力 '直前のメッセージの左右に表示される note right : 右側 note left : 左側 else マウス ユーザ -> PC : マウス入力 end PC -> ディスプレイ : 結果表示 ディスプレイ -> ユーザ : 操作結果 @enduml
今回はleft、rightと指定しますが、直前のメッセージに対して表示されます。では、表示位置を確認します。
メッセージの左右に表示されました。このように、注釈は位置が自由に指定できます。
レッスン6. 分類子を囲んでカテゴリー分けする
シーケンス図で、内部構造を表すときにはboxによるカテゴリー分けを使うと便利です。今回も早速例を見てみましょう。
@startuml actor ユーザ box PC participant USB participant CPU participant ディスプレイアダプタ end box alt キーボード ユーザ -> USB : キー入力 else マウス ユーザ -> USB : マウス入力 end USB -> CPU : 入力データ CPU -> ディスプレイアダプタ : 表示データ participant ディスプレイ ディスプレイアダプタ -> ディスプレイ : 表示データ ディスプレイ -> ユーザ : 表示 @enduml
上記のように、「box ~ end box」というタグで括ると、カテゴリー分けされます。今回はPCの内部構造を表してみることにします。では、表示を見てみましょう。
冒頭で分類子に対してコードを入れ込むことで、内部構造を表すことができます。boxは複数追加することができるので、詳細な構造を表したい場合に活用しましょう。
レッスン7.ライフラインの活性化
リソースの占有状態を表したい場合、ライフラインの活性化を使って表現することができます。前回のシーケンスにCPU処理中の状態を追加してみましょう。
@startuml actor ユーザ box PC participant USB participant CPU participant ディスプレイアダプタ end box alt キーボード ユーザ -> USB : キー入力 else マウス ユーザ -> USB : マウス入力 end USB -> CPU : 入力データ activate CPU note over CPU : 処理中 CPU -> ディスプレイアダプタ : 表示データ deactivate CPU participant ディスプレイ ディスプレイアダプタ -> ディスプレイ : 表示データ ディスプレイ -> ユーザ : 表示 @enduml
このように、activate ~ deactivateで括ることで、処理中を表すことができます。では、どのような表示になるのか確認してみましょう。
処理中を表すことができたかと思います。deactivateを書き忘れて、意図しないところまで伸びてしまうことが無いように注意しましょう。
レッスン8.ダイアグラムを整える
ダイアグラムもそろそろ完成に近づいてきたので、配布できるように整えていきたいと思います。ここではタイトルとヘッダフッタを追加する方法を示します。ヘッダとフッタはコードの頭に記載します。
@startuml title PC入出力シーケンス header テストシーケンス footer ページ %page% / %lastpage% actor ユーザ box PC participant USB participant CPU participant ディスプレイアダプタ end box alt キーボード ユーザ -> USB : キー入力 else マウス ユーザ -> USB : マウス入力 end USB -> CPU : 入力データ activate CPU note over CPU : 処理中 CPU -> ディスプレイアダプタ : 表示データ deactivate CPU participant ディスプレイ ディスプレイアダプタ -> ディスプレイ : 表示データ ディスプレイ -> ユーザ : 表示 @enduml
ページ番号は自動付与です。では、表示を見てみましょう。
フッタのみの追加も可能ですので、適宜必要な情報を入れるようにしましょう。
レッスン9.その他の小技
ここでは、ちょっとだけ便利な小技を紹介します。ここで紹介したものは、分類子でも注釈でもテキストを書く場所であればほとんどのところに有効なので、覚えておくと便利です。
1.改行する
分類子やノートなどで、好きな位置で改行したい場合には、「\n」を入れます。
ブロック1 -> ブロック2 : 1行目です\n2行目です
2.色を変える
分類子の背景色を変えたい場合は、定義時にカラーコードを指定します。
participant プリンタ #99FF99
フォントの色を変えたい場合は、HTMLのfontタグで指定します。タグの範囲を変えれば部分指定も可能です。
ユーザ -> PC : <font color="red">キー入力</font>
レッスン10.有効な活用方法として
最後に活用方法のヒントをご紹介します。PlantUMLの活用方法としては、デバッグコードでの利用です。コード内のデバッグプリントでPlantUMLのコードを出力するようにすれば、実動に即したシーケンス図を正確に描くことが可能になります。例えば、モジュール間の通信ログの代わりに利用すれば、メッセージのやり取りを表すことができます。
正確にダイアグラムを描画することで、ソフトウェア設計書等に活用することもできますし、モジュールの担当替えが発生した際には、そのモジュール解析に手助けをしてくれます。また、不具合が発生したときには、イベントのやり取りを正確に把握することで、コマンド順が間違っている、足りないまたは重複したコマンドがある等に気づけますので解析の手掛かりになります。
おわりに
今回でPlantUMLでの一通りシーケンス図の文法を学びました。たった数行のコードで柔軟なシーケンス作成に対応ができ、非常に使いやすいツールであることがお分かりになったことかと思います。今回は基本的なシーケンス図の文法を学びましたが、他にも命令がありますので、必要に応じて公式サイトのヘルプをご覧ください。
https://plantuml.com/ja/sequence-diagram
最後までお読みいただき、ありがとうございました。
No Comments