はじめに
ソフトウェア工学およびシステム設計の分野において、システムの挙動を効果的に伝達し可視化することは極めて重要です。このような場面で登場するのが統一モデリング言語(UML)図であり、システムのダイナミクスのさまざまな側面を表現するための多様なツールを提供しています。その中でも、状態図とアクティビティ図はそれぞれ異なる目的を持ち、システムの挙動に関する独自の洞察を提供する点で際立っています。
本稿では、状態図とアクティビティ図の世界に深く入り込み、それらの特徴、使用例、利点および欠点を明らかにすることを目的としています。これらの2つのUML図の主な違いを理解することで、ソフトウェア開発やシステムモデリングの現場で、それぞれを最適な結果を得るためにいつ使用すべきかを深く理解できるようになります。
状態図とアクティビティ図の比較
状態図とアクティビティ図は、ともにソフトウェア工学およびシステム設計において、システムの挙動の異なる側面を表現するために用いられるUML(統一モデリング言語)図の種類ですが、それぞれ異なる目的を持ち、システムの挙動の異なる側面に焦点を当てています。以下に、状態図とアクティビティ図の比較を示します:
- 目的:
- 状態図: 状態図主に、オブジェクトやシステムの動的挙動を、オブジェクトやシステムが取り得るさまざまな状態およびそれらの状態間の遷移を表現することでモデル化することに焦点を当てます。有限の状態を持つオブジェクト、たとえばソフトウェアコンポーネントや明確なライフサイクル段階を持つエンティティの挙動をモデル化する場合に特に有用です。
- アクティビティ図: アクティビティ図一方、アクティビティ図は、システムやビジネスプロセス内の活動やアクションの流れをモデル化するために使用されます。通常、システムの手続き的側面を表現し、異なるタスクやアクションがどのように実行され、互いにどのように関連しているかを示すために用いられます。
- 要素:
- 状態図:状態図の主な要素には、状態(特定の状態や状況を表す)、遷移(システムが一つの状態から別の状態へ移行する様子を示す)、イベント(状態遷移を引き起こすトリガー)が含まれます。
- アクティビティ図:アクティビティ図は、活動(タスクやアクションを表す)、制御フロー矢印(活動の順序を示す)、決定ノード(条件分岐用)、マージノード(フローの結合用)、スイムレーン(異なるアクターまたはサブシステム間で活動を分けるため)から構成されています。
- 焦点:
- 状態図:状態図は、オブジェクトやシステムの異なる状態、およびそれらの状態間の遷移が発生する条件に注目します。リアルタイムシステムや複雑な状態依存性を持つシステムのモデル化に特に有用です。
- アクティビティ図:アクティビティ図は、活動の流れや、プロセスやシステム内でのさまざまなタスクやアクションの調整方法に注目します。ビジネスプロセス、ワークフロー系システム、ソフトウェアアルゴリズムのモデル化に適しています。
- 使用法:
- 状態図: 状態図は、ソフトウェアシステム、組み込みシステム、ハードウェアコントローラーの設計においてよく使用され、オブジェクトやシステムが異なる状態にあり、特定のイベントに応じてそれらの状態間を遷移する必要がある場合に用いられます。
- アクティビティ図: アクティビティ図は、ビジネスプロセスモデリング、ソフトウェア開発、システム設計において、プロセスやワークフローに含まれるステップや活動を表すためによく使用されます。
左図に示す状態図は、特定のイベントに応じて動作を実行する状態機械の視覚的表現です。イベントの発生によって引き起こされる、システム内のさまざまな状態およびそれらの間の遷移を詳細に示しています。状態図は、外部イベントに反応する反応型システムをモデル化する際に特に有効であり、交通信号や自動販売機のようなアプリケーションがその例です。
逆に、右図に示すアクティビティ図は、システム内の活動の動的な流れを示します。決定ポイント、ループ、分岐経路を含む、活動の順序を詳細に記述しています。アクティビティ図は、構造化された活動の連続に従うシステムをモデル化する際に特に重要であり、ビジネスプロセスのモデリングや複雑なソフトウェアアルゴリズムの明確化といった、代表的な応用例があります。

