PlantUML - シーケンス図

@startuml{plantuml_seq_sample.png} title シーケンス図のサンプル hide footbox actor ユーザー as user participant 制御部 as control <<Control>> participant "<u>Loader</u>" as model <<Model>> participant 画面 as view <<View>> #98FB98 user -> control : 検索 activate control create model control -> model : << new >> control -> model : データ検索 activate model control <-- model : 検索結果 note right : ヒットしたものをリストで返します。 deactivate model destroy model control -> view : 表示(検索結果) activate view deactivate control loop 1, データ数 view -> view : データの表示 end view --> user deactivate view @enduml
メッセージ
メッセージは以下の形式で記述します。送り手 -> 受け手 : メッセージ名
受け手 <- 送り手 : メッセージ名
@startuml{plantuml_seq_base.png} Alice -> Bob: メッセージ @enduml

メッセージ種別と矢印の形状
メッセージ種別にあわせて、矢印の形状を変えることができます。記号 | 種別 | 説明 |
---|---|---|
<-, -> | 同期メッセージ | 戻りを待つメッセージ。通常のメッセージです。 |
<--, --> | 戻りメッセージ | メッセージの送り先からの戻り値 |
<<-, ->> | 非同期メッセージ | 同期されないメッセージ |
@startuml{plantuml_seq_arrow.png} Alice -> Bob: 同期メッセージ Alice <-- Bob: 戻りメッセージ Alice ->> Chuck: 非同期メッセージ @enduml

自己メッセージ
対象を同じにすれば、自己メッセージとなります。@startuml{plantuml_seq_self.png} Alice -> Alice: 自己メッセージ @enduml

