PlantUML - ユースケース図

PlantUML でのユースケース図の記法についての解説です。

UML としては ユースケース図はクラス図の特化したもの であるため、 PlantUML でも クラス図 とほとんど同じように書けます。

  1. ユースケース
  2. アクター
  3. 関係
  4. レイアウト
  5. サブジェクト
  6. 汎化、包含、拡張
  7. 参考
Usecase sample
@startuml{plantuml_usecase_sample.png}
title <size:18>ユースケース図のサンプル</size>
left to right direction

actor :社員: as user
actor :総務: as admin
actor :データベース: as DB
note "次のバージョンで\n対応" as next

user <|-- admin : 汎化

package "勤怠管理システム" <<Rect>>
usecase (<u>勤怠入力</u>\n 拡張点\n 早退、遅刻) as input

user -- (出社)
(出社) -- input
input <.. (早退理由入力) : <<extend>>
(早退理由入力) .. next
(早退理由入力) -- DB
user -- (帰宅)
(帰宅) -- input
input ..> (社員認証) : <<include>>
(社員認証) -- DB
admin -- (勤怠変更)
(勤怠変更) ..> (社員認証) : <<include>>
(勤怠変更) -- DB

end package
@enduml
タイトル(title)HTML タグ に関してはシーケンス図、 ノート(note) に関してはクラス図の説明を参照してください。

ユースケース

ユースケースは ( ) または usecase キーワードで記述します。
(ユースケース名)
usecase ユースケース名
( ) はクオートの役目もしているので、 usecase キーワードを使う場合も記号のような英数字以外の文字を使う場合には ( ) で囲みます。

また、 シーケンス図、クラス図のように別名(as)、ステレオタイプなども使えます。 (ただし、色指定はできません)
@startuml{plantuml_usecase_def.png}

(First usecase)
(機能)
usecase Payment
usecase (Long name\nusecase) as Long
usecase (check in) as ci <<Command>>

@enduml
Define sample
PlantUML では UML ダイアログの指定はありません。 ( ) や usecase などの定義でユースケース図と判断します。

アクター

棒人間を使いたい場合は ( ), usecase ではなく : :, actor を使用します。

: : 省略時もアクターと判断されますが、 ユースケース図と判断できるキーワードは何か入れておく必要があります。
@startuml{plantuml_usecase_actor.png}

:First actor:
:ユーザー:
actor DB
actor :Long name\nactor: as Long
Client as cl <<Human>>

@enduml
Actor sample

関係

ユースケース間の関係を記述は次の形式で記述します。
ユースケース名 -- ユースケース名 [: ラベル]
ユースケース間を結ぶ線には --(実線) 以外にも クラス図で使えるもの と同じものが使用できます。

関係の記述で書いたユースケース、アクターは前述の定義がなくても 自動的に作成されます。
@startuml{plantuml_usecase_relation.png}

(アプリケーションの使用) as use

User - (開始)
User -- use : 関係を表すラベル

:Main Admin: --- use : 複数行の\nラベル

@enduml
Relation sample

レイアウト

線の長さ
関係の線は -, --, --- というようにいくつ書いてもかまいません。 この長さ(文字数)はレイアウトの向きと相対的な長さに使われます。
文字数 向き
1
2
@startuml{plantuml_usecase_line_length.png}

User - (Usecase 1)
User -- (Usecase 2)
User --- (Usecase 3)

@enduml
Line length sample

レイアウトの方向
配置の方向は線の長さで変わるのですが、これ変えるためには以下のキーワードを使用します。
キーワード 方向
left to right direction 水平
top to bottom direction 垂直
ただし、線の文字数が違うものを混ぜているとエラー終了してしまいます。
User -- (Usecase A)
User -- (Usecase B)
left to right direction

User -- (Usecase A)
User -- (Usecase B)
Direction sample  (default) Direction sample
配置の方向
-position- と書く事によって、関係の方向を直接指定することもできます。
position には以下のキーワードが使えます。
方向 キーワード
up, u
down, d, do
left, l, le
right, r, ri
@startuml{plantuml_usecase_line_direction.png}

User -up- (上)
User -do- (下)
User -le- (左) 
User -ri- (右) 

@enduml
Line direction sample

サブジェクト

