はじめに
ソフトウェア工学において、ステークホルダーの要件と技術的実装の間のギャップを埋めるのは、しばしば開発の最も困難な段階である。その ユースケース駆動アプローチ は、この問題を解決するための構造的で反復的な手法を提供する。ユーザーがシステムとどのように相互作用するかに注目することで、 ユーザーがシステムとどのように相互作用するか特定の目標を達成するために、このアプローチは要件が明確で、検証可能であり、設計資産に直接追跡可能であることを保証する。
本書は、 ユースケース駆動アプローチの完全なステップバイステップの説明を提供する。高レベルの要件から詳細な設計へと移行する。単一の継続的な例として、 オンライン注文管理システムを用いて各段階を説明し、プロセス全体を通して一貫性と明確性を確保する。
手法の概要
ユースケース駆動アプローチは自然なトップダウンの進行をとる。各段階は前の段階を精緻化し、正確性を高め、曖昧さを減らす。

なぜこの順序が重要なのか?
- ユースケース図: 機能と範囲の完全なインベントリを提供する。スキャンが速く、ステークホルダーが システムが何を行うかについて合意するのに適している。
- ユースケースの説明:事前条件、事後条件、アクター、優先度を明確にすることで曖昧さを排除する。これにより、動作契約が「固定」される。
- イベントの流れ:契約を具体的で検証可能なステップに変換する。これにより、テストケースと技術設計の原素材が得られる。
- アクティビティ/シーケンス図:コードへの橋渡しとなる。参加するオブジェクト、それらの責任、メッセージのやり取り、正確な分岐ルールを特定する。
ステージ1:ユースケース図(要件)
ユースケース図は、誰がシステムとやり取りする(アクター)であり、何が彼らが行えること(ユースケース) およびそれらの間の関係を含めて。
主要な概念
- 主なアクター: ユースケースを開始する(左側に配置)。
- 補助的アクター: システムを支援するか、通知を受け取る(右側に配置)。
- システム境界: システムの範囲を定義する長方形。
<<include>>: 必須の共有振る舞いを表す。ユースケースAがユースケースBを含む場合、Bが発生しなければAは完了しない。必須である Aが完了するためには発生しなければならない。<<extend>>: オプションの振る舞いを表す。ユースケースBは、特定の条件下でのみユースケースAを拡張する。
例:オンライン注文管理システム

