1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者向け:シーケンス図で使う図形と最低限のルール

1
Posted at

設計レビューで「シーケンス図で描いて」と言われて手が止まる人向けに、使う図形と描き方のルールをまとめた。
記法はUMLに沿い、図はすべてMermaidで再現できる形で載せる。

縦が時間、横が登場人物

シーケンス図は「誰が、どの順番で、誰にメッセージを送るか」を表す図。
横に参加者を並べ、時間は上から下へ流れる。下にある矢印ほど後に起こる。

フローチャートが「処理の手順」を描くのに対し、シーケンス図は「やりとり」を描く。
この違いを押さえておくと、何を図に入れるべきか迷いにくい。

基本の図形

図形 名前 意味
上部の四角 ライフラインの頭(参加者) 登場するオブジェクトや人。名前:クラス名 と書くこともある
棒人間 アクター システム外の人間。四角で描いても間違いではない
下に伸びる破線 ライフライン その参加者が存在している時間
縦長の細い四角 実行仕様(活性区間) その参加者が処理をしている最中
実線+塗りつぶし三角 同期メッセージ 呼び出して、返事が来るまで待つ
実線+開いた矢じり 非同期メッセージ 送りっぱなしで待たない
破線+開いた矢じり 戻りメッセージ 呼び出しへの返事
自分に戻る矢印 自己メッセージ 自分自身の処理を呼ぶ
左上に見出し付きの枠 複合フラグメント 条件分岐やループの範囲

全部入りの例:ログイン処理

上の図形をひととおり使うとこうなる。

+ と - は実行仕様(活性区間)の開始と終了。
->>+W で Webサーバー の処理が始まり、deactivate W で終わる。

矢印の描き分け

矢印の種類で意味が変わるので、ここが一番大事。

種類 見た目 Mermaid記法 使いどころ
同期メッセージ 実線+塗り矢じり A->>B 関数呼び出し、HTTPリクエスト
戻りメッセージ 破線+矢じり B-->>A 戻り値、レスポンス
非同期メッセージ 実線+開いた矢じり A-)B キュー投入、イベント発行
自己メッセージ 自分へ戻る矢印 A->>A 内部メソッド呼び出し

手書きだと同期と非同期の矢じりが曖昧になりやすい。
「待つのか、待たないのか」はレビューで必ず突っ込まれるので描き分けること。

複合フラグメント

条件分岐や繰り返しは枠で囲み、左上に種類を書く。

種類 意味 コードでいうと
alt 条件分岐。破線で区切り、各区画に [条件] を書く if / else
opt 条件を満たす時だけ実行 elseのない if
loop 繰り返し。loop [3回] のように条件を添える for / while
par 並行処理 Promise.all など

描くときのルール

  • 時間は必ず上から下に流す
  • 矢印には送る内容(メソッド名、リクエスト内容)を書く
  • 最初に動き出す参加者を左端に置く
  • 1枚の図には1つのシナリオだけを描く

最後の項目は特に重要。「ログイン成功時」「パスワード誤り時」のようにシナリオ単位で分けると読みやすくなる。

初心者がやりがちなミス

戻りメッセージを全部描こうとして図が煩雑になる。
戻り値が自明なら省略してよい。UMLでも戻りの記載は任意。

alt を入れ子にしすぎる。
分岐が3段以上になったら、シナリオを分けて別の図にしたほうがいい。

フローチャートと混同して、判断の手順まで細かく書いてしまうことも多い。
「AがBに何を頼むか」に絞り、内部の判断ロジックは別の図か本文に回す。

手で描くのが面倒なら、MermaidやPlantUMLのようにテキストから生成するツールを使うと、矢印の種類を間違えにくい。
差分がGitで追えるので、設計書に貼る図としても扱いやすい。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?