ユースケース図とは、システムの外にいる利用者や外部システム(アクター)と、システムが提供する機能のまとまり(ユースケース)の関係を1枚に描いたUMLの図です。 「誰が、このシステムで、何をできるのか」を、画面や処理の細部に入る前に関係者とそろえるために使います。

この記事では、記号と4つの関係(関連・include・extend・汎化)を早見表にまとめ、迷いやすい includeとextendの矢印の向きと使い分けを判定表で整理します。題材は架空の図書貸出システムで、PlantUMLのコードを3段階で育てていきます。Mermaidでの書き方と、図に添えるユースケース記述のテンプレートも用意しました。

確認環境:PlantUML 1.2026.8(OpenJDK 21、SVG・PNG出力)/Mermaid 12.1.0(@mermaid-js/mermaid-cli 12.0.0 と Chromium で描画)。掲載したコードは、エラーの例を除き、すべてこの環境で図として出力できることを確認しています。

ユースケース図の記号と関係の早見表

要素 形 意味 PlantUMLでの書き方
アクター 棒人間 システムの外から関わる人・組織・外部システムの「役割」 actor 利用者
ユースケース だ円 アクターから見て意味のある、システムの機能のまとまり usecase "図書を借りる" as UC2
システム境界 四角い枠 対象システムの範囲。枠の中がユースケース、外がアクター rectangle 図書貸出システム { … }
関連 実線 アクターがそのユースケースに関わる 利用者 --> UC2
include(包含) 破線の矢印と «include» 別のユースケースの流れを必ず取り込む UC2 ..> UC6 : <<include>>
extend(拡張) 破線の矢印と «extend» 条件を満たしたときだけ、流れを追加する UC7 ..> UC3 : <<extend>>
汎化 実線と白抜きの三角 子が親の性質を引き継ぐ(アクター同士、ユースケース同士) 利用者 <|-- 学生
拡張点 ユースケース内の区切り線の下に書く名前 extendの流れが差し込まれる位置 下の「手順3」を参照
ノート 角の折れた四角 条件や補足の説明 note right of UC7 … end note

矢印の向きと「必ず実行か条件付きか」の判定表

関係 矢印の向き(根元 → 先) 矢印の読み方 実行されるか なくても元のユースケースは成り立つか
include 取り込む側(基本) → 取り込まれる側(共通部品) 「借りる」は「認証する」を含む 必ず実行 成り立たない(流れの一部が欠ける)
extend 追加する側(拡張) → 追加される側(基本) 「延滞を通知する」は「返す」を拡張する 条件付き 成り立つ(基本だけで完結する)
汎化 子(具体) → 親(一般) 「学生」は「利用者」の一種 子が親の代わりに実行 —
関連 アクター — ユースケース 「利用者」は「借りる」に関わる アクターの操作しだい —

includeとextendは矢印の向きが逆になります。どちらも「依存している側から、依存されている側へ」矢印を引く、と覚えると迷いません。includeは基本ユースケースが共通部品を必要とするので基本から部品へ、extendは拡張ユースケースが基本を前提にしているので拡張から基本へ向かいます。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「ユースケース図の書き方と例|include・extendの違いとPlantUML」

includeとextendの違いと使い分け

3つの質問で決める

順 質問 はい いいえ
1 その流れは、元のユースケースを実行するたびに必ず通りますか 質問2へ 質問3へ
2 その流れは、2つ以上のユースケースで共通ですか(または結果だけが必要な独立した流れですか) include で切り出す 切り出さず、元のユースケースの基本フローに書く
3 その流れは、アクターにとって独立した価値がある追加の機能ですか extend で切り出す 元のユースケースの代替フローに書く

includeは「共通部品の切り出し」、extendは「条件付きの追加」です。必ず通る流れを1か所でしか使わないなら、切り出さずに基本フローへ書くほうが図が読みやすくなります。

図書貸出システムでの判定例