サブジェクトとは、開発対象であるシステムです。 これを表現するには package キーワードを使用します。
@startuml{plantuml_usecase_subject.png}
left to right direction

actor :利用者: as user
actor :図書館職員: as admin

package "図書館" <<Rect>> {
    user -- (本を借りる)
    (本を借りる) -- admin
    user -- (本を返却する)
    (本を返却する) -- admin
    (本を登録する) -- admin
}
@enduml
Subject sample
パッケージはデフォルトでは Folder スタイルのため、 ステレオタイプで Rect スタイルに変更しています。 これは skinparam を使って指定することもできます。

汎化、包含、拡張

ユースケース図では関連をより特殊化した関係が使われることがあります。
関係 記述
汎化 <|--
包含 依存(<..)、ラベルを <<include>>
拡張 依存(<..)、ラベルを <<extend>>

汎化

クラス図の汎化 と同じで、抽象化(継承の逆)した関係です。
@startuml{plantuml_usecase_generalization.png}

:社員: <|-- :総務:

(本を借りる) <|-- (自動貸し出し)
(本を借りる) <|-- (手動貸し出し)

@enduml
Generalization sample

包含

包含はあるユースケースが他のユースケースを利用する場合に使用します。
@startuml{plantuml_usecase_include.png}

(勤怠入力) .> (社員認証) : <<include>>

@enduml
Include sample

拡張

拡張は包含と違い、ある条件の時だけ利用する場合に使用します。
@startuml{plantuml_usecase_extend.png}

(勤怠入力) .> (早退理由入力) : <<extend>>

@enduml
Extend sample

UML では利用する条件を 拡張点(Extension points) として記入します。 PlantUML では特に拡張点用の記述は用意されていないのですが、 がんばって書くと次のようになります。
@startuml{plantuml_usecase_extend2.png}

usecase (<u>勤怠入力</u>\n拡張点\n早退、遅刻) as input

input .> (早退理由入力) : <<extend>>

@enduml
Extend sample 2

参考

このページの記述には以下のサイトを参考にさせていただきました。

 

PlantUML - アクティビティ図

PlantUML でのアクティビティ図の記法についての解説です。

PlantUML ではサクサク書けるので、フローチャートがわりとしていいのではないかと思います。
  1. 基本的なアクティビティ図
  2. ラベル
  3. 分岐と矢印の方向
  4. 並列処理
  5. ノート
  6. パーティション
  7. 参考
Activity sample
@startuml{plantuml_act_sample.png}
title <size:18>アクティビティ図のサンプル</size>

(*) --> "目覚ましを止める"

if "体調状態" then
    partition "出勤準備"
        --> [健康] "顔を洗う" as wash
    end partition
else
    -> [病気] "病気の報告"
    --> "寝る"
endif

partition "出勤準備" {
    wash --> ===fork===

    ===fork=== --> "新聞を読む"
    --> ===join===

    ===fork=== --> "歯を磨く"
    --> ===join===

    ===join=== --> "服を着替える"
}
-->(*)
note right : 家を出る

@enduml

タイトル(title)HTML タグ に関してはシーケンス図の説明を参照してください。

基本的なアクティビティ図

アクティビティ図の記法では (*) が開始ノード、終了ノードとなります。
アクションノードは "処理名" で記述し、 これらを矢印(-->)でつないでいきます。
@startuml{plantuml_act_base2.png}

(*) --> "処理 1"
"処理 1" --> "処理 2"
"処理 2" --> (*)

@enduml

また、前のアクションノードを省略して書くこともできます。
(*) --> "処理 1"
--> "処理 2"
--> (*)
Base sample
なお、開始ノードを先頭に書かない場合には (*) ではなく、 (*top) と記述します。
PlantUML では、 この (*) や (*top) があるかどうかで、 アクティビティ図か判断しています。


複数行にわたるような長い処理名を使いたい場合は直接改行して書くか、 \n を使います。
@startuml{plantuml_act_long.png}

(*) --> "複数行にまたがる\n長い処理名 1"
--> "複数行にまたがる
     長い処理名 2"
--> (*)

@enduml
Long name sample

ラベル

遷移(矢印)にラベルを付ける場合は以下の形式となります。
--> [ラベル] "処理名"
@startuml{plantuml_act_label.png}