外部とのメッセージ
送り手や受け手がダイアグラム上にない場合は [ または ] を使用します。@startuml{plantuml_seq_out.png} [-> A: DoWork A ->] : Request A<--] [<- A: Done @enduml

ライフライン
ライフラインの要素はメッセージの出現順に左から表示されます。要素名に記号などの英数字以外を使う場合には "(ダブルクオート) で囲みます。 日本語もシーケンス図の場合は不要です。(他の UML 図では必要)
ちなみにメッセージ名には " は不要で、書くとそのまま表示されます。
また、as キーワードで別名を付けることができます。
@startuml{plantuml_seq_lifeline.png} Alice -> "Bob : Human" Alice -> 太郎 Alice -> "I have a really\nlong name" as Long Alice <-- Long @enduml

ライフラインの定義
表示位置を変えたい場合や付加情報をつけたい場合には participant(actor) キーワードでライフラインの要素の定義を記述します。- 表示順の変更
-
participant の定義順に左から配置されます。
@startuml{plantuml_seq_participant.png} participant Bob participant Alice Alice -> Bob Alice <-- Bob @enduml
- アクター
-
棒人間を使いたい場合は participant ではなく actor を使用します。
@startuml{plantuml_seq_actor.png} actor Alice Alice -> Bob Alice <-- Bob @enduml
- 色
-
背景色を変えたい場合は
#色名 または #RGB値 で指定します。
@startuml{plantuml_seq_color.png} actor Bob #silver participant Alice participant "I have a really\nlong name" as Long #99FF99 Alice -> Bob Alice <-- Bob Alice -> Long Alice <-- Long @enduml
- ステレオタイプ
-
- ステレオタイプを記述したい場合は << ステレオタイプ名 >> を末尾に付けます。
@startuml{plantuml_seq_stereotype.png} participant "Famous Bob" as Bob << Generated >> participant Alice << Testable >> Bob->Alice: First message @enduml
- ステレオタイプを記述したい場合は << ステレオタイプ名 >> を末尾に付けます。
作成と消滅
オブジェクトの作成と生成には create, destroy キーワードを使用します。@startuml{plantuml_seq_newdestroy.png} participant "Main Window" as main create Loader main -> Loader : << 作成 >> main <-- Loader destroy Loader @enduml

実行状態
ライフラインの実行状態は activate と deactivate キーワードで指定します。@startuml{plantuml_seq_activate.png} User -> Foo: 処理を実行 activate Foo User <-- Foo deactivate Foo User -> Bar: 処理を実行 activate Bar #FFBBBB Bar -> Bar: 内部処理 activate Bar #DarkSalmon create Object Bar -> Object: << 作成 >> activate Object Bar <-- Object deactivate Object destroy Object deactivate Bar User <-- Bar: 完了 deactivate Bar @enduml

ノート
UML 図におけるコメントはノート(注意書き)を使います。このノートの記述方法を説明します。ちなみに PlantUML の記述でのコメントは '(シングルクオート) で始まる行です。
メッセージのノート
メッセージのノートはメッセージの直下に記述します。 記述は以下のような形式です。note 位置 [色] : コメント
note 位置 [色]位置は right または left で指定します。
コメント
end note
背景色を変えたい場合は #色名、#RGB 値 で指定します。
@startuml{plantuml_seq_notes.png}
'この行は PlantUML のコメントで無視されます。
Alice->Bob : hello
note left : 最初のメッセージに対するノート
Bob->Alice : ok
note right #aqua : 次のメッセージに対するノート
Bob->Bob : I am thinking
note left #FFAAAA
ブロックを使って定義した
複数行の長いノート
end note
@enduml

ライフラインのノート
ライフラインに対してノートを付ける場合には以下のキーワードを使用します。- note right of
- note left of
- note over
@startuml{plantuml_seq_notes_lifeline.png} participant Alice participant Bob note right of Alice: Alice の右側に表示 note left of Alice #aqua Alice の左側に表示 色も変更 end note note over Alice: Alice にまたがって表示 note over Alice, Bob : Bob と Alice の両方に\nまたがって表示 note over Bob, Alice #FFAAAA ブロックを使って定義した 複数行の名前のノート end note @enduml

複合フラグメントとグループ化 シーケンス図では、制御構造を表現するために複合フラグメントを使用します。 以下の表は PlantUML で使える複合フラグメントです。
キーワード | 意味 |
---|---|
alt/else | 条件分岐 |
opt | 条件を満たした場合のみ実行する処理 |
par | 並列処理 |
loop | ループ処理 |
break | 中断処理 |
critical | マルチスレッド環境などでの排他制御 |
キーワード [条件など]PlantUML では行頭の空白は無視するので、任意にインデントをつけることができます。
メッセージ
end
alt/else
条件分岐には alt および else を使用します。 正常系と異常系の処理といったシーケンスを書く場合などに使われます。@startuml{plantuml_seq_cf_alt.png} actor ユーザー as user participant ログイン画面 as login participant ユーザー情報 as userinfo user -> login : ログイン login -> userinfo : 認証チェック login <-- userinfo : チェック結果 alt 認証成功 user <- login : メインメニューを表示 else 認証失敗 user <- login : エラーメッセージを表示 end @enduml

opt
条件を満たした場合にのみ実行する処理には opt を使用します。 条件分岐と似ていますが、 else の処理がありません。@startuml{plantuml_seq_cf_opt.png} actor ユーザー as user participant メイン画面 as main opt 管理権限あり main -> main : 管理用メニューを追加 end user <- main : メニューを表示 @enduml

par
並列処理には par および else を使います。@startuml{plantuml_seq_cf_par.png} actor Bob Bob -> めざまし : 止める Bob <-- めざまし par Bob -> 歯ブラシ : 磨く Bob <-- 歯ブラシ else Bob -> 新聞: 読む Bob <-- 新聞 end @enduml

loop
ループ(繰り返し)処理は loop です。 loop の後は任意の文字列が使えますが、 UML としては [開始、終了] の形式で書かれます@startuml{plantuml_seq_cf_loop.png} actor 客 as guest loop 1, 商品数 guest -> 店員 : 商品 店員 -> レジ : バーコード入力 end 店員 <-- レジ : 合計金額 guest <-- 店員 : 合計金額 guest -> 店員 : お金 店員 -> レジ : お金 店員 <-- レジ : レシート guest <-- 店員 : レシート guest <-- 店員 : 商品 @enduml

break
break は中断処理を意味しており、 ループ処理などと一緒に使います。@startuml{plantuml_seq_cf_break.png} actor "客(未成年)" as guest loop 1, 商品数 guest -> 店員 : 商品 break 商品 = 酒 guest <- 店員 : 販売を拒否 end 店員 -> レジ : バーコード入力 end 店員 <-- レジ : 合計金額 guest <-- 店員 : 合計金額 guest -> 店員 : お金 店員 -> レジ : お金 店員 <-- レジ : レシート guest <-- 店員 : レシート guest <-- 店員 : 商品 @enduml

critical
マルチスレッド環境などで、排他制御の処理には critical を使います。@startuml{plantuml_seq_cf_critical.png} actor ユーザー as user participant 画面 as view participant データ as doc create view user -> view : 表示 view -> doc : データの読み取り view <-- doc : データ user <-- view user -> view : データの変更 user <-- view user -> view : 保存 critical view -> doc : データの書き込み view <-- doc end user <-- view destroy view @enduml

グループ化
PlantUML にない複合フラグメントを使いたい場合や単に処理をグループ化したい場合には、 group キーワードを使用します。ただし、条件などの説明を記述することはできません。
group グループ名
メッセージ
end
@startuml{plantuml_seq_cf_group.png} actor Bob Bob -> めざまし : 止める Bob <-- めざまし group 朝の準備 par Bob -> 歯ブラシ : 磨く Bob <-- 歯ブラシ else Bob -> 新聞: 読む Bob <-- 新聞 end Bob -> 服 : 着替える Bob <-- 服 end @enduml

シーケンス図の装飾
シーケンス図の見栄えなどの付加的な変更するための方法を説明します。タイトル
シーケンス図にタイトルを付けるには title キーワードを使います。title タイトル
title
タイトル
end title
@startuml{plantuml_seq_title.png} title 簡単なシーケンス図の例 Alice -> Bob: 認証要求 Bob --> Alice: 認証応答 @enduml

フッターの除去
フッターを取り除くには hide footbox キーワードを記述します。@startuml{plantuml_seq_footbox.png} hide footbox title フッターの除去 Alice -> Bob: 認証要求 Bob --> Alice: 認証応答 @enduml

スペース
スペースは以下の形式で記述します。|||
|| スペースのピクセル値 ||
@startuml{plantuml_seq_space.png} Alice -> Bob: message 1 Bob --> Alice: ok ||| Alice -> Bob: message 2 Bob --> Alice: ok ||45|| Alice -> Bob: message 3 Bob --> Alice: ok @enduml

分離線
分離線は以下の形式で記述します。== ラベル ==
@startuml{plantuml_seq_divider.png} == 初期化 == Alice -> Bob: 認証要求 Bob --> Alice: 認証応答 == 後処理 == Alice -> Bob: タスク開放 Alice <-- Bob @enduml

ボックス
box キーワードによって、ライフラインをボックスで囲むことができます。box [ラベル] [色]
participant または actor による定義
end box
@startuml{plantuml_seq_box.png} box "社内" #LightBlue actor エンジニア participant サポート end box participant 顧客 顧客 -> サポート : 問い合わせ サポート -> エンジニア : 問い合わせ エンジニア --> サポート : 回答 サポート --> 顧客 : 回答 @enduml

HTML タグ
ライフライン名、メッセージ名、ノート、タイトルといった要素の文字列では、 以下の HTML タグを使用することができます。タグ | 説明 |
---|---|
<b> | 太字 |
<u>, <u:色> | 下線 |
<w>, <w:色> | 波線の下線 |
<s>, <s:色> | 取り消し線 |
<color:色> | 文字色 |
<back:色> | 背景色 |
<size:ピクセル値> | フォントサイズ |
<img src="ファイルパス">, <img:ファイルパス> | 画像 |
@startuml{plantuml_seq_html.png} title <size:24><w>HTML タグ</w> のサンプル (<img:blogicon.png>)</size> end title participant Alice participant "The <i>Famous</i> Bob" as Bob Alice -> Bob : <u>かしこまった</u>挨拶 note right of Alice Alice の<u:blue>右</u>側に <back:cadetblue>表示</back>するノート end note note left of Bob <s:red>Alice</s> Bob の<b>左</b>側に <color:#118888>表示</color>するノート end note @enduml

参考
このページの記述には以下のサイトを参考にさせていただきました。- 関連記事
-
- PlantUML の使い方
- PlantUML - シーケンス図
- PlantUML - クラス図
- PlantUML - ユースケース図
- PlantUML - アクティビティ図
Facebook コメント
コメント
管理人のみ閲覧できます
No title
ありがとう