流れ 必ず通るか 共通か 判定
借りるときに利用者を認証する はい 予約でも使う include
予約するときに利用者を認証する はい 借りるでも使う include
返却期限を過ぎていたら延滞を通知する いいえ(期限超過のときだけ) — extend(拡張点:返却期限超過)
借りたい本が貸出中なら予約する いいえ(貸出中のときだけ) — extend(拡張点:貸出中の場合)
借りるときに貸出期限を表示する はい 借りるだけ 切り出さない(基本フローに書く)
利用者カードが読めないときに番号を手入力する いいえ — 切り出さない(代替フローに書く)

向きを逆に書いたときの読まれ方

書いたコード 読まれ方 意図と合っているか
UC2 ..> UC6 : <<include>> 「図書を借りる」は「利用者を認証する」を含む 合っている
UC6 ..> UC2 : <<include>> 「利用者を認証する」たびに「図書を借りる」が実行される 合っていない
UC7 ..> UC3 : <<extend>> 「延滞を通知する」が「図書を返す」を拡張する 合っている
UC3 ..> UC7 : <<extend>> 「図書を返す」が「延滞を通知する」を拡張する 合っていない

PlantUMLは向きが逆でも図を出力します。レビューでは、矢印を「根元は先を…する」と声に出して読むと気づきやすくなります。

ユースケース図の書き方(5つの手順)

手順 すること 決めるための問い
1 システム境界を決める 今回作る・変える範囲はどこまでか
2 アクターを洗い出す 誰が使うか。どの外部システムとやり取りするか
3 ユースケースを洗い出す 各アクターは、このシステムで何を達成したいか
4 関連・include・extend・汎化を引く 共通の流れ、条件付きの流れ、役割の親子はあるか
5 ユースケース記述を書く 事前条件・事後条件・基本フロー・代替フローは何か

ユースケース名は 「目的語+動詞」(図書を借りる、蔵書を検索する) の形で、アクターの言葉で書きます。アクターは個人名や役職ではなく、システムに対する役割で名づけます。

PlantUMLで段階的に書く(図書貸出システム)

手順1〜3:アクター・システム境界・ユースケースと関連

@startuml
left to right direction
actor 利用者
actor 司書

rectangle 図書貸出システム {
  usecase "蔵書を検索する" as UC1
  usecase "図書を借りる" as UC2
  usecase "図書を返す" as UC3
  usecase "蔵書を登録する" as UC4
}

利用者 --> UC1
利用者 --> UC2
利用者 --> UC3
司書 --> UC4
@enduml
  • left to right direction を付けると、アクターが左、ユースケースが右に並び、数が増えても読みやすくなります。
  • rectangle 名前 { … } がシステム境界です。アクターは枠の外に書きます。
  • usecase "表示名" as 別名 と別名を付けておくと、あとの関係の行が短く書けます。

手順4:includeとextendを足す

@startuml
left to right direction
actor 利用者
actor 司書

rectangle 図書貸出システム {
  usecase "蔵書を検索する" as UC1
  usecase "図書を借りる" as UC2
  usecase "図書を返す" as UC3
  usecase "蔵書を登録する" as UC4
  usecase "図書を予約する" as UC5
  usecase "利用者を認証する" as UC6
  usecase "延滞を通知する" as UC7
}

利用者 --> UC1
利用者 --> UC2
利用者 --> UC3
利用者 --> UC5
司書 --> UC4

UC2 ..> UC6 : <<include>>
UC5 ..> UC6 : <<include>>
UC7 ..> UC3 : <<extend>>
@enduml
  • ..> が破線の矢印です。: <<include>> と書いたラベルは、図では «include» と表示されます。
  • 「利用者を認証する」と「延滞を通知する」にはアクターからの関連を引いていません。利用者が直接始めるものではなく、ほかのユースケースの流れの中で実行されるためです。

完成形:汎化・外部システム・拡張点・ノートを入れる

@startuml
left to right direction
skinparam packageStyle rectangle

actor 利用者
actor 学生
actor 教職員
actor 司書
actor "通知サービス" as Mail <<system>>

