PlantUML - シーケンス図

PlantUML におけるシーケンス図の書き方について説明します。
  1. メッセージ
  2. ライフライン
  3. ノート(コメント)
  4. 複合フラグメントとグループ化
  5. シーケンス図の修飾
  6. 参考

sequence sample
@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
base sample(SVG を使っています。 IE 9 以上または他のモダンブラウザで見てください)

メッセージ種別と矢印の形状

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

Alice -> Bob: 同期メッセージ
Alice <-- Bob: 戻りメッセージ

Alice ->> Chuck: 非同期メッセージ

@enduml
arrow sample

自己メッセージ

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

Alice -> Alice: 自己メッセージ

@enduml
self message sample

外部とのメッセージ

送り手や受け手がダイアグラム上にない場合は [ または ] を使用します。
@startuml{plantuml_seq_out.png}

[-> A: DoWork

A ->] : Request
A<--]

[<- A: Done

@enduml
found lost sample

ライフライン

ライフラインの要素はメッセージの出現順に左から表示されます。

要素名に記号などの英数字以外を使う場合には "(ダブルクオート) で囲みます。 日本語もシーケンス図の場合は不要です。(他の UML 図では必要)
ちなみにメッセージ名には " は不要で、書くとそのまま表示されます。

また、as キーワードで別名を付けることができます。
@startuml{plantuml_seq_lifeline.png}

Alice -> "Bob : Human"
Alice -> 太郎
Alice -> "I have a really\nlong name" as Long
Alice <-- Long

@enduml
lifeline name sample

ライフラインの定義

表示位置を変えたい場合や付加情報をつけたい場合には participant(actor) キーワードでライフラインの要素の定義を記述します。
表示順の変更
participant の定義順に左から配置されます。
@startuml{plantuml_seq_participant.png}
participant Bob
participant Alice

Alice -> Bob
Alice <-- Bob

@enduml
participant sample
アクター
棒人間を使いたい場合は participant ではなく actor を使用します。
@startuml{plantuml_seq_actor.png}
actor Alice

Alice -> Bob
Alice <-- Bob

@enduml
actor sample
背景色を変えたい場合は #色名 または #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
color sample
ステレオタイプ
ステレオタイプを記述したい場合は << ステレオタイプ名 >> を末尾に付けます。
@startuml{plantuml_seq_stereotype.png}
participant "Famous Bob" as Bob << Generated >>
participant Alice << Testable >>

Bob->Alice: First message

@enduml
stereotype sample

作成と消滅

オブジェクトの作成と生成には create, destroy キーワードを使用します。
@startuml{plantuml_seq_newdestroy.png}
participant "Main Window" as main

create Loader
main -> Loader : << 作成 >> 
main <-- Loader
destroy Loader

@enduml
new destroy sample

実行状態

ライフラインの実行状態は activatedeactivate キーワードで指定します。
@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
activate sample

ノート

UML 図におけるコメントはノート(注意書き)を使います。このノートの記述方法を説明します。

ちなみに PlantUML の記述でのコメントは '(シングルクオート) で始まる行です。

メッセージのノート

メッセージのノートはメッセージの直下に記述します。 記述は以下のような形式です。
note 位置 [色] : コメント
note 位置 [色]
  コメント
end note
位置は right または left で指定します。
背景色を変えたい場合は #色名#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
notes message sample

ライフラインのノート

ライフラインに対してノートを付ける場合には以下のキーワードを使用します。
  • 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
notes lifeline sample

複合フラグメントとグループ化

シーケンス図では、制御構造を表現するために複合フラグメントを使用します。 以下の表は PlantUML で使える複合フラグメントです。
キーワード 意味
alt/else 条件分岐
opt 条件を満たした場合のみ実行する処理
par 並列処理
loop ループ処理
break 中断処理
critical マルチスレッド環境などでの排他制御
次の形式で記述します。
キーワード [条件など]
  メッセージ
end
PlantUML では行頭の空白は無視するので、任意にインデントをつけることができます。

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
alt sample

opt

条件を満たした場合にのみ実行する処理には opt を使用します。 条件分岐と似ていますが、 else の処理がありません。
@startuml{plantuml_seq_cf_opt.png}
actor ユーザー as user
participant メイン画面 as main

opt 管理権限あり
  main -> main : 管理用メニューを追加
end

user <- main : メニューを表示

@enduml
opt sample

par

並列処理には par および else を使います。
@startuml{plantuml_seq_cf_par.png}
actor Bob

Bob -> めざまし : 止める
Bob <-- めざまし

par
  Bob -> 歯ブラシ : 磨く
  Bob <-- 歯ブラシ
else
  Bob -> 新聞: 読む
  Bob <-- 新聞
end

@enduml
par sample

loop

ループ(繰り返し)処理は loop です。 loop の後は任意の文字列が使えますが、 UML としては [開始、終了] の形式で書かれます
@startuml{plantuml_seq_cf_loop.png}
actor 客 as guest

loop 1, 商品数
  guest -> 店員 : 商品
  店員 -> レジ : バーコード入力
end
店員 <-- レジ : 合計金額
guest <-- 店員 : 合計金額
guest -> 店員 : お金
店員 -> レジ : お金
店員 <-- レジ : レシート
guest <-- 店員 : レシート
guest <-- 店員 : 商品

@enduml
loop sample

break

break は中断処理を意味しており、 ループ処理などと一緒に使います。
@startuml{plantuml_seq_cf_break.png}
actor "客(未成年)" as guest

loop 1, 商品数
  guest -> 店員 : 商品
  break 商品 = 酒
    guest <- 店員 : 販売を拒否
  end
  店員 -> レジ : バーコード入力
end
店員 <-- レジ : 合計金額
guest <-- 店員 : 合計金額
guest -> 店員 : お金
店員 -> レジ : お金
店員 <-- レジ : レシート
guest <-- 店員 : レシート
guest <-- 店員 : 商品

@enduml
break sample

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
critical sample

グループ化

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
group sample

シーケンス図の装飾

シーケンス図の見栄えなどの付加的な変更するための方法を説明します。

タイトル

シーケンス図にタイトルを付けるには title キーワードを使います。
title タイトル
title
  タイトル
end title
@startuml{plantuml_seq_title.png}

title 簡単なシーケンス図の例

Alice -> Bob: 認証要求
Bob --> Alice: 認証応答

@enduml
title sample

フッターの除去

フッターを取り除くには hide footbox キーワードを記述します。
@startuml{plantuml_seq_footbox.png}

hide footbox
title フッターの除去

Alice -> Bob: 認証要求
Bob --> Alice: 認証応答

@enduml
remove footer sample

スペース

スペースは以下の形式で記述します。
|||
|| スペースのピクセル値 ||
@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
space sample

分離線

分離線は以下の形式で記述します。
== ラベル ==
@startuml{plantuml_seq_divider.png}

== 初期化 ==

Alice -> Bob: 認証要求
Bob --> Alice: 認証応答

== 後処理 ==

Alice -> Bob: タスク開放
Alice <-- Bob

@enduml
divider sample

ボックス

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

顧客 -> サポート : 問い合わせ
サポート -> エンジニア : 問い合わせ

エンジニア --> サポート : 回答
サポート --> 顧客 : 回答

@enduml
box sample

HTML タグ

ライフライン名、メッセージ名、ノート、タイトルといった要素の文字列では、 以下の HTML タグを使用することができます。
タグ 説明
<b> 太字
<u>, <u:色> 下線
<w>, <w:色> 波線の下線
<s>, <s:色> 取り消し線
<color:色> 文字色
<back:色> 背景色
<size:ピクセル値> フォントサイズ
<img src="ファイルパス">, <img:ファイルパス> 画像
色は要素の背景色のように RGB 値または色名で指定します。ただし、色名の前に # は付けません。
@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
html tag sample

参考

このページの記述には以下のサイトを参考にさせていただきました。
関連記事
スポンサーサイト



Prev.    Category    Next 

Facebook コメント


コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

No title

助かった。
ありがとう

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
31位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
5位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

08月 | 2023年09月 | 10月
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。