システムの振る舞いを理解するには、関数のリスト以上のものが必要です。流れを視覚的に表現する必要があります。統合モデル言語(UML)のアクティビティ図は、この目的に完璧に適しています。これは、一つのアクティビティから別のアクティビティへと制御およびデータが流れることに注目して、システムの動的側面をモデル化します。システムアナリストやソフトウェアアーキテクトにとって、表記法を習得することは、ステークホルダー間での明確なコミュニケーションに不可欠です。このガイドは、正確で意味のある図を構築するために必要な記号の詳細な解説を提供します。

🔍 基礎:主要な要素
すべてのアクティビティ図は、特定の入力点と出力点から始まります。これらのアンカーは、モデル化されているプロセスのライフサイクルを定義します。それらがなければ、図はシーケンスがどのように開始または終了するかという文脈を欠いてしまいます。
1. 初期ノード(開始点)
初期ノードは、アクティビティフローの開始点を表します。実心の黒丸として描かれます。通常、アクティビティ図ごとに1つの初期ノードしかありません。この記号は、制御フローが発生する場所を示します。入力エッジはなく、出力エッジのみを持ちます。アクションがトリガーされると、実行はこのノードで開始され、定義された制御フローに沿って進みます。
- 形状:実心の黒丸。
- 機能:入力点を示す。
- 使用法:図の上部または左端に常に配置する。
2. 終了ノード(終了点)
終了ノードは、アクティビティフローの終了を示します。太い黒い輪に囲まれた実心の黒丸として表示されます。プロセスに異なる終了条件がある場合、図に複数の終了ノードを含めることができます。たとえば、プロセスは正常に終了する場合とエラーにより終了する場合があります。各終了ノードは、システムの異なる終了状態を示します。
- 形状:輪の中の実心の円。
- 機能:プロセスの完了を示す。
- 使用法:パスの終端に配置する。
3. アクティビティ状態
アクティビティは、実際に実行されている作業を表します。丸みを帯びた長方形として描かれます。長方形の内部には、アクションの名前が記載されます。アクションが複雑な場合、さらにサブアクティビティに分解されることがあります。この詳細レベルは、プロセスの粒度を理解するのに役立ちます。
- 形状:丸みを帯びた長方形。
- 機能:タスクまたは操作を表す。
- 使用法:制御フローで接続される。
🔄 制御フローと論理
制御フローは、アクティビティが実行される順序を定義します。ノードを接続し、一つのステップから次のステップへの制御の移動を規定します。これらの接続要素を理解することは、論理を正確に描写するために不可欠です。
4. コントロールフロー(矢印)
コントロールフローは矢印頭を備えた有向線で表されます。実行の順序を示します。矢印はソースノードからターゲットノードへ向かいます。標準的な図では、コントロールフローは別に指定されない限り、順次実行を意味します。これはアクティビティをリンクする主なメカニズムです。
- 視覚的表現:矢印頭を備えた線。
- 方向:ソースからターゲットへ。
- 論理:順次依存。
5. 決定ノード
決定ノードはフローに分岐論理を導入します。ダイアモンド型で表されます。決定ノードには1つの入力コントロールフローと複数の出力フローがあります。各出力フローは、四角括弧で囲まれたガード条件でラベル付けされます。これらの条件が、制御がどのパスを取るかを決定します。条件の評価に基づき、一度に1つのパスしか選択できません。
- 形状:ダイアモンド。
- 条件:ガード式(例:[有効である])。
- 論理:パス間の排他的選択。
6. マージノード
マージノードは複数の入力フローを1つの出力フローに統合します。これもダイアモンドで描かれます。決定ノードとは異なり、マージノードは条件を評価しません。単に、入力パスのいずれかから制御が到着するのを待つだけです。分岐後にフローが収束することを保証するために、決定ノードとよくペアで使用されます。
- 形状:ダイアモンド。
- 機能:パスを統合する。
- 論理:分岐の収束。
7. フォークノードとジョインノード
複雑なシステムでは並列処理がしばしば必要です。フォークノードとジョインノードは並行処理を扱います。フォークノードは1つのコントロールフローを複数の並列フローに分割します。太い水平バーで表されます。ジョインノードはこれらの並列フローを再び1つのフローに統合します。これも太い水平バーで表されます。ジョインノードは、すべての入力分岐が完了するまで待機します。
- フォークの形状:太いバー(水平)。
- ジョインの形状:太いバー(水平)。
- 機能:並列実行と同期。
- 論理:同時実行の管理。
🏊 組織構造:スイムレーン
図が複雑さを増すにつれて、どのアクションに対して誰が責任を負っているかを把握することが難しくなる。スイムレーンは責任に基づいて活動を整理する方法を提供する。これらは図を並行するトラックに分割する。
8. スイムレーン
スイムレーンは図の分割された領域である。垂直または水平に配置できる。各レーンは特定のアクター、役割、部門、またはシステムコンポーネントを表す。レーン内に配置された活動は、その特定のエンティティによって実行される。この分離により、異なる当事者間の引継ぎポイントが明確になる。
- 視覚的特徴:上部または側面にラベルが付いた分割された領域。
- 機能:関心の分離。
- 利点:所有権と引継ぎを特定する。
9. ページ参照
アクティビティ図が1ページに収まらなくなると、ページ参照が使用される。これらは特定のアイコンを備えた小さな長方形である。フローが別のページに続くことを示す。パスの終端にあるページ参照は、別のページ上の対応する参照の開始位置を指す。これにより、複数の文書間で連続性が保たれる。
- 視覚的特徴:ページアイコンを備えた小さな長方形。
- 機能:ページ間のナビゲーション。
- 使用法:図のサイズ管理。
📦 オブジェクトフローとデータ
制御フローはシステム内の移動の唯一のタイプではない。データやオブジェクトも活動の間を移動する。オブジェクトフローは、プロセス全体におけるデータのライフサイクルを追跡する。
10. オブジェクトフロー
オブジェクトフローは制御フローに似ているが、制御ではなくデータオブジェクトの移動を表す。破線に矢印頭で描かれる。特定のアクティビティ状態でオブジェクトが作成、変更、または消費される。これにより、データの依存関係を可視化しやすくなる。
- 視覚的特徴:矢印頭付きの破線。
- 機能:データ移動の追跡。
- 論理:入出力の依存関係。
11. オブジェクトノード
オブジェクトノードは、特定の時点におけるオブジェクトの存在を表します。文書アイコンのように、折り返しのある角を持つ長方形で描かれます。オブジェクトは、入力または出力であることを示すためにアクティビティにピン止めできます。ピンは、アクティビティの境界に接続された小さな長方形です。
- 視覚的表現:折り返しのある角を持つ長方形。
- 機能:データコンテナ。
- 使用法:データの作成または消費を示す。
⚠️ 例外処理
システムは問題なく動作する場合がほとんどありません。堅牢性を確保するためには、例外をモデル化する必要があります。例外ハンドラにより、エラーが発生した際の処理を図で示すことができます。
12. 例外ハンドラ
例外ハンドラは、その内部で発生したアクティビティによる例外をキャッチする領域です。特定のラベルを付けてハンドラであることを示す長方形で描かれます。ハンドラ領域内のアクティビティが失敗した場合、プロセス全体が終了するのではなく、制御フローが例外処理ロジックに移行します。
- 視覚的表現:ハンドラとラベルされた長方形。
- 機能:エラー管理。
- 論理:フォールバック実行パス。
📋 総合的な記号リファレンス
迅速な参照のため、上記で説明した主要な記号を要約したこの表を参照してください。
| 記号名 | 視覚的表現 | 主な目的 |
|---|---|---|
| 初期ノード | 実心の黒丸 | プロセスの入口 |
| 最終ノード | リングを伴う塗りつぶされた円 | プロセスの終了 |
| アクティビティ状態 | 角丸長方形 | タスク実行 |
| 制御フロー | 実線+矢印 | 順次フロー |
| 決定ノード | ダイアモンド | 分岐論理 |
| フォーク/ジョイン | 太いバー | 並行性 |
| スイムレーン | 領域分割 | 責任の分離 |
| オブジェクトフロー | 破線+矢印 | データ移動 |
| オブジェクトノード | 折り返し角長方形 | データオブジェクト |
| 例外ハンドラ | ラベル付き長方形 | エラー処理 |
🛠 デザインガイドラインとベストプラクティス
図を作成することは、記号を正しく配置するだけではありません。読みやすさと保守性を確保するためのデザイン原則を守ることが求められます。論理の正確さにかかわらず、ごちゃごちゃした図は無意味です。
1. 簡潔に
1つの図に多すぎるアクティビティを詰め込まないようにしましょう。プロセスが複雑な場合は、サブアクティビティや別々の図に分割してください。ページ参照を使って論理的な連続性を保ちつつ、視覚的な混雑を避けてください。簡潔さは理解を助けます。
2. 一貫したフロー方向
制御フローの標準的な方向を設定してください。左から右へ、または上から下へ読むことが標準的な習慣です。不要な線の交差を避けてください。線の交差は視覚的なノイズを生み出し、図の追跡を難しくします。
3. 明確なラベル付け
すべてのノードとフローには明確なラベルを付ける必要があります。決定ノードの場合、ガード条件は簡潔である必要があります。「データを処理する」のような曖昧な用語を避け、具体的な用語「ユーザー入力を検証する」を使用してください。具体的さは曖昧さを減らします。
4. クロスリファレンスを最小限に抑える
大きな図の場合、ページ参照は必要ですが、過度なクロスリファレンスはナビゲーションを困難にします。可能な限り関連する活動を近くに配置してください。これにより、フローを追跡するための認知的負荷が軽減されます。
5. スイムレーンを標準化する
スイムレーンが明確にラベル付けされていることを確認してください。単一のレーン内で役割を混在させてはいけません。プロセスに複数のシステムが関与する場合は、各システムに専用のレーンを割り当ててください。この視覚的な分離により、統合ポイントが明確になります。
🔗 他の図との統合
アクティビティ図は孤立して存在するものではありません。他のUML図と連携することで、システム全体の視点を提供します。これらの関係を理解することで、文脈の構築が容易になります。
クラス図との関係
アクティビティは、クラス図で定義されたオブジェクトを操作することが多いです。アクティビティの入力と出力は、クラスの属性にリンクできます。これにより、データフローがデータ構造と一致することが保証されます。
状態機械図との関係
状態機械図はオブジェクトの状態に注目するのに対し、アクティビティ図はプロセスに注目します。特定の状態がアクティビティを発動する場面で、これらを組み合わせることができます。このハイブリッドアプローチは、複雑なワークフローに有用です。
🚧 避けるべき一般的な誤り
経験豊富なモデラーでさえ誤りを犯します。一般的な誤りに注意を払うことで、より高品質な図を生み出すことができます。
- 未連結の矢印:すべての矢印は有効なノードに接続しなければなりません。空の空間で終わる矢印は無効です。
- デッドロック:結合ノードがデッドロックを引き起こさないか確認してください。結合ノードは、すべての入力パスが完了していることを要求します。
- 無限ループ:ループは正当ですが、明確な終了条件があることを確認してください。制限のないループは読者を混乱させる可能性があります。
- レーンの重なり:スイムレーンは重なりあってはいけません。重なりは所有権についての曖昧さを生み出します。
- ラベルの欠落:ラベルのないフローでは、決定ノードの論理を理解することが不可能になります。
🎯 主な概念の要約
UMLアクティビティ図は、システムの振る舞いをモデル化する強力なツールです。正しい記号を使用することで、複雑な論理を明確に伝えることができます。初期ノードと終了ノードがプロセスの基盤を形成します。制御フローが順序を決定します。決定ノードが論理を導入します。フォークとジョインノードが並行処理を管理します。スイムレーンが責任を整理します。オブジェクトフローがデータを追跡します。
設計ガイドラインに従うことで、図がシステムライフサイクル全体を通じて有用なアーティファクトのまま保たれます。開発者にとっての設計図として、ステークホルダーにとっての参照資料として機能します。表記の正確さは実装の正確さに直結します。明確さと一貫性を最優先してください。
図を標準表記と照らし合わせて定期的に見直してください。すべての記号が目的を持っていることを確認してください。不要な要素は削除してください。きれいな図はプロフェッショナルな図です。このリファレンスガイドをモデリング作業の基盤としてご利用ください。