利用者 <|-- 学生
利用者 <|-- 教職員

rectangle 図書貸出システム {
  usecase "蔵書を検索する" as UC1
  usecase UC2 as "図書を借りる
  --
  extension points
  貸出中の場合"
  usecase UC3 as "図書を返す
  --
  extension points
  返却期限超過"
  usecase "蔵書を登録する" as UC4
  usecase "図書を予約する" as UC5
  usecase "利用者を認証する" as UC6
  usecase "延滞を通知する" as UC7
}

利用者 --> UC1
利用者 --> UC2
利用者 --> UC3
司書 --> UC4
UC7 --> Mail

UC2 ..> UC6 : <<include>>
UC5 ..> UC6 : <<include>>
UC5 ..> UC2 : <<extend>>
UC7 ..> UC3 : <<extend>>

note right of UC7
  条件:返却日が返却期限を過ぎている
  拡張点:返却期限超過
end note
@enduml

出力した図では、次のように表示されます。

書いたもの 図での表示
利用者 <|-- 学生 学生から利用者へ、白抜き三角の実線
actor "通知サービス" as Mail <<system>> 棒人間の上に «system»
usecase UC2 as "図書を借りる -- extension points 貸出中の場合"(改行つき) だ円の中に区切り線が引かれ、下段に「extension points」「貸出中の場合」
UC5 ..> UC2 : <<extend>> 「図書を予約する」から「図書を借りる」へ、«extend» 付きの破線矢印
note right of UC7 … end note 「延滞を通知する」につながる、条件と拡張点を書いたノート

ポイントは3つです。

  • アクターの汎化:学生と教職員は、利用者ができること(検索・貸出・返却)をすべて引き継ぎます。学生だけ、教職員だけのユースケースがあれば、それぞれから個別に関連を引きます。
  • 外部システムもアクター:メールを送る「通知サービス」のように、対象システムの外にあってやり取りする相手は、人でなくてもアクターとして描きます。
  • 拡張点:PlantUMLの公式ページには拡張点専用の書き方が載っていないため、ユースケースの説明文に区切り(--)を入れて「extension points」の欄を作っています。extendの条件はノートに書くと、図だけで「いつ追加されるか」が伝わります。

ユースケース同士の汎化

検索方法のように「やり方の違い」を表したいときは、ユースケース同士の汎化を使います。

@startuml
left to right direction
actor 利用者
rectangle 図書貸出システム {
  usecase "蔵書を検索する" as UC1
  usecase "キーワードで検索する" as UC1a
  usecase "著者名で検索する" as UC1b
}
利用者 --> UC1
UC1 <|-- UC1a
UC1 <|-- UC1b
@enduml

構文エラーになる例

かっこを閉じ忘れると、PlantUMLは行番号つきでエラーを知らせます。