状態図は、オブジェクトやシステムの状態依存的な振る舞いをモデル化するために使用され、一方、アクティビティ図は、システムやプロセス内の活動や行動の流れをモデル化するために使用されます。これらの図の選択は、モデル化したいシステムの特定の振る舞いの側面や、モデル化に必要な詳細のレベルに依存します。
状態図とアクティビティ図の例
簡単なオブジェクト、交通信号を考えてみましょう。この信号は3つの状態を持ちます。「赤」、「黄」、「緑」です。これらの状態間の遷移はタイマーによって引き起こされます。以下は、この振る舞いを状態図を使って表現する方法です:
- 状態:赤、黄、緑
- 遷移:
- 赤 → 黄(赤色の点灯時間終了時にタイマーによってトリガー)
- 黄 → 緑(黄色の点灯時間終了時にタイマーによってトリガー)
- 緑 → 赤(緑色の点灯時間終了時にタイマーによってトリガー)
この状態図では、交通信号が取りうる異なる状態と、特定のイベント(タイマー)に基づいてそれらの状態間をどのように遷移するかに注目します。
アクティビティ図の例:
では、オンラインストアの注文処理システムのようなビジネスプロセスを考えてみましょう。以下はこのプロセスの簡略化されたアクティビティ図です:
- 活動:
- 顧客が注文を提出する。
- システムが注文を確認する。
- 注文が有効な場合:
- 在庫が確認される。
- 支払いが処理される。
- 発送が手配される。
- 注文は「発送済み」とマークされる。
- 注文が無効な場合:
- 顧客に通知される。
- 注文はキャンセルされる。
このアクティビティ図では、注文処理プロセスに含まれる活動の順序に注目します。各活動は特定のタスクを表し、矢印は活動の流れを示しています。決定ポイント(有効性の確認)が、条件に基づいてプロセスの経路を決定します。
したがって、これらの例における2つの図の主な違いは次のとおりです:
- 状態図は、異なる状態(赤、黄、緑)と、イベント(タイマー)に基づいてそれらの間でどのように遷移が発生するかを表しています。
- アクティビティ図は、活動の順序(注文処理)と、特定の順序でそれらがどのように実行されるか、また条件分岐(有効性チェック)を含めて表しています。
ステートチャートを用いた自動販売機のモデル化:
このステートチャート表現では、自動販売機はアイドル状態で動作を開始し、ユーザーに硬貨を投入する機会を提供します。適切な金額が投入されると、自動販売機は「資金受領」状態に移行し、ユーザーは商品の選択が可能です。選択された商品が在庫にある場合、自動販売機は「発送」状態に移行して商品を提供し、その後アイドル状態に戻って取引を終了します。一方、選択された商品が在庫にない場合、自動販売機は「返金」状態に移行して硬貨を返金し、その後アイドル状態に戻って取引サイクルを完了します。ユーザーが十分な資金を投入しなかった場合、自動販売機は直ちに「返金」状態に移行して硬貨を返金し、取引を終了後にアイドル状態に戻ります。

アクティビティ図を用いた自動販売機のモデル化:提供されたアクティビティ図は、自動販売機システム内の順次的なイベントについての洞察を提供しています。開始ノードから始まり、ユーザーは最初に硬貨を投入するよう促されます。その後、図にはユーザーが適切な金額を投入したかどうかを確認する条件分岐が含まれています。十分な資金が検出された場合、ユーザーは商品の選択が可能になります。
その後、もう一つの条件分岐により選択された商品の在庫状況が確認されます。商品が在庫にある場合、自動販売機はその商品を発送し、図では停止ノードに遷移することで、取引の成功を示しています。逆に、選択された商品が在庫にない場合、自動販売機は硬貨の返金プロセスを開始し、その後停止ノードに遷移します。
ユーザーが十分な資金を投入しない場合、自動販売機は直ちに硬貨の返金プロセスを開始し、停止ノードに遷移します。どちらの場合も取引が終了し、ユーザーは該当する返金を受け取ることができます。

これらの表現、すなわちステートチャートまたはアクティビティ図を通じて、自動販売機の機能について明確で構造的な視点を提供し、その動作を分析し、必要に応じて改善を行うのに役立ちます。
ステート図とアクティビティ図の要約
以下は、さまざまな側面に基づいてステート図とアクティビティ図を比較した表です:
| 側面 | ステート図 | アクティビティ図 |
|---|---|---|
| 用途 |
|
|
| 使用するタイミング |
|
|
| 利点 |
|
|
| 欠点 |
|
|
| 例 |
|
|
| 注目すべき記号 |
|
|
| 主な焦点 |
|
|
| 抽象度 |
|
|
これらの違いは、特定のモデル化のニーズや表現するシステムやプロセスの性質に基づいて、状態図と活動図のどちらを選ぶかを助けるだろう。
要約
状態図と活動図はどちらもUMLツールボックスの一部であるが、システムモデリングの異なる側面に適している。状態図は、オブジェクトやシステム内の状態と遷移の複雑な動きを捉える点で優れており、明確に定義された有限状態を持つシステムには最適な選択肢である。一方、活動図はプロセスやシステム内の活動やタスクの流れを描く点で優れており、ビジネスプロセス、ワークフロー設計、ソフトウェアアルゴリズムのモデル化において不可欠である。
状態図は状態と遷移に注目するため、組み込みシステムやハードウェアコントローラなど、複雑な状態依存の振る舞いを持つシステムに最適である。しかし、主に順次的なタスクを持つプロセスでは扱いにくくなる可能性がある。一方、活動図は活動の流れやタスクの順序を描く点で優れており、特にビジネスプロセスモデリングにおいて、手続き論理の文書化に最適なツールである。ただし、状態図ほど明確に状態や条件を表現するとは限らない。
結局のところ、状態図と活動図の選択は、モデリングの目的にかかっている。オブジェクトのライフサイクルを追跡する場合や、複雑なビジネスプロセスを調整する場合にかかわらず、これらの2つのUML図の特徴を理解することで、最も適切なツールを選択でき、システム表現の明確さと効果を高めることができる。