@startuml
skinparam linetype ortho
skinparam defaultFontSize 14
skinparam defaultFontColor #333333
skinparam vpDiagramType UseCaseDiagram
skinparam actor {
BackgroundColor #E8F5E9
}
skinparam usecase {
BackgroundColor #BBDEFB
BorderColor #1976D2
ArrowColor #1976D2
}
left to right direction
actor "顧客n(主な)" as cust
actor "倉庫n(補助的)" as wh
rectangle "注文管理システム" {
usecase "注文する" as UC1
usecase "注文をキャンセル" as UC2
usecase "注文を追跡" as UC3
usecase "ログイン" as UC4
usecase "請求書を印刷" as UC5
}
cust -[#black]- UC1
cust -[#black]- UC2
cust -[#black]- UC3
UC1 -[#crimson]- wh
UC2 -[#crimson]- wh
UC1 ...> UC4 : <<include>>
UC2 ...> UC4 : <<include>>
UC3 ...> UC4 : <<include>>
UC1 <... UC5 : <<extend>>
@enduml
図の分析:
- その顧客注文の作成、キャンセル、追跡を開始する。
- その倉庫注文の作成およびキャンセルに関与している(在庫更新のためと思われる)。
- ログイン注文作成、キャンセル、追跡に含まれており、これらの操作には認証が必須であることを意味する。
- 請求書の印刷注文作成を拡張しており、注文作成後に発生する可能性のあるオプションステップであることを意味する。
段階2:ユースケース記述(仕様)
図はユースケースの名前を示しているが、詳細が欠けている。そのユースケース記述タブは各ユースケースの正確な契約を規定している。
例:UC-01 注文作成
| 項目 | 値 |
|---|---|
| ユースケースID | UC-01 |
| 名前 | 注文作成 |
| 主なアクター | 顧客 |
| 補助アクター | 倉庫 |
| 事前条件 | 顧客はログイン済み;カートに少なくとも1つの商品が含まれている;商品は在庫あり |
| 事後条件(成功時) | 注文はステータスを保持して永続化される確認済み;支払いが回収される;追跡番号が発行される |
| 事後条件(失敗時) | 注文は作成されない;カートは変更なし;ユーザーに理由が通知される |
| メインフロー | → ステージ3を参照 |
| 代替/例外フロー | 在庫不足;支払いが拒否される |
| 優先度 | 高 |
目的:このステージでは、必ず真でなければならないことを定義する前ユースケースが実行される前(事前条件)および成立しなければならないこと後(事後条件)、明確な成功/失敗基準を設定する。
ステージ3:イベントの流れ(シナリオ)
これはアプローチの行動的中心部です。「注文する」ユースケースは、次のようになります。シナリオスクリプト—詳細な設計図が存在する前に書かれる番号付きステップの連続。
主成功シナリオ(基本フロー)
- 顧客がログインする。
- 顧客が選択された商品を含むカートを提出する。
- システムはカートの内容と在庫の可用性を検証する。
- システムは決済ゲートウェイを通じて合計金額を請求する。
- システムは注文を保存し、ステータスを
確認済み. - システムは注文IDを含む注文確認を返す。
- システムは倉庫に商品のピッキング、梱包、出荷を通知する。
代替シナリオ
- 3a. 在庫不足: システムは利用できないアイテムを報告し、カートに戻ります。
- 4a. 支払い拒否: システムは顧客に通知し、注文を作成しません。
キーコンベンション: 各シナリオは記述内のステップに直接対応します。これらのフローが次の段階でのアクティビティ図およびシーケンス図の基礎となります。
段階4:詳細設計(シーケンス図およびアクティビティ図)
この段階では、システムのどの側面に注目するかに基づいて記法を選択します。
- シーケンス図: 強調する点:ライフライン、メッセージの順序、オブジェクト間の責任。クラスやメソッドの発見に適しています。
- アクティビティ図: 強調する点:レーン/参加者を通じた制御フローと意思決定。プロセスおよび役割の責任を文書化するのに適しています。
4A. シーケンス図(インタラクション視点)

@startuml
title 注文の提出 シーケンス図
skinparam linetype ortho
skinparam defaultFontSize 14
skinparam defaultFontColor #333333
skinparam sequenceParticipant underline
skinparam vpDiagramType InteractionDiagram
skinparam {
FontSize 14
ArrowColor #4A4A4A
ArrowFontColor #4A4A4A
BackgroundColor #FFFFFF
BorderColor #DEDEDE
FontColor #333333
Participant {
BorderColor #0077B6
BackgroundColor #F0F8FF
FontColor #005691
}
Actor {
BorderColor #6A057F
BackgroundColor #F5EEF8
FontColor #510363
}
Sequence {
ArrowThickness 2
LifeLineBorderColor #444444
LifeLineBackgroundColor #F7F7F7
BoxBorderColor #AAAAAA
BoxBackgroundColor #FFFFFF
BoxFontColor #333333
}
}
actor "顧客" as USR
participant "注文サービス" as OS
participant "決済ゲートウェイ" as PG
database "注文DB" as DB
activate USR
USR -> OS : submitOrder(items)
activate OS
alt 検証と決済
OS -> OS : validateCart(items)
OS -> PG : charge(total)
activate PG
PG --> OS : paymentOk
deactivate PG
OS -> DB : saveOrder(status=confirmed)
activate DB
DB --> OS : orderId
deactivate DB
OS --> USR : orderConfirmation(orderId)
else 在庫不足
OS -> DB : checkStock(items)
activate DB
DB --> OS : stockUnavailable
deactivate DB
OS --> USR : error("在庫切れ")
else 決済失敗
PG --> OS : paymentFailed
OS --> USR : error("決済が拒否されました")
end
deactivate OS
@enduml
主要な概念:
- 同期呼び出し: 実線矢印(
->). - 返信: 破線矢印(
-->). - アクティベーションバー: オブジェクトの処理の寿命を示す。
alt結合フラグメント: 3つのシナリオ(成功、在庫不足、決済失敗)をまとめ、ステージ3のイベントフローを直接反映している。
4B. アクティビティ図(プロセス視点)

@startuml
<style>
element { MaximumWidth 150 }
start { Backgroundcolor #00695C }
stop { Backgroundcolor #C2185B }
activity{ Backgroundcolor #81D4FA; MaximumWidth 150 }
diamond { Backgroundcolor #FFB74D; MaximumWidth 80 }
arrow { LineColor #424242; Fontcolor #000000 }
swimlane{ Fontcolor #000000; FontSize 14 }
</style>
title 注文の提出 アクティビティ図
|#F0F8FF|顧客|
start
:ログイン;
:カタログを閲覧;
:商品をカートに追加;
if (チェックアウト準備完了?) then (はい)
:チェックアウトへ進む;
else (いいえ)
:閲覧に戻る;
stop
endif
|#E8F5E9|システム|
:カートを検証;
:決済を処理;
if (決済承認?) then (はい)
:注文を作成(ステータス=確認済み);
else (いいえ)
:決済失敗を通知;
endif
|#F5EEF8|倉庫|
if (決済承認?) then (はい)
:商品をピック&パック;
:注文を発送;
:追跡番号を送信;
stop
else (いいえ)
stop
endif
@enduml
主要なコンセプト:
- スイムレーン: 各アクションを責任者(顧客、システム、倉庫)に割り当てます。
- 決定ノード:
if/then/else/endif構造は分岐シナリオをエンコードします。 - 開始/停止マーカー: プロセスの開始と終了を区別します。
PlantUMLの主なポイント
PlantUMLを使ってこのアプローチを効果的にモデル化するには、以下の構文の基本を思い出してください:
- ユースケース図:
- 使用する:
usecase関数のために使用します。 - 使用する:
...>に対して<<include>>関係。 - 使用する:
<...に対して<<extend>>関係。 - 使用する:
rectangle "システム名" {}システムの境界を定義するために使用する。
- 使用する:
- シーケンス図:
- 以下のいずれかを使用して参加者を定義する:
アクター,参加者、またはデータベース. - 使用する:
->同期呼び出しに使用し、-->返信用。 - 使用する:
activateおよびdeactivateオブジェクトの寿命を表示するため。 - 使用する:
alt,else、およびend代替のフローを表す結合された断片用。
- 以下のいずれかを使用して参加者を定義する:
- アクティビティ図:
- 使用する:
|#color|LaneName|スイムレーンを定義するため。 - 使用する:
:action;アクティビティを示す。 - 使用する:
if/else/endif決定ノードを示す。 - 使用する:
startおよびstopプロセスの境界を示す。
- 使用する:
結論
このユースケース駆動アプローチは単なる文書作成技術以上のものである。それは段階的な洗練のためのフレームワークである。まず全体像(ユースケース図)から始め、具体的な動作(イベントフロー)および技術的相互作用(シーケンス/アクティビティ図アクティビティ図)に掘り下げることで、チームはすべてのコード行が検証されたユーザーのニーズに遡ることを確実にできる。
この手法は、ステークホルダーと開発者間の誤解のリスクを低減し、明確なシナリオを通じてテストを容易にし、堅牢でユーザー中心のシステム設計を実現する。シンプルな電子商取引プラットフォームから複雑なエンタープライズシステムを構築する場合でも、この構造的な進行に従うことで、明確な要件と高品質なソフトウェアが得られる。