(*) --> [ラベル 1] "処理 1"
--> [ラベル 2] "処理 2"
--> (*)

@enduml
Label sample

分岐と矢印の方向

分岐を作る場合には if/then/else キーワードを使用します。
if "分岐名" then
    分岐フロー
else
    分岐フロー
endif
分岐すると同じアクションノードを書く必要がある場合があります。 このような場合に as キーワードで別名を付けることもできます。

また、 クラス図やユースケース図と同様に矢印の - の数が 2 の場合は下、 1 の場合は横向きの矢印となります。
矢印の向きを直接指定する -position-> も同様に使用できます。
@startuml{plantuml_act_if.png}
(*) --> "初期化"

if "テスト" then
  --> [OK] "正常処理"
  --> "後処理" as last
else
  -> [NG] "エラーメッセージ"
  --> "異常系処理"
  -left-> last
endif

--> (*)
@enduml
If sample


さらにこの if 文は入れ子にすることができます。
@startuml{plantuml_act_if_nest.png}

(*) --> if "最初のテスト" then
  -->[true] "正常系処理 1"
  
  if "2 番目のテスト" then
    -->[true] "正常系処理 2" as s2
  else
    -> "2 番目のテストが失敗した時の処理"
  endif
  
else
  ->[false] "最初のテストが失敗した時の処理"
endif

s2 --> if "" then
  --> "正常系処理 3"
  --> (*)
else
  -> "最後のテストが失敗した時の処理"
endif

@enduml
If nest sample

並列処理

非同期に行う並列処理を表すフォークノード、ジョインノードは以下のように記述します。
===識別名===
@startuml{plantuml_act_par.png}
(*) --> "顔を洗う"

--> ===FORK=== 
--> "新聞を読む"
--> ===JOIN===

===FORK=== --> "歯を磨く"
--> ===JOIN===

--> "服を着替える"
--> (*)
@enduml
Parallel sample

ノート

アクションノードにノート(コメント)をつけたい場合はその直下にノートの記述を行います。
開始ノードにつける場合は一番先頭に記述します。
note position : コメント
note position
    コメント
end note
@startuml{plantuml_act_note.png}
note left: 開始ノードへのノート

(*) --> "処理 A"
note right
  アクションノード
  (処理 A)へのノート
end note

--> (*)
note bottom: 終了ノードへのノート
@enduml
Note sample

パーティション

フローをグループ化したい場合には partition キーワードを使用します。
partition ラベル [色指定] {
    フロー
}
{ } 以外にも end partition も使えます。

@startuml{plantuml_act_partition.png}

partition 指揮者 {
  (*) --> "ステージへあがる"
  --> === Sf ===
  --> "お辞儀をする" as bow
}

partition 聴衆 LightSkyBlue
  === Sf === --> "拍手"
end partition

partition 指揮者 {
  bow --> === Sj ===
  --> "タクトを振る" as wave
  "拍手" --> === Sj ===
}

partition オーケストラ #CCCCEE {
  wave -> "準備"
  --> "演奏する"
}
@enduml
Partition sample

参考

このページの記述には以下のサイトを参考にさせていただきました。

 

PlantUML - 状態遷移図(ステートマシン図)

状態遷移(ステートマシン)図とは、 オブジェクト内の状態や、その移り変わりを表現する図です。
この状態遷移図のPlantUML での記法についての解説してみました。
  1. 状態の遷移
  2. 状態の説明
  3. 複合状態
  4. 領域
  5. UML としての状態遷移図の書き方
    1. 状態の遷移
    2. 状態の説明
  6. 参考
State sample
@startuml{plantuml_state_sample.png}
title <size:18>状態遷移図のサンプル</size>

[*] --> 停止
停止 -> 稼働中 : 電源 ON
state 稼働中 {
    [*] --> 加熱中
    加熱中 --> 待機 : when( 現在温度 > 上限温度 )
    待機 --> 加熱中 : when( 現在温度 < 下限温度 )

    加熱中: entry / ヒーター ON
    加熱中: do / 温度監視
    加熱中: exit / ヒーター OFF

    待機: do / 温度監視

    --

    state "加湿 ON" as w_on
    state "加湿 OFF" as w_off
    [*] --> w_on
    w_on --> w_off
    w_off --> w_on
}
稼働中 --> 停止 : 電源 OFF
停止 --> [*]

