PlantUML シーケンス図で便利だと思った機能・使い方

# PlantUML シーケンス図で便利だと思った機能・使い方

単純なPlantUMLのシーケンス図は以下のように記載する。

```plantuml
@startuml

佐藤 -> 田中 : 処理A

田中 -> 田中 : 処理B

田中 --> 佐藤 : 応答

@enduml
```

```
@startuml

佐藤 -> 田中 : 処理A

田中 -> 田中 : 処理B

田中 --> 佐藤 : 応答

@enduml
```
※「田中 --> 佐藤 : 応答」は、「佐藤 <-- 田中 : 応答」と書いても同様の見ためである。

上記のような単純に矢印を引く以外にも、反復や分岐、ノート、参照など、PlantUMLでは様々な機能が用意されている。
詳細は公式ページに十分詳しく記載されているので、何かあればここを見れば良い。

http://plantuml.com/sequence-diagram

本稿では、私が個人的に便利だと思った機能や使い方についてをまとめている。
(分岐や反復、ノード、参照なども便利だが、一般的なシーケンス図の記法なので、本稿には記載していない)

## asta*っぽい見た目のシーケンス図

```plantuml
@startuml
autonumber "0:"
hide footbox

activate Alice

Alice -> Bob : 処理A
activate Bob

Bob -> Bob : 処理B
activate Bob
deactivate Bob

Bob -> Bob : 処理C
activate Bob
deactivate Bob

Bob -> Bob : 処理D
activate Bob
deactivate Bob

autonumber stop
Bob --> Alice : 応答
deactivate Bob
autonumber resume

Alice -> Bob : 処理E
activate Bob

@enduml
```

```
@startuml
autonumber "0:"
hide footbox

activate Alice

Alice -> Bob : 処理A
activate Bob

Bob -> Bob : 処理B
activate Bob
deactivate Bob

Bob -> Bob : 処理C
activate Bob
deactivate Bob

Bob -> Bob : 処理D
activate Bob
deactivate Bob

autonumber stop
Bob --> Alice : 応答
deactivate Bob
autonumber resume

Alice -> Bob : 処理E
activate Bob

@enduml
```

|記法|説明|
|:-----------------|:------------------|
|autonumber|シーケンス番号を採番する。|
|hide footbox|フッタを消す。|
|activate オブジェクト|ライフラインの活性化。処理が開始したことを表す。基本的には呼び出し先を指定する。|
|deactivate オブジェクト|ライフラインの非活性化。処理が終了したことを表す。基本的には処理結果返却時に呼び出し先を指定する。処理結果を省略する場合は処理終了時に記載する。|
|autonumber stop|シーケンス番号の採番を停止する。例では応答時の処理に場号を増やさないために使用。|
|autonumber resume|シーケンス番号の採番を再開する。|

応答時にシーケンス番号を増やさないようにするには以下をまとめて記載する。

```
autonumber stop
呼び出し先 --> 呼び出し元 : 処理結果
deactivate 呼び出し先
autonumber resume
```

単発の呼び出しの場合は以下のように記載する。

```
呼び出し元 -> 呼び出し先 : 処理内容
activate 呼び出し先
deactivate 呼び出し先
```

## 改ページ

|画像1|画像2|
|:-----------------|:------------------|
| ![001.png](https://qiita-image-store.s3.amazonaws.com/0/263164/7111be09-683c-c08d-6615-456a27efecbc.png) | ![001_001.png](https://qiita-image-store.s3.amazonaws.com/0/263164/dff05ae7-bbd8-d8f8-dbb9-eee10cefbba7.png) |

上記のようにシーケンス図を分割する場合はnewpageを使用する。

```
@startuml
autonumber
hide footbox

Alice -> Bob : 処理A
activate Bob

Bob -> Bob : 処理B
activate Bob
deactivate Bob

Bob -> Bob : 処理C
activate Bob
deactivate Bob

newpage

Bob -> Bob : 処理D
activate Bob
deactivate Bob

Bob --> Alice : 応答
deactivate Bob

@enduml
```

## 枠外とのやり取り

オブジェクトが多く登場するシーケンス図を書く際、PlantUMLでは以下のように枠外とのやり取りを示すことができる。

![002.png](https://qiita-image-store.s3.amazonaws.com/0/263164/6a17a689-fc92-d037-221a-af0740a421f0.png)

```
@startuml

[-> 佐藤: 依頼

佐藤 -> 田中 : 移譲

田中 -> 田中: 処理

田中 ->] : 移譲2

田中 --> 佐藤 : 結果

[<- 佐藤 : 結果

@enduml
```
|記法|説明|
|:--|:--|
|[->|枠外からの矢印|
|[<-|枠外への矢印|

## 中略

長いシーケンスの中の一部を記載する際、
以下の用に中略することができる。

```plantuml
@startuml
autonumber
hide footbox

Alice -> Bob : 処理A
activate Bob

Bob -> Bob : 処理B
activate Bob
deactivate Bob

...
autonumber 10

Bob -> Bob : 処理C
activate Bob
deactivate Bob

...
autonumber 20

Bob -> Bob : 処理D
activate Bob
deactivate Bob

Bob -> Bob : 処理E
activate Bob
deactivate Bob

@enduml
```

```
@startuml
autonumber
hide footbox

Alice -> Bob : 処理A
activate Bob

Bob -> Bob : 処理B
activate Bob
deactivate Bob

...
autonumber 10

Bob -> Bob : 処理C
activate Bob
deactivate Bob

...
autonumber 20

Bob -> Bob : 処理D
activate Bob
deactivate Bob

Bob -> Bob : 処理E
activate Bob
deactivate Bob

@enduml
```

|記法|説明|
|:--|:--|
|...|中略する。|
|autonumber 番号|指定した番号から採番を再開する。|

# 最後に

テキスト(DSL)で作図するメリットの1つは、コピペするだけで、誰もが全く同じ図を描けることである。
そのため、よく使うテンプレートはどこかにメモを残すことで、簡単に流用することができる。
本稿はそのための自分用のメモである。

---

# 関連記事

* [PlantUMLで見ためを変更](https://qiita.com/yhornisse/items/a1f85c876e1cadaaf348)