UML Guide
クラス図・シーケンス図 作成ガイド
クラス図・シーケンス図の作成課題に取り組むための資料です。課題の進め方、UML記法のポイント(可視性・多重度・関連の種類・メッセージの種類など)、そしてMermaidを使った具体的な作図例を、手順とあわせて紹介します。
この教材は日本語のみで提供しています。 This learning material is available in Japanese only.
進め方の全体像Overview
5ステップで、要求からシーケンス図まで
対象システムの説明を読み、クラス図で静的な構造を、シーケンス図で動的な振る舞いを描く。最後に2つの図の整合性を確認し、見直してから提出する。基本はクラス図からシーケンス図の順だが、行き来しながら洗練させてよい。
要求を読む
対象システムの説明・ユースケースから、登場する「モノ」と「動き」を洗い出す。
クラス図
「モノ」=クラスとその属性・操作・関連を整理し、静的構造を描く。
シーケンス図
「動き」=ある操作が実行される際のオブジェクト間メッセージを時系列で描く。
整合性確認
2つの図の登場オブジェクト・メソッド名が一致しているか相互チェックする。
見直し・提出
記法・粒度・可読性をチェックリストで確認して提出する。
位置づけWhere they fit
UMLと2種類の図の位置づけ
UML(統一モデリング言語)は、ソフトウェアの構造や振る舞いを図で表す共通の記法です。本課題で扱うのは、代表的な次の2つの図です。
クラス図(Class Diagram)
「システムは何でできているか」を表す。
- クラス(モノ・概念)とその属性・操作
- クラス間の関連・継承・多重度
- 時間の概念は持たない(スナップショット)
- 例:会員・注文・商品の関係を表す
シーケンス図(Sequence Diagram)
「処理がどう進むか」を時系列で表す。
- オブジェクト(ライフライン)間のやりとり
- メッセージ(メソッド呼び出し)の順序
- 上から下へ時間が流れる
- 例:ログイン処理の手順を表す
Part 1
クラス図:システムの静的な構造を表す図
クラスの読み方(名前・属性・操作・可視性)、関連・多重度・集約・コンポジション・継承、作成手順とよくある間違い、Mermaidでの作図例までを順に見ていきます。
基本の構成
クラス図は「クラス(箱)」と「クラス間の線(関連)」で構成されます。1つのクラスは、上からクラス名・属性・操作の3つの区画を持ちます。
1人のUserは0個以上のOrderを持つ(多重度 1 対 *)。区画は上から順にクラス名・属性・操作。
- クラス名:そのクラスが表すモノ・概念(名詞)。先頭は大文字、単数形が基本(例:Order, BankAccount)
- 属性(attributes):クラスが持つデータ。書式は「可視性 名前 : 型」(例:-balance : int)
- 操作(operations):クラスができる振る舞い。書式は「可視性 名前(引数) : 戻り値」(例:+deposit(a:int) : void)
記法ポイント:可視性(visibility)
属性・操作の先頭につける記号で、外部からのアクセス範囲を表します。情報隠蔽の観点から、属性は原則 private(-)にします。
| 記号 | 名称 | アクセスできる範囲 | 目安 |
|---|---|---|---|
| + | public | どのクラスからでも | 公開する操作 |
| - | private | 同じクラス内のみ | ほぼ全ての属性 |
| # | protected | 同じクラス+サブクラス | 継承で使う要素 |
| ~ | package | 同じパッケージ内 | 限定的に使用 |
記法ポイント:関連と多重度
クラス同士のつながりを「関連(線)」で、対応する個数を「多重度」で表します。
| 多重度 | 意味 |
|---|---|
| 1 | ちょうど1 |
| 0..1 | 0または1(任意) |
| * / 0..* | 0以上(何個でも) |
| 1..* | 1以上 |
| 2..5 | 2〜5個 |
読み方の例:User 側の多重度が 1、Order 側の多重度が * の関連は、「1人の会員は0個以上の注文を持ち、1つの注文は1人の会員に属する」ことを表す(会員・注文・商品の関連と多重度は、この後の作図例で使用)。
記法ポイント:関連の種類(線の使い分け)
つながりの強さ・意味によって、線と矢印を使い分けます。迷ったら「関連」で十分です。
左のA・Bはクラスを表す模式図。線の実線・破線と端の記号(ひし形・三角)で関連の種類が変わる。
| 種類 | 意味 | Mermaid記法 | 例 |
|---|---|---|---|
| 関連(association) | 2つのクラスに構造的なつながりがある。最も基本 | -- | 会員と注文 |
| 依存(dependency) | 一時的に利用する(引数・戻り値など) | ..> | 注文と日付 |
| 集約(aggregation) | 全体と部分。部分は単独でも存在できる | o-- | チームと社員 |
| コンポジション(composition) | 強い全体と部分。全体が消えると部分も消える | *-- | 注文と明細 |
| 継承/汎化(generalization) | is-a。子は親の一種(中空三角) | <|-- | 会員と利用者 |
クラス図の作成手順(6ステップ)
名詞を抜き出す
要求文・ユースケースから登場する「モノ・概念」(名詞)を洗い出す。これがクラス候補になる。
クラスを選ぶ
候補から重要なものをクラスにする。単なる属性で済むもの(氏名・金額など)は除外する。
属性・操作を入れる
各クラスが「持つデータ」と「できること」を書く。可視性(- + #)も忘れずに付ける。
関連を引く
関係するクラスを線でつなぐ。動詞(〜が〜を持つ/使う)が関連のヒントになる。
多重度を付ける
関連の両端に個数(1, *, 0..1 など)を書く。線の種類(集約・継承)も判断する。
見直す
孤立クラスがないか、命名は統一されているか、粒度は適切かを確認する。
よくある間違い(Bad → Good)
Mermaidで描く①:基本(classDiagram)
Mermaidはテキストで図を書ける記法。先頭に classDiagram と書き、class でクラスを定義する。
classDiagram
class User {
-id : int
-name : String
+login() bool
}
class Order {
-orderId : int
-date : Date
+total() int
}
%% 関連 + 多重度 + ラベル
User "1" --> "*" Order : places
上のコードが描画されると、区画つきのUserクラス・Orderクラスと、多重度付きの関連(本節冒頭の図)になる。
Mermaidで描く②:関連・継承の記号
クラス間の記号を覚えれば、関連の種類を簡単に書き分けられる。
classDiagram
User <|-- Member
%% 継承(汎化):中空三角
Order "1" *-- "*" OrderItem
%% コンポジション:黒ひし形
OrderItem "*" --> "1" Product
%% 関連 + 多重度
Order ..> Coupon
%% 依存:破線矢印
| 記号 | 関連の種類 |
|---|---|
| <|-- | 継承(汎化) |
| *-- | コンポジション |
| o-- | 集約 |
| --> | 関連(矢印あり) |
| ..> | 依存 |
| <|.. | 実現(インタフェース実装) |
Part 2
シーケンス図:オブジェクト間のやりとりを時系列で表す図
ライフライン・実行仕様(アクティベーション)・メッセージ、同期/非同期/返信メッセージの書き分け、alt・opt・loopによる条件分岐と繰り返し、作成手順とMermaidでの作図例までを見ていきます。
基本の構成
上部に並ぶオブジェクト(ライフライン)の間で、メッセージが上から下へ時間順にやりとりされる様子を表します。
ライフライン=オブジェクト+点線。細い矩形=実行仕様(アクティベーション、処理中)。実線+塗り矢じり=呼び出し、破線+線矢じり=戻り(返信)。番号順に時間が上から下へ流れる。
記法ポイント:メッセージの種類
| 種類 | 意味 | Mermaid記法 |
|---|---|---|
| 同期メッセージ | 相手の処理完了を待つ呼び出し。通常のメソッド呼び出し(実線+塗り矢じり) | ->> |
| 返信メッセージ | 呼び出し元へ結果を返す。省略されることもある(破線) | -->> |
| 非同期メッセージ | 完了を待たずに次へ進む。並行処理など(実線+線矢じり) | -) |
| 自己メッセージ | 同じオブジェクト内のメソッド呼び出し | 同じ相手を指定 |
矢じりの形と線(実線/破線)で意味が変わる。まずは「同期(->>)+返信(-->>)」を押さえればよい。
記法ポイント:制御構造(alt / opt / loop)
複数のメッセージを枠(フラグメント)で囲み、条件分岐や繰り返しを表現します。
| 制御構造 | 意味 | 例 |
|---|---|---|
| alt(分岐) | 条件で処理が分かれる(if / else)。枠を区切り条件を併記する | [valid] / [invalid] |
| opt(任意) | 条件を満たすときだけ実行する(elseなし)。省略可能な処理に使う | [在庫あり] |
| loop(繰り返し) | 条件の間、処理を繰り返す。枠に繰り返し条件を書く | [全明細について] |
まず verify(id, pw) を呼んで結果(result)を受け取り、その結果で分岐する。alt枠の左上タブに条件(valid)、区切り線の下にelseの条件(invalid)を書く。Mermaidでは alt ... else ... end で囲む。
Mermaidでは alt / opt / loop ... end で囲む。altの分岐はelseで区切る。枠は入れ子(ネスト)にもできるが、使いすぎると読みにくいので主要な流れに絞る。
シーケンス図の作成手順(6ステップ)
ユースケースを1つ選ぶ
「ログインする」「商品を検索する」など、1つの代表的な処理シナリオを決める。
登場オブジェクトを並べる
関わるアクター・画面・制御・データなどを上部に左から並べる(クラス図のクラスと対応)。
開始メッセージを描く
アクターの操作を起点に、最初の矢印を引く(例:User → UI)。
やりとりを順に追う
処理の流れに沿って、呼び出し→戻りのメッセージを上から順に描く。
条件・繰り返しを囲む
分岐や繰り返しがあれば alt / opt / loop の枠で囲む。
整合性を確認
メッセージ名がクラス図の操作名と一致しているかを確認する。
よくある間違い(Bad → Good)
Mermaidで描く①:基本(sequenceDiagram)
先頭に sequenceDiagram。participant で登場人物、矢印でメッセージを書く。->>は呼び出し、-->>は戻り。
sequenceDiagram
actor User
participant UI
participant Controller
participant Database
User->>UI: click Search
UI->>Controller: search(keyword)
Controller->>Database: query(keyword)
Database-->>Controller: result rows
Controller-->>UI: view model
UI-->>User: show results
上のコードを描画すると、本節冒頭の検索処理のシーケンス図になる。
Mermaidで描く②:alt / loop
alt ... else ... end で分岐、loop ... end で繰り返しを囲む。分岐の条件を決める呼び出し(verify)は alt の前に置く。
sequenceDiagram
actor User
participant LoginUI
participant AuthService
User->>LoginUI: submit(id, pw)
LoginUI->>AuthService: verify(id, pw)
AuthService-->>LoginUI: result
alt valid
LoginUI-->>User: go to home
else invalid
LoginUI-->>User: show message
end
上のコードを描画すると、本節のalt枠を使ったログイン処理の図になる。
2図の関係
クラス図とシーケンス図の関係
2つの図は別物ではなく、同じシステムを別の側面から見たものです。互いに整合している必要があります。
- クラス図 → シーケンス図:クラス図の「クラス」=シーケンス図の「オブジェクト」になる。クラス図の「操作(メソッド)」=シーケンス図の「メッセージ」になる
- シーケンス図 → クラス図:シーケンス図で必要になったメッセージ=クラスに必要な操作。やりとりに登場したのに対応クラスが無ければ追加を検討する
提出前
提出前チェックリスト
提出する前に、クラス図・シーケンス図それぞれで次の項目を確認する。
5項目
- クラス名は名詞・単数形になっているか
- 属性・操作に可視性(+ - #)を付けたか
- 関連の両端に多重度を書いたか
- 線の種類(関連/集約/継承)は適切か
- 孤立した(線のない)クラスは無いか
5項目
- 1図=1ユースケースに絞れているか
- 呼び出し(実線)と戻り(破線)が揃っているか
- メッセージ名はメソッド名で書いたか
- 登場オブジェクトはクラス図と対応するか
- alt/opt/loopの条件を書いたか
最後に
参考ツールと作図のコツ・まとめ
作図ツール
Mermaid
テキストで記述する。Markdown/GitHubで表示でき、修正・履歴管理が容易。Mermaid Live Editor(ブラウザ)で即プレビューできる。
draw.io / diagrams.net
ドラッグ操作で直感的に作図できるツール。
PlantUML
テキスト記述で作図する、より詳細なUMLに対応したツール。
作図のコツ
- いきなり清書せず、紙やホワイトボードで下書きする
- 最初から完璧を目指さず、描いては直すを繰り返す
- 要素を詰め込みすぎない(重要なものに絞る)
- 命名はクラス図・シーケンス図で統一する