note bottom of 稼働中 : 加湿器付きヒーター

@enduml

タイトル(title)HTML タグ に関してはシーケンス図、 ノート(note) に関してはクラス図の説明を参照してください。

状態の遷移

状態遷移図の記法では [*] が開始状態、終了状態を表します。
状態の遷移は以下の形式で記述します。
状態 --> 状態 : 遷移の説明
またクラス図など他の図と同様に矢印の方向は - が 2 つで下、 1 で横となります。
ただし、状態遷移図では <-- 記述の矢印の向きを逆にすることはできません。
@startuml{plantuml_state_transition.png}

[*] -> 未予約
未予約 --> 未予約 : 予約[在庫数 < 注文数]
未予約 --> 予約済み : 予約 [在庫数 >= 注文数]
予約済み --> 出荷済み : 出荷作業完了
出荷済み -> [*]

@enduml
Transition sample
PlantUML では、 この [*] や状態定義があるかどうかで、 状態遷移図か判断しています。

状態の説明

次のような記述で状態の説明を追加していくこともできます。
state "状態名" : 状態の説明
また、 他の図と同様に as による別名も使えます。 状態名には記号などが使えないので、その場合にも as で別名を付けておく必要があります。
@startuml{plantuml_state_descript.png}
state "状態 A" as sa

[*] --> sa
sa --> [*]

sa -> 状態B
状態B --> [*]

sa : 状態 A の説明 1
sa : 状態 A の説明 2

@enduml
Descript sample

複合状態

状態定義の中でさらに状態遷移や状態定義を書くと、 状態を入れ子にすることができます。
入れ子にした複合状態は以下の形式で記述します。
state "状態名" {
    サブの状態遷移
}
@startuml{plantuml_state_composite.png}

[*] --> 停止
停止 -> 稼働中 : 電源 ON
稼働中 -> 停止 : 電源 OFF
停止 --> [*]

state 稼働中 {
    冷房 -> 暖房 : 暖房ボタン
    暖房 -> 冷房 : 冷房ボタン
}
@enduml
Composite sample

領域

複合状態のうち、内部の状態が独立、並行して各々遷移が発生する場合には、 破線で区切った領域で表します。
これを PlantUML で記述するには -- を使います。
@startuml{plantuml_state_region.png}
[*] --> Active

state Active {
  [*] --> NumLock_OFF
  NumLock_OFF --> NumLock_ON : NumLock キー
  NumLock_ON --> NumLock_OFF : NumLock キー
  --
  [*] --> CapsLock_OFF
  CapsLock_OFF --> CapsLock_ON : Shift + CapsLock キー
  CapsLock_ON --> CapsLock_OFF : Shift + CapsLock キー
}
@enduml
Region sample

UML としての状態遷移図の書き方

PlantUML の記法ではなく、 UML としての状態遷移の記述の仕方について補足しておきます。

状態の遷移

UML としては遷移の説明は次のような形式になります。
イベント名 [ガード条件] / アクション
UML transition sample
用語 説明
イベント 遷移が起こるきっかけとなる出来事
ガード条件 遷移が許される条件。
アクション 遷移が起きた時に実行される操作
各要素は省略することができます。 ただし、省略しているとイベントかアクションか区別がつかないので、 "/" を残すことがあります。

また、イベントには次のような種類があります。
イベントの種類 記述例
シグナルを受け取る  
メッセージを受け取る(メソッドが呼ばれる)  
時間が経過する after ( 5 秒 )
条件が真になる when ( 設定温度 > 現在温度 )
UML event sample

状態の説明

状態の説明に記述する動作には次のようなものがあります。
記述 説明
entry / 入場アクション 状態に入った時に実行するアクション
do / アクティビティ 状態中に実行し続けるアクティビティ
入ったときに始めて、出るときに中断する動作。
exit / 退場アクション 状態から出るときに実行するアクション
イベント/ アクション 指定した "イベント" が起きた時に実行されるアクション
ただし、状態の遷移は起こらない。
UML descript sample

参考

このページの記述には以下のサイトを参考にさせていただきました。

 
このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
8位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
3位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

09月 | 2019年10月 | 11月
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。