@startuml
actor 利用者
利用者 --> (図書を借りる
@enduml
Error line 3 in file: bad.puml
Some diagram description contains errors

Mermaidで書く

usecase-beta(Mermaid 12以降)

Mermaidの公式ドキュメントには、v12.0.0以降で使えるユースケース図(usecase-beta)が載っています。同じ図書貸出システムを書くと次のようになり、Mermaid 12.1.0で棒人間のアクター・だ円のユースケース・枠のシステム境界として描画できました。

usecase-beta
    direction LR
    actor User("利用者")
    actor Student("学生")
    actor Staff("教職員")
    actor Librarian("司書")
    actor Mail("通知サービス")

    systemBoundary Library [図書貸出システム]
        UC1("蔵書を検索する")
        UC2("図書を借りる")
        UC3("図書を返す")
        UC4("蔵書を登録する")
        UC5("図書を予約する")
        UC6("利用者を認証する")
        UC7("延滞を通知する")
    end

    Student --|> User
    Staff --|> User
    User --> UC1
    User --> UC2
    User --> UC3
    Librarian --> UC4
    UC7 --> Mail

    UC2 ..> : include UC6
    UC5 ..> : include UC6
    UC5 ..> : extend UC2
    UC7 ..> : extend UC3
要素 usecase-betaでの書き方
アクター actor ID("表示名")
ユースケース ID("表示名")
システム境界 systemBoundary ID [表示名] 〜 end
関連 User --> UC1
include UC2 ..> : include UC6
extend UC5 ..> : extend UC2
汎化 Student --|> User

includeとextendは、..> : include までがひとまとまりの演算子で、そのあとに相手を書きます。PlantUMLと同じ順(相手を先、ラベルを後)で書くと、Mermaid 12.1.0では次のエラーになりました。

usecase-beta
    actor User("利用者")
    UC2("図書を借りる")
    UC6("利用者を認証する")
    User --> UC2
    UC2 ..> UC6 : include
Error: Error parsing usecase diagram: Expecting token of type --> COLON <-- but found --> 'UC6' <-- at line 6, column 13 [102,105)

名前に beta が付いているとおり、今後の版で書き方が変わる可能性があります。使う前に、表示先のMermaidの版を確認してください。

flowchartで代用する書き方

usecase-beta に対応していない版のMermaidでは、flowchartで近い見た目を作れます。ユースケースを角丸(([ ]))、システム境界を subgraph、includeとextendをラベル付きの点線矢印で表します。

flowchart LR
    user["👤 利用者"]
    student["👤 学生"]
    staff["👤 教職員"]
    librarian["👤 司書"]
    mail["👤 通知サービス"]

    subgraph system["図書貸出システム"]
        UC1(["蔵書を検索する"])
        UC2(["図書を借りる<br>拡張点:貸出中の場合"])
        UC3(["図書を返す<br>拡張点:返却期限超過"])
        UC4(["蔵書を登録する"])
        UC5(["図書を予約する"])
        UC6(["利用者を認証する"])
        UC7(["延滞を通知する"])
    end

    student -->|汎化| user
    staff -->|汎化| user
    user --- UC1
    user --- UC2
    user --- UC3
    librarian --- UC4
    UC7 --- mail

    UC2 -. "«include»" .-> UC6
    UC5 -. "«include»" .-> UC6
    UC5 -. "«extend»" .-> UC2
    UC7 -. "«extend»" .-> UC3

flowchartにはアクターの棒人間や白抜き三角の矢印がないため、アクターは絵文字付きの四角、汎化はラベル付きの矢印で代用しています。拡張点はユースケース名の2行目に書きました。

PlantUMLとMermaidの選び方

観点 PlantUML Mermaid(usecase-beta) Mermaid(flowchartで代用)
ユースケース図専用の書き方 あり あり(v12.0.0以降) なし(見た目を似せる)
アクターの棒人間 あり あり なし
動かすのに必要なもの Java ブラウザ(JavaScript) ブラウザ(JavaScript)

ユースケース記述のテンプレート(Markdown)

ユースケース図は「何があるか」の一覧で、流れの中身までは表しません。だ円1つにつき1枚、ユースケース記述を添えると、設計やテストにそのまま使える情報になります。

# UC-00 ユースケース名(目的語+動詞)

| 項目 | 内容 |
|---|---|
| 概要 | このユースケースでアクターが達成すること(1〜2文) |
| 主アクター | ユースケースを始めるアクター |
| 支援アクター | 途中で関わる外部システムなど(なければ「なし」) |
| 起動のきっかけ | 何が起きたら始まるか |
| 事前条件 | 開始時に成り立っていること |
| 事後条件(うまくいった場合) | 終了時に成り立っていること |
| 事後条件(中断した場合) | 途中で終わったときに保証すること |
| include | 必ず取り込むユースケース |
| 拡張点 | 拡張点の名前と、基本フローのどのステップか |

## 基本フロー

1. アクターは、〜する。
2. システムは、〜する。
3. …

## 代替フロー

- 2a. (ステップ2で〜の場合)
    1. システムは、〜する。
    2. 基本フローのステップ3に戻る。

## 例外フロー

- 3a. (ステップ3で〜の場合)
    1. システムは、〜を表示して、ユースケースを終了する。

## 補足(業務ルール・非機能の要求・未決事項)

- …

記入例:UC-02 図書を借りる

# UC-02 図書を借りる

| 項目 | 内容 |
|---|---|
| 概要 | 利用者が、貸出カウンターの端末で図書を借りる手続きをする |
| 主アクター | 利用者(学生・教職員) |
| 支援アクター | なし |
| 起動のきっかけ | 利用者が端末で「借りる」を選ぶ |
| 事前条件 | 利用者が登録済みである。借りる図書が手元にある |
| 事後条件(うまくいった場合) | 貸出記録が登録され、図書の状態が「貸出中」になり、返却期限が決まっている |
| 事後条件(中断した場合) | 貸出記録は登録されず、図書の状態は変わらない |
| include | UC-06 利用者を認証する |
| 拡張点 | 貸出中の場合(ステップ4) |

## 基本フロー

1. 利用者は、端末で「借りる」を選ぶ。
2. システムは、「UC-06 利用者を認証する」を実行する。
3. 利用者は、図書のバーコードを読み取らせる。
4. システムは、図書の状態が「貸出可」であることを確かめる。
5. システムは、貸出記録を登録し、図書の状態を「貸出中」にする。
6. システムは、返却期限(貸出日の14日後)を表示する。
7. 利用者は、内容を確かめて手続きを終える。

## 代替フロー

- 3a. (ステップ3でバーコードを読み取れない場合)
    1. 利用者は、図書の管理番号を手で入力する。
    2. 基本フローのステップ4に戻る。
- 7a. (ステップ7で続けて別の図書を借りる場合)
    1. 基本フローのステップ3に戻る。

## 例外フロー

- 4a. (ステップ4で図書の状態が「貸出中」の場合。拡張点:貸出中の場合)
    1. システムは、その図書が貸出中であることを表示する。
    2. 利用者が希望すれば、「UC-05 図書を予約する」を実行する。
    3. ユースケースを終了する。
- 5a. (ステップ5で貸出冊数の上限を超える場合)
    1. システムは、上限を超えることを表示し、貸出記録を登録せずに終了する。

## 補足(業務ルール・非機能の要求・未決事項)

- 貸出冊数の上限:学生5冊、教職員10冊。
- 貸出期間:14日。
- 未決事項:返却期限が休館日に当たる場合の扱い。

図の include(UC-06)と拡張点(貸出中の場合)が、記述のステップ2とステップ4にそれぞれ対応しています。図と記述で同じ名前・同じ番号を使うと、どちらかを直したときにもう一方の直し忘れに気づけます。

ユースケース一覧(表計算ソフトに貼れるタブ区切り)

ID  ユースケース名 主アクター   include extend(拡張点) 記述の状態
UC-01   蔵書を検索する 利用者 なし  なし  作成済み
UC-02   図書を借りる  利用者 UC-06   なし  作成済み
UC-03   図書を返す   利用者 なし  なし  作成中
UC-04   蔵書を登録する 司書  なし  なし  作成前
UC-05   図書を予約する 利用者 UC-06   UC-02(貸出中の場合)   作成前
UC-06   利用者を認証する    (他のユースケースから実行)  なし  なし  作成済み
UC-07   延滞を通知する (他のユースケースから実行)  なし  UC-03(返却期限超過)   作成前

つまずきやすい点と直し方

つまずきやすい点 直す前 直した後
画面の操作をユースケースにする 「貸出ボタンを押す」「バーコードを読む」 「図書を借りる」(操作は基本フローに書く)
システム内部の処理をユースケースにする 「貸出テーブルを更新する」 「図書を借りる」の事後条件に書く
機能を細かく分けすぎる だ円が30個以上並び、includeでつながっている アクターの目的の単位にまとめ、手順は記述へ移す
includeとextendの向きが逆 UC6 ..> UC2 : <<include>> UC2 ..> UC6 : <<include>>
extendの条件が図からわからない «extend» の矢印だけ 拡張点の名前と、条件を書いたノートを添える
アクターを個人名や部署名で書く 「田中さん」「総務部」 「利用者」「司書」(システムに対する役割)
処理の順番を矢印で表そうとする ユースケース同士を実線の矢印でつなぐ 順番は基本フローや、処理の流れを表す別の図で表す

レビューで確認すること

確認すること 見るところ
すべてのユースケースに、関連・include・extendのどれかがつながっているか 孤立しただ円がないか
すべてのアクターに、1つ以上の関連があるか 孤立した棒人間がないか
ユースケース名が「目的語+動詞」で、アクターの言葉になっているか 画面名・テーブル名が入っていないか
includeの矢印が「基本 → 共通部品」になっているか 矢印を声に出して読む
extendの矢印が「拡張 → 基本」で、拡張点と条件が書かれているか ノート、ユースケース記述
図のユースケースと、ユースケース記述のIDと名前が一致しているか 一覧表と突き合わせる

よくある質問

Q. includeとextendのどちらを使うか迷ったら、どうすればよいですか? A. まず「その流れがなくても元のユースケースは完結するか」を考えます。完結しないなら include、完結するなら extend です。どちらとも言いにくい小さな流れは、切り出さずにユースケース記述の基本フローや代替フローに書くと、図がすっきりします。

Q. 外部システムや定期実行の仕組みもアクターになりますか? A. なります。アクターは「システムの外にあって、システムとやり取りする役割」なので、人に限りません。この記事の例では「通知サービス」を <<system>> 付きのアクターとして描きました。

Q. ユースケースはいくつくらいが適切ですか? A. 数に決まりはありませんが、1枚の図で関係者が全体を見渡せることが目安です。だ円が増えて読みにくくなったら、アクターやサブシステムごとに図を分け、細かい手順はユースケース記述に移します。

Q. 拡張点は必ず書く必要がありますか? A. extendが1つだけで条件が明らかなら、省いても伝わります。同じユースケースに複数のextendがあるときや、条件が複雑なときは、拡張点の名前と条件を書いておくと、どの位置で何が追加されるかを取り違えずに済みます。

まとめ

  • ユースケース図は「誰が、このシステムで、何をできるか」を描く図で、アクター・ユースケース・システム境界と4つの関係でできています。
  • includeは必ず実行される共通部品、extendは条件付きの追加です。なくても元のユースケースが完結するかどうかで見分けます。
  • 矢印はどちらも「依存している側 → 依存されている側」。includeは基本から部品へ、extendは拡張から基本へ向かいます。
  • PlantUMLでは rectangle で境界、..> と <<include>>・<<extend>> で関係を書き、拡張点は説明文の区切りで表せます。
  • Mermaidは12以降の usecase-beta で専用の図が書け、flowchartでも代用できます。
  • だ円1つにつきユースケース記述を1枚。事前条件・事後条件・基本フロー・代替フローを書き、図と同じIDと名前を使います。

参考・出典

  • PlantUML「Use Case Diagram」(アクター・ユースケース・rectangle・矢印・ノート・説明文の区切り): https://plantuml.com/use-case-diagram
  • Mermaid「Use Case Diagram」(usecase-beta、v12.0.0以降): https://mermaid.js.org/syntax/usecase.html
  • IBM Documentation「Extend relationships」(拡張から基本への破線矢印、«extend»、拡張点、条件付きの振る舞い): https://www.ibm.com/docs/en/rational-soft-arch/9.7.0?topic=diagrams-extend-relationships
  • IBM Documentation「Include relationships」(基本から包含ユースケースへの破線矢印、«include»、共通の振る舞い): https://www.ibm.com/docs/en/dma?topic=diagrams-include-relationships

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「ユースケース図の書き方と例|include・extendの違いとPlantUML」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?