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

参考

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

 

PlantUML - コンポーネント図

PlantUML でのコンポーネント図の記法についての解説です。

コンポーネント図は、コンポーネント間の依存関係を把握するための図であり、 クラス図を特化したもの です。
PlantUML でも クラス図ユースケース図 とほとんど同じように書けます。 解説もクラス図やユースケース図など他のダイアグラムの記法と同じところは省略しています。
  1. コンポーネント
  2. インターフェース
  3. 関係
  4. 配置図
  5. 参考
Comporent diagram sample
@startuml{plantuml_compo_sample.png}
title <size:18>コンポーネント図のサンプル</size>

component 発注管理システム as sys
sys .> [在庫管理システム]
sys ..> [顧客管理システム]
component [発注管理 DB] as db <<Database>>
sys ...> db

@enduml

コンポーネント

コンポーネントは [ ] または component キーワードで記述します。
[コンポーネント名]
component コンポーネント名
@startuml{plantuml_compo_define.png}

[First component]
[コンポーネント] as Comp2  
component Comp3
component [Last\ncomponent] <<Foo>>

@enduml
Define sample
PlantUML では [ ] や component などの定義でコンポーネント図と判断します。

なお、 コンポーネントを UML 2.0 のスタイルで書きたい場合は skinparam のページを見てください。

インターフェース

インターフェースの場合は次の形式となります。
() インターフェース名
interface インターフェース名
@startuml{plantuml_compo_interface.png}

() "First Interface"
() "インターフェース" as Interf2
interface Interf3
interface "Last\ninterface" <<Foo>>

@enduml
Interface sample

関係

コンポーネント間の関係を記述は次の形式で記述します。
コンポーネント名 -- コンポーネント名 [: ラベル]
コンポーネント間を結ぶ線には --(実線) 以外にも ..(破線)、 ..>(破線矢印) などが使えます。

関係の記述で書いたコンポーネント、 インターフェースは前述の定義がなくても自動的に作成されます。
また、 [ ], () を省略した場合、 関係の場合はインターフェース、 独立している場合はコンポーネントとなります。
@startuml{plantuml_compo_relation.png}

DataAccess - [First Component] 
[First Component] ..> HTTP : use

コンポーネント <<Test>>
' [] を省略した場合、ステレオタイプを
' つけていないと解析エラー

@enduml
Relation sample

配置図

配置図はシステムのハードウェア構成などを図式化したものです。
PlantUML では配置図のとしては用意されていませんが、 コンポーネント図でパッケージも使えるので、近いものは作成できます。
@startuml{plantuml_compo_deployment.png}

package "クライアント PC" <<Node>> {
    [勤怠入力]
}
 
package "サーバー" <<Node>> {
    [勤怠入力] - [CGI] : <<HTTP>>
} 

package "データベース" <<Database>> {
    [CGI] ..> [DB]
}
@enduml
Deployment sample
なお、パッケージスタイルは skinparam を使って指定することもできます。

参考

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

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

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

04月 | 2020年05月 | 06月
- - - - - 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

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