シーケンス図
シーケンス図は、オブジェクトが時間経過に伴ってどのようにやり取りするかを視覚化します。特定のタスクやシナリオを達成するために参加者間で交換されるメッセージの順序を示します。
基本概念
参加者
参加者は、インタラクションに関与するオブジェクトやアクターを表します。各参加者には、時間を表す下向きに延びる垂直の破線である ライフライン があります。
メッセージ
メッセージは参加者間のやり取りで、ライフライン間の水平な矢印として表示されます。時間は上から下に流れます。
アクティベーションボックス
アクティベーションボックス(実行仕様とも呼ばれます)は、参加者がアクティブに処理していることを示す、ライフライン上の細い矩形です。
参加者の作成
参加者ツールの使用
UMLシーケンス図 ページで、P を押すか、ツールバーの UML メニューから 参加者 を選び、キャンバスをクリックして参加者を配置します。新しい参加者は既存のものと一列に並びます。参加者を選択した状態で Return を押すと名前を変更できます。
参加者の種類
参加者はさまざまな種類のエンティティを表せます:
- 参加者 - 汎用のオブジェクトまたはシステムの一部(矩形)
- アクター - ユーザーまたは外部システム(棒人間)
- バウンダリ - UIまたはシステムの境界
- コントロール - プロセスまたはコントローラのロジック
- エンティティ - データまたはドメインオブジェクト
- データベース - データストア
インスペクタの 配置 タブ → UML セクションで ロールタイプ を設定します。
メッセージの作成
メッセージツールの使用
M を押してメッセージツールを有効にし、次のようにします:
- ソース参加者のライフラインをクリック
- ターゲット参加者のライフラインまでドラッグ
- 離してメッセージを作成
メッセージの種類
| 種類 | 矢印スタイル | 説明 |
|---|---|---|
| 同期 | 実線、塗りつぶし矢印 | 送信者が応答を待つ |
| 非同期 | 実線、開いた矢印 | 送信者が待たずに続行する |
| リターン | 破線、開いた矢印 | 同期呼び出しへの応答 |
| 生成 | 破線、ボックスへの開いた矢印 | 新しい参加者を作成する |
| 破棄 | Xで終わる線 | 参加者を終了する |
| 自己呼び出し | 同じライフラインに戻ってくる矢印 | 参加者が自分自身を呼び出す |
選択したメッセージの メッセージの種類 は、インスペクタの UML セクションで設定します。
メッセージのラベル
メッセージを選択し、インスペクタの UML セクションで ラベル を編集します。一般的な形式:
methodName()- シンプルなメソッド呼び出しmethodName(param1, param2)- パラメータ付き呼び出しresult := methodName()- 戻り値の代入付き呼び出し[condition] methodName()- 条件付きメッセージ(ガード)
アクティベーションボックス
アクティベーションボックスは、参加者が実行中または応答を待っている期間を示します。
アクティベーションボックスの追加
- ツールバーの UML メニューから アクティベーション を選ぶ
- 参加者のライフライン上で、アクティブな期間に沿ってドラッグする
- アクティベーションボックスがそのライフライン上に配置される
ネストされたアクティベーション
参加者が自分自身を呼び出す場合(再帰呼び出し)や、複数のネストされた呼び出しを処理する場合、アクティベーションボックスを重ねて表示できます。
フラグメント
フラグメントはメッセージをグループ化して、条件付きロジック、ループ、その他の制御フローを示します。
フラグメントの種類
| 種類 | キーワード | 目的 |
|---|---|---|
| 代替 | alt | if-else分岐 |
| オプション | opt | オプションの実行(elseなしのif) |
| ループ | loop | 繰り返し実行 |
| ブレーク | break | 囲んでいるループからの脱出 |
| 並列 | par | 並行実行 |
| クリティカル | critical | アトミック/クリティカルセクション |
| 否定 | neg | 無効なインタラクション |
| アサーション | assert | 必須のインタラクション |
| 無視 | ignore | 無視してよいメッセージ |
| 考慮 | consider | 考慮すべきメッセージ |
| 参照 | ref | 別のインタラクションへの参照 |
フラグメントの作成
- ツールバーの UML メニューから フラグメント を選ぶ
- グループ化したい参加者とメッセージの上に矩形をドラッグする
- フラグメントを選択し、インスペクタの UML セクションで フラグメントの種類 を設定する
- 必要に応じて ガード条件 を入力する
フラグメントのガード
ガードは角括弧で表される条件です:
[x > 0]- 数値条件[user.isAdmin]- プロパティチェック[else]- altフラグメントのデフォルト/else分岐
要素の並べ替え
参加者の移動
参加者を水平にドラッグして順序を変更します。接続されたメッセージも追従します。
メッセージの移動
メッセージを選択し、Cmd+↑ または Cmd+↓ を押して、シーケンス内での順序を前後に動かします。
ベストプラクティス
- メインフローから始める - まず正常系をモデル化し、その後に代替パスを追加する
- 読みやすさを保つ - ダイアグラムごとに5〜7参加者に制限する
- 意味のある名前を使う - メッセージには実際のメソッド名や説明をラベル付けする
- リターンメッセージを表示する - 特に戻り値が重要な同期呼び出しでは
- フラグメントは控えめに使う - ネストが多すぎると読みやすさが下がる
- メモを追加する - 複雑なロジックの説明には付箋を使う
例:ユーザーログインフロー
典型的なログインシーケンスには、次が含まれます:
- ユーザーが認証情報を入力する
- クライアントがサーバーにログインリクエストを送信する
- サーバーがデータベースで検証する
- データベースがユーザーレコードを返す
- サーバーがセッションを作成する
- サーバーがクライアントに成功・失敗を返す
- クライアントがUIを更新する
このフローは、同期呼び出し、リターンメッセージ、そして成功・失敗パスに使われうるaltフラグメントを示しています。