ライフライン
先頭で扱う分類子を定義することで、定義順に並ばせれます。定義時には以下のキーワードが使えます。
participant
actor
boundary
control
entity
database
@startuml
participant A
actor B
boundary C
control D
entity E
database F
@enduml
order <number>
を使って<number>
のキーワードによって見た目が変わります小さいものから並べることもできます。
@startuml
participant A order 3
participant B order 2
participant C order 1
@enduml
付けた名前が長すぎたりで扱いにくい場合はas <name>
で別名が付けれます。
@startuml
participant AAAAAA as A
A -> A
@enduml
' ┌──────┐
' │AAAAAA│
' └──┬───┘
' │────┐
' │ │
' │<───┘
' ┌──┴───┐
' │AAAAAA│
' └──────┘
メッセージ
手続きを表すメッセージは->
を使い、手続きメッセージの返しには-->
を使います。また非同期な手続きを表すメッセージには->>
や-->>
が使えます。
@startuml
A -> B : Request
B --> A : Response
A ->> C : Request
@enduml
' ┌─┐ ┌─┐ ┌─┐
' │A│ │B│ │C│
' └┬┘ └┬┘ └┬┘
' │ Request │ │
' │───────────>│ │
' │ │ │
' │ Response │ │
' │<─ ─ ─ ─ ─ ─│ │
' │ │ │
' │ Request │
' │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─>│
' ┌┴┐ ┌┴┐ ┌┴┐
' │A│ │B│ │C│
' └─┘ └─┘ └─┘
手続きの記述の前にautonumber
キーワードを置くと手続きメッセージの前に1
、2
、3
と番号を置けます。この振る舞いはautonumber stop
キーワードを置くまで続きます。
@startuml
autonumber
A -> B : Request
B --> A : Response
autonumber stop
A -> B : Request
@enduml
' ┌─┐ ┌─┐
' │A│ │B│
' └┬┘ └┬┘
' │ 1 Request │
' │───────────>│
' │ │
' │2 Response │
' │<─ ─ ─ ─ ─ ─│
' │ │
' │ Request │
' │───────────>│
' ┌┴┐ ┌┴┐
' │A│ │B│
' └─┘ └─┘
手続きの後にactivate <name>
を置くと、deactivate <name>
が置かれるまで活性化されます。またdestroy <name>
でライフラインの破壊を表示することもできます。
@startuml
A -> B
activate A
B --> A
destroy B
A -> C
deactivate A
@enduml
' ┌─┐ ┌─┐
' │A│ │B│
' └┬┘ └┬┘
' ┌┴┐ │
' │ │ ─────────>│
' │ │ │
' │ │ │
' │ │ <─ ─ ─ ─ ─│
' └┬┘ │
' │ │
' │───────────>│
' ┌┴┐ ┌┴┐
' │A│ │B│
' └─┘ └─┘
手続き間の調整
...
を置くと、この部分のラインがドット線に変わり、「しばらく時間が掛かる処理」ということを表現できます。
@startuml
A -> B
...
B --> A
...text...
@enduml
' ┌─┐ ┌─┐
' │A│ │B│
' └┬┘ └┬┘
' │ │
' │───────────>│
' │ │
' . .
' . .
' . .
' . .
' │ │
' │<─ ─ ─ ─ ─ ─│
' │ │
' . .
' . text .
' . .
' . .
' ┌┴┐ ┌┴┐
' │A│ │B│
' └─┘ └─┘
|||
を置くと、手続き間の空間を広く持てます。
@startuml
A -> B
|||
A -> C
@enduml
' ┌─┐ ┌─┐ ┌─┐
' │A│ │B│ │C│
' └┬┘ └┬┘ └┬┘
' │ │ │
' │───────────>│ │
' │ │ │
' │ │ │
' │ │ │
' │ │ │
' │ │ │
' │ │ │
' │ │ │
' │ │ │
' │────────────────────────>│
' ┌┴┐ ┌┴┐ ┌┴┐
' │A│ │B│ │C│
' └─┘ └─┘ └─┘
複合フラグメント
以下のキーワードではメッセージを囲んでグループ化できます。
ref over
alt/else
opt
loop/break
par
critical
group
キーワードの範囲はend
が置かれるまで続きます。
ref over
この部分は別のシーケンス図を参照してほしい時に使います。
@startuml
ref over A : init
@enduml
alt/else
「もし...ならば真の手続き、...違えば偽の手続き」というように条件分岐を表現したい時に使うものです。
@startuml
alt Trushy
A -> B
else Falsy
A -> C
end
@enduml
' ┌─┐ ┌─┐ ┌─┐
' │A│ │B│ │C│
' └┬┘ └┬┘ └┬┘
' │ │ │
' ╔══════╤═══╪════════════╪════════════╪══════════╗
' ║ ALT │ Trushy │ │ ║
' ╟──────┘ │ │ │ ║
' ║ │ │ │ ║
' ║ │───────────>│ │ ║
' ╠══════════╪════════════╪════════════╪══════════╣
' ║ [Falsy] │ │ │ ║
' ║ │ │ │ ║
' ║ │────────────────────────>│ ║
' ╚══════════╪════════════╪════════════╪══════════╝
' ┌┴┐ ┌┴┐ ┌┴┐
' │A│ │B│ │C│
' └─┘ └─┘ └─┘
opt
「もし...ならば真の手続き」というalt/else
からelse
を落としたような条件分岐を表現したい時に使うものです。
@startuml
opt Trushy
A -> B
end
@enduml
' ┌─┐ ┌─┐
' │A│ │B│
' └┬┘ └┬┘
' │ │
' ╔══════╤═══╪════════════╪══════════╗
' ║ OPT │ Trushy │ ║
' ╟──────┘ │ │ ║
' ║ │ │ ║
' ║ │───────────>│ ║
' ╚══════════╪════════════╪══════════╝
' ┌┴┐ ┌┴┐
' │A│ │B│
' └─┘ └─┘
loop/break
loop <条件>
で条件が真の間ループする手続きを表現できます。その中でbreak <条件>
を使うと、条件が真になった場合ループを抜ける事を表現できます。
@startuml
loop Trushy
A -> B
break Trushy
B --> A
end
end
@enduml
' ┌─┐ ┌─┐
' │A│ │B│
' └┬┘ └┬┘
' │ │
' ╔═══════╤════════════╪════════════╪════════════════════╗
' ║ LOOP │ Trushy │ │ ║
' ╟───────┘ │ │ ║
' ║ │ │ ║
' ║ │───────────>│ ║
' ║ │ │ ║
' ║ │ │ ║
' ║ ╔════════╤═╪════════════╪══════════╗ ║
' ║ ║ BREAK │ │Trushy │ ║ ║
' ║ ╟────────┘ │ │ ║ ║
' ║ ║ │ │ ║ ║
' ║ ║ │<─ ─ ─ ─ ─ ─│ ║ ║
' ║ ╚══════════╪════════════╪══════════╝ ║
' ╚════════════════════╪════════════╪════════════════════╝
' ┌┴┐ ┌┴┐
' │A│ │B│
' └─┘ └─┘
par
並行実行される手続きを表現できます。
@startuml
par
A -> B
else
A ->> B
else
A ->x B
end
@enduml
' ┌─┐ ┌─┐
' │A│ │B│
' └┬┘ └┬┘
' │ │
' ╔══════╤═══╪════════════╪══════════╗
' ║ PAR │ │ │ ║
' ╟──────┘ │ │ ║
' ║ │ │ ║
' ║ │───────────>│ ║
' ╠══════════╪════════════╪══════════╣
' ║ │ │ ║
' ║ │ │ ║
' ║ │───────────>│ ║
' ╠══════════╪════════════╪══════════╣
' ║ │ │ ║
' ║ │ │ ║
' ║ │───────────>│ ║
' ╚══════════╪════════════╪══════════╝
' ┌┴┐ ┌┴┐
' │A│ │B│
' └─┘ └─┘
critical
排他制御(ある資源しかその情報にアクセスできないようにする)を表現できます。
@startuml
critical
A -> B
end
@enduml
' ┌─┐ ┌─┐
' │A│ │B│
' └┬┘ └┬┘
' │ │
' ╔══════════╪╤═══════════╪══════════╗
' ║ CRITICAL │ │ ║
' ╟───────────┘ │ ║
' ║ │ │ ║
' ║ │───────────>│ ║
' ╚══════════╪════════════╪══════════╝
' ┌┴┐ ┌┴┐
' │A│ │B│
' └─┘ └─┘
group
PlantUML にない複合フラグメントを使いたい時などに使います。例えば、「重要な箇所」や「あまり重要でない箇所」を表現するconsider
やignore
、「起きたら不正」を表現するneg
などがそれに当たります。
@startuml
group ignore[process]
A -> B
end
group consider[process]
A -> B
end
group neg
B -> A : throw error
end
@enduml
' ┌─┐ ┌─┐
' │A│ │B│
' └┬┘ └┬┘
' │ │
' ╔═════════╤╪════════════╪══════════╗
' ║ IGNORE ││ process │ ║
' ╟─────────┘│ │ ║
' ║ │ │ ║
' ║ │───────────>│ ║
' ╚══════════╪════════════╪══════════╝
' │ │
' │ │
' ╔══════════╪╤═══════════╪══════════╗
' ║ CONSIDER │ process │ ║
' ╟───────────┘ │ ║
' ║ │ │ ║
' ║ │───────────>│ ║
' ╚══════════╪════════════╪══════════╝
' │ │
' │ │
' ╔══════╤═══╪════════════╪══════════╗
' ║ NEG │ │ │ ║
' ╟──────┘ │throw error │ ║
' ║ │<───────────│ ║
' ╚══════════╪════════════╪══════════╝
' ┌┴┐ ┌┴┐
' │A│ │B│
' └─┘ └─┘