スイムレーン図とは?フローチャートやシーケンス図との違いを調べてみた
はじめに
ユーザーの操作からWeb画面、バックエンドの認証APIまでが絡むログイン機能の設計書を作っているときに、処理の流れを図にする必要があった。
そのとき、自分はシーケンス図を書こうとしていたのだが、チームの先輩から、
「この内容なら、スイムレーン図の方が合っているかもしれない」
と指摘を受けた。
スイムレーン図という名前自体は聞いたことがあったが、改めて考えてみると、正直よく分かっていなかった。
特に気になったのが、
- 普通のフローチャートと何が違うのか
- シーケンス図とは何が違うのか
- UMLの図なのか
- どんな場面で使うのか
- 人とシステムを同じ図に書いてよいのか
- APIやDBをレーンにしてもよいのか
という点。
そこで今回は、スイムレーン図について調べつつ、同じ「ログイン処理」を題材にして、
- フローチャート
- スイムレーン図
- シーケンス図
の3種類をMermaidで実際に作って比較してみる。
単に「スイムレーン図とは何か」を調べるだけではなく、
結局、どんなときにどの図を使えばいいのか?
まで整理することを今回のゴールにする。
この記事の対象読者
この記事は、以下のような人を対象にしている。
- スイムレーン図という言葉を初めて知った人
- フローチャートとの違いが分からない人
- シーケンス図との違いが分からない人
- UMLとスイムレーン図の関係を知りたい人
- 要件定義や設計で、どの図を使えばよいか迷っている人
- Mermaidで設計図を作ってみたい人
まず結論
今回調べてみた結果、自分としては次のように整理した。
| 図 | 主に表現したいもの |
|---|---|
| フローチャート | 処理や判断がどのように進むか |
| スイムレーン図 | 処理の流れと、その処理を誰・何が担当するか |
| シーケンス図 | 要素同士がどの順番でやり取りするか |
つまり、
どの図が優れているかではなく、「何を伝えたいか」で使い分けが大事
というのが今回の結論。
例えばログイン処理なら、
「ログイン処理にどんな分岐があるのか」を確認したいならフローチャート。
「ユーザー、Web、認証APIなどが、それぞれ何を担当するのか」を確認したいならスイムレーン図。
「Webから認証API、認証APIからDBというように、誰が誰にどの順番で処理を要求するのか」を確認したいならシーケンス図。
という感じで使い分けられる。
スイムレーン図とは?
基本的な定義
スイムレーン図は、処理の流れを表現すると同時に、その処理を誰・何が担当するのかを区切って表現する図のこと。
「スイムレーン」という名前の通り、図を複数のレーンに分け、それぞれのレーンに担当する処理を配置する。
例えば、
┌──────────┬──────────┬──────────┐
│ ユーザー │ Web画面 │ 認証API │
├──────────┼──────────┼──────────┤
│ │ │ │
│ 入力 │ │ │
│ │ 認証要求 │ │
│ │ │ 認証 │
│ │ 結果表示 │ │
└──────────┴──────────┴──────────┘のような形。
通常のフローチャートに「誰が担当するのか」という情報を追加したもの、と考えると最初は理解しやすいと思う。
「スイムレーン」という名前の意味
スイムレーンを英語にすると「泳ぐレーン」の意味になる。
プールのコースを複数のレーンに分けるように、処理を担当者やシステムなどの単位で区切る。
例えば、
ユーザー
────────────
Web
────────────
認証API
────────────
DBという形で区切り、それぞれの場所に処理を配置していく。
見た目がそのまますぎるが、この形状から「Swimlane」という名前が使われている。
UMLとの関係
ここは少し注意が必要だった。
最初は、
「スイムレーン図というUMLの独立した図がある」
くらいに考えていた。
しかし、UMLではActivity Partitionという要素が定義されている。
Activity Partitionを利用すると、アクティビティ図の中で処理を担当する要素などを区切って表現できる仕組みになっている。
そのため、
「スイムレーン図=UMLの独立した図」
と単純に考えるより、
UMLのアクティビティ図では、Activity Partitionを利用してスイムレーン形式で表現できる
と理解した方が正確っぽい。
UMLの仕様については、OMGがUML 2.5.1を公開している。
フローチャートじゃだめなの?
フローチャートは、基本的に処理や判断の流れを表現するための図。
例えばログイン処理なら、
flowchart TD
Start([開始]) --> Input[ID・パスワードを入力]
Input --> Auth[認証]
Auth --> Check{認証成功?}
Check -->|Yes| Success[ログイン成功]
Check -->|No| Error[エラー表示]この図からは、
「ログイン処理がどのように進み、どこで分岐するのか」
がはっきり分かる。
一方で、
「この処理は誰が担当しているのか」
までは、この図だけだと見えてこない。
そこで「誰がやるか」を可視化するためにスイムレーン図を使う形になる。
実際にスイムレーン図を作ってみる
検証目的
今回の検証では、同じログイン処理をスイムレーン図にして、
フローチャートと比べて何が分かりやすくなるのか?
を確認してみる。
検証環境
| 項目 | 内容 |
|---|---|
| 作図ツール | Mermaid |
| 題材 | ログイン処理 |
| 比較対象 | フローチャート、スイムレーン図、シーケンス図 |
| 実行環境 | Mermaid対応環境 |
Mermaidのバージョンについては、スイムレーン構文の対応状況が変わる可能性があるため、実際に記事へ掲載する際には使用したバージョンを記録しておく。
スイムレーン図
Mermaidでは、スイムレーンを使って担当単位を分けることができる。
swimlane-beta LR
subgraph User["ユーザー"]
Input["ログイン情報を入力"]
Complete["ログイン結果を確認"]
end
subgraph Web["Web画面"]
Request["認証要求"]
Result["認証結果を表示"]
end
subgraph Auth["認証API"]
Authenticate["ユーザー認証"]
end
Input --> Request
Request --> Authenticate
Authenticate --> Result
Result --> Completeこの図では、
- ユーザー
- Web画面
- 認証API
というレーンを用意している。
同じログイン処理でも、フローチャートとは違って、
「どの処理を誰・何が担当しているのか」
が一目で分かりやすくなる。
スイムレーン図で分かったこと
実際に同じログイン処理をスイムレーンにしてみると、
処理の流れそのものが大きく変わったわけではない
ということが分かった。
変わったのは、処理に「担当」という視点が加わったこと。
例えば、
ユーザー → ログイン情報入力
Web → 認証要求
認証API → 認証処理
Web → 結果表示という関係が見えるようになる。
そのため、
「普通のフローチャートだとダメ」
ということではない。
確認したい情報が違うだけということが分かった。
レーンにAPIやDBを置くのはだめなの?
ここも気になったので確認してみた。
結論としては、
人間(ユーザー)とシステム(Web画面・API・DB)を1つのスイムレーン図に混在させて書いても全く問題ない
し、レーンを人間で分けるかシステムで分けるのも自由だと分かった。
例えば、ユーザーとWeb画面、認証APIを並べれば、「人間の操作からシステムのどのコンポーネントへ処理が引き継がれるか」という境目が非常にクリアに見えるようになる。
また、システムの処理だけを細かく説明したいなら、
ユーザー
Web
認証API
DBという区切り方が考えられるし、
一方、業務フローを説明するのであれば、
顧客
営業
経理のような人間の組織単位での区切り方が考えられる。
つまり、
「レーンには必ず人間だけ(あるいはシステムだけ)を書かないとダメ」
というルールはない。
重要なのは、
この図では、何を単位として処理を分けると理解しやすいのか?
という点。
シーケンス図じゃだめなの?
次に、最初に作ろうとしていたシーケンス図と比較してみる。
シーケンス図では、登場する要素と、それらの間で発生するメッセージの順序を表現できる。
同じログイン処理をMermaidで表現すると、
sequenceDiagram
actor User as ユーザー
participant Web as Web画面
participant Auth as 認証API
participant DB as DB
User->>Web: ログイン情報を入力
Web->>Auth: 認証要求
Auth->>DB: ユーザー情報を検索
DB-->>Auth: ユーザー情報
Auth-->>Web: 認証結果
Web-->>User: ログイン結果となる。
こちらでは、
ユーザー → Web → 認証API → DB
というやり取りの順番やリクエスト・レスポンスの往復が分かりやすくなっている。
同じログイン処理を3種類で比較してみる
ここまでの結果を整理してみる。
| 観点 | フローチャート | スイムレーン図 | シーケンス図 |
|---|---|---|---|
| 処理の流れ | ◎ | ◎ | ○ |
| 分岐 | ◎ | ◎ | ○ |
| 担当者・担当システム | △ | ◎ | ○ |
| 時系列 | ○ | ○ | ◎ |
| システム間のやり取り | △ | ○ | ◎ |
| 業務の全体像 | ◎ | ◎ | △ |
| APIなどの詳細な連携 | △ | ○ | ◎ |
この表からも分かるように、単純に「スイムレーン図がフローチャートより優れている」という話ではない。
それぞれ得意・不得意がある。
どの図を使えばいいのか問題
今回の記事で一番整理したかった部分。
自分は次のように考えると選びやすいと思った。
「処理がどう進むのか」を知りたい
まずフローチャートを検討する。
処理A
↓
処理B
↓
判断
├→ 処理C
└→ 処理D処理の流れや分岐を確認することが目的なら、シンプルなフローチャートで十分な場合が多い。
「誰・何が担当するのか」も知りたい
スイムレーン図を候補にする。
ユーザー
Web
API
DBのように分け、
「この処理は誰が担当しているのか?」
を確認する。
「誰が誰に、どの順番で処理を要求するのか」を知りたい
シーケンス図を候補にする。
A → B
B → C
C → B
B → Aのようなメッセージの流れを確認できる。
特に、
- API呼び出し
- システム間連携
- リクエスト
- レスポンス
- 呼び出し順序
などを詳しく確認したい場合に向いている。
誰が読む資料なのかも考える
今回調べていて、もう一つ重要だと思ったことがある。
それは、
「誰が読む資料なのか?」
という点。
同じログイン処理でも、読む人によって必要な情報は変わる。
例えば業務担当者に対して、
「認証APIがDBへSQLを発行して……」
と説明しても、必要以上に細かいかもしれない。
逆に開発者に対して、
「ユーザーがログインすると認証されます」
だけでは情報不足になる。
そのため、
何を伝えたいのか
だけではなく、
誰に伝えるのか
も図を選ぶときの重要なポイントだと感じた。
要件定義では、どこまで細かく書くのか?
今回、自分がシーケンス図を書こうとしたとき、
「まだ要件定義の段階なので、細かいものはいらない」
と言われた。
最初は、
「シーケンス図ではなくスイムレーン図の方が正しいのかな?」
と考えていた。
しかし今回調べてみると、必ずしもそういう意味ではなさそう。
重要なのは、
その段階で何を共有・確認する必要があるのか
という点。
例えば要件定義の初期段階なら、
ユーザー
↓
ログイン
↓
認証
↓
ログイン完了程度の全体像で十分かもしれない。
一方、詳細設計では、
Web
↓
認証API
↓
DB
↓
認証API
↓
Webという具体的な処理順序を確認する必要が出てくる場合がある。
この場合は、シーケンス図の方が適している。
つまり、
図の種類だけではなく、設計の段階に応じて必要な情報量も変わる
と考えた方が良さそう。
スイムレーン図のメリット・デメリット
メリット
最大のメリットは、
処理の流れと担当範囲を一緒に確認できること
これに尽きる。
特に、
- 人からシステムへ処理が移る
- 部署間で処理を引き継ぐ
- 複数システムが関係する
- 担当範囲を明確にしたい
といった場合に、処理の流れだけでは見えにくい責任範囲を整理できる。
デメリット
一方で、レーンを増やしすぎると図が複雑になる問題がある。
例えば、
ユーザー
Web
SPA
API Gateway
認証API
認証サービス
DB
Cache
外部認証サービスまで細かく分けてしまうと、何を伝えるための図なのか分からなくなる。
そのため、
必要な情報を表現するために必要なレーンだけ用意する
のが大事。
調べる前と調べた後
調べる前
自分は、
「スイムレーン図って、フローチャートに担当者を書いただけなのでは?」
くらいに考えていた。
また、
「シーケンス図とは何が違うんだろう?」
という疑問もあった。
調べた後
調べてみると、重要なのは図の名前よりも、
「何を伝えたいのか?」
ということだと分かった。
フローチャートなら処理の流れ。
スイムレーン図なら処理の流れと担当。
シーケンス図なら要素間のやり取りと順序。
というように、同じログイン処理でも、見るポイントを変えられる。
また、スイムレーン図についても、
「UMLのスイムレーン図という独立した図がある」
と考えていたが、UMLではActivity Partitionを利用してスイムレーン形式の表現ができる、という関係を知ることができた。
注意点・今回分からなかったこと
今回の比較では、同じログイン処理を3種類の図で表現した。
ただし、実際のプロジェクトでは、
- 「要件定義では必ずこの図」
- 「詳細設計では必ずこの図」
という共通ルールがあるとは限らない。
また、「スイムレーン図」という言葉も、UMLだけでなく業務プロセスやBPMNなど、複数の文脈で使用される。
そのため、
「スイムレーン図は必ずこの書き方」
と決めつけるのは避けた方が良さそう。
今回の検証も、あくまで同じログイン処理を異なる表現で描くことで、それぞれ何が見えやすくなるのかを比較したもの。
実際の設計では、プロジェクトで採用している記法やルール、資料の読者などを考えて判断する必要がある。
まとめ
今回は、設計書を作っているときに、
「シーケンス図よりスイムレーン図の方が合っているかもしれない」
と言われたことをきっかけに、スイムレーン図について調べてみた。
最初は、
「フローチャートと何が違うの?」
という程度の理解だった。
そこで、同じログイン処理を、
- フローチャート
- スイムレーン図
- シーケンス図
の3種類で実際に作って比較してみた。
その結果、
- フローチャート → 処理や判断の流れを見る
- スイムレーン図 → 処理の流れと担当を見る
- シーケンス図 → 要素間のやり取りと順序を見る
という違いが見えてきた。
今回の最初の疑問だった、
「スイムレーン図とシーケンス図って、何が違うの?」
については、
スイムレーン図は「処理と担当の関係」を把握しやすくする表現で、シーケンス図は「要素間のやり取りと順序」を詳しく把握するための表現
と整理した。
また、どの図を使うか迷ったときは、
- 何を伝えたいのか
- 誰に伝えるのか
- どの程度の詳細さが必要なのか
を考えると判断しやすそう。
今回調べたことで、次は「要件定義・基本設計・詳細設計で、図の粒度をどのように変えると分かりやすいのか」もスキルとして持っておいた方がよさそうだけど、どうも苦手なんだよなぁ。。。
どこかで、勉強してまとめます。。。