PlantUML - シーケンス図

PlantUML におけるシーケンス図の書き方について説明します。
  1. メッセージ
  2. ライフライン
  3. ノート(コメント)
  4. 複合フラグメントとグループ化
  5. シーケンス図の修飾
  6. 参考

sequence sample
@startuml{plantuml_seq_sample.png}
title シーケンス図のサンプル
hide footbox

actor ユーザー as user
participant 制御部 as control <<Control>>
participant "<u>Loader</u>" as model <<Model>>
participant 画面 as view <<View>> #98FB98

user -> control : 検索
activate control
create model
control -> model : << new >>
control -> model : データ検索
activate model
control <-- model : 検索結果
note right : ヒットしたものをリストで返します。
deactivate model
destroy model

control -> view : 表示(検索結果)
activate view
deactivate control
loop 1, データ数
  view -> view : データの表示
end
view --> user
deactivate view

@enduml

メッセージ

メッセージは以下の形式で記述します。
送り手 -> 受け手 : メッセージ名
受け手 <- 送り手 : メッセージ名
@startuml{plantuml_seq_base.png}

Alice -> Bob: メッセージ

@enduml
base sample(SVG を使っています。 IE 9 以上または他のモダンブラウザで見てください)

メッセージ種別と矢印の形状

メッセージ種別にあわせて、矢印の形状を変えることができます。
記号 種別 説明
<-, -> 同期メッセージ 戻りを待つメッセージ。通常のメッセージです。
<--, --> 戻りメッセージ メッセージの送り先からの戻り値
<<-, ->> 非同期メッセージ 同期されないメッセージ
@startuml{plantuml_seq_arrow.png}

Alice -> Bob: 同期メッセージ
Alice <-- Bob: 戻りメッセージ

Alice ->> Chuck: 非同期メッセージ

@enduml
arrow sample

自己メッセージ

対象を同じにすれば、自己メッセージとなります。
@startuml{plantuml_seq_self.png}

Alice -> Alice: 自己メッセージ

@enduml
self message sample

外部とのメッセージ

送り手や受け手がダイアグラム上にない場合は [ または ] を使用します。
@startuml{plantuml_seq_out.png}

[-> A: DoWork

A ->] : Request
A<--]

[<- A: Done

@enduml
found lost sample

ライフライン

ライフラインの要素はメッセージの出現順に左から表示されます。

要素名に記号などの英数字以外を使う場合には "(ダブルクオート) で囲みます。 日本語もシーケンス図の場合は不要です。(他の UML 図では必要)
ちなみにメッセージ名には " は不要で、書くとそのまま表示されます。

また、as キーワードで別名を付けることができます。
@startuml{plantuml_seq_lifeline.png}

Alice -> "Bob : Human"
Alice -> 太郎
Alice -> "I have a really\nlong name" as Long
Alice <-- Long

@enduml
lifeline name sample

ライフラインの定義

表示位置を変えたい場合や付加情報をつけたい場合には participant(actor) キーワードでライフラインの要素の定義を記述します。
表示順の変更
participant の定義順に左から配置されます。
@startuml{plantuml_seq_participant.png}
participant Bob
participant Alice

Alice -> Bob
Alice <-- Bob

@enduml
participant sample
アクター
棒人間を使いたい場合は participant ではなく actor を使用します。
@startuml{plantuml_seq_actor.png}
actor Alice

Alice -> Bob
Alice <-- Bob

@enduml
actor sample
背景色を変えたい場合は #色名 または #RGB値 で指定します。
@startuml{plantuml_seq_color.png}
actor Bob #silver
participant Alice
participant "I have a really\nlong name" as Long #99FF99

Alice -> Bob
Alice <-- Bob
Alice -> Long
Alice <-- Long

@enduml
color sample
ステレオタイプ
ステレオタイプを記述したい場合は << ステレオタイプ名 >> を末尾に付けます。
@startuml{plantuml_seq_stereotype.png}
participant "Famous Bob" as Bob << Generated >>
participant Alice << Testable >>

Bob->Alice: First message

@enduml
stereotype sample

作成と消滅

オブジェクトの作成と生成には create, destroy キーワードを使用します。
@startuml{plantuml_seq_newdestroy.png}
participant "Main Window" as main

create Loader
main -> Loader : << 作成 >> 
main <-- Loader
destroy Loader

@enduml
new destroy sample

実行状態

ライフラインの実行状態は activatedeactivate キーワードで指定します。
@startuml{plantuml_seq_activate.png}

User -> Foo: 処理を実行
activate Foo
  User <-- Foo
deactivate Foo

User -> Bar: 処理を実行
activate Bar #FFBBBB

  Bar -> Bar: 内部処理
  activate Bar #DarkSalmon

    create Object
    Bar -> Object: << 作成 >>
    activate Object
      Bar <-- Object
    deactivate Object
    destroy Object

  deactivate Bar

  User <-- Bar: 完了
deactivate Bar

@enduml
activate sample

ノート

UML 図におけるコメントはノート(注意書き)を使います。このノートの記述方法を説明します。

ちなみに PlantUML の記述でのコメントは '(シングルクオート) で始まる行です。

メッセージのノート

メッセージのノートはメッセージの直下に記述します。 記述は以下のような形式です。
note 位置 [色] : コメント
note 位置 [色]
  コメント
end note
位置は right または left で指定します。
背景色を変えたい場合は #色名#RGB 値 で指定します。
@startuml{plantuml_seq_notes.png}
'この行は PlantUML のコメントで無視されます。
Alice->Bob : hello
note left : 最初のメッセージに対するノート

Bob->Alice : ok
note right #aqua : 次のメッセージに対するノート

Bob->Bob : I am thinking
note left #FFAAAA
	ブロックを使って定義した
	複数行の長いノート
end note

@enduml
notes message sample

ライフラインのノート

ライフラインに対してノートを付ける場合には以下のキーワードを使用します。
  • note right of
  • note left of
  • note over
@startuml{plantuml_seq_notes_lifeline.png}
participant Alice
participant Bob

note right of Alice: Alice の右側に表示

note left of Alice #aqua
	Alice の左側に表示
	色も変更
end note 

note over Alice: Alice にまたがって表示

note over Alice, Bob : Bob と Alice の両方に\nまたがって表示

note over Bob, Alice #FFAAAA
	ブロックを使って定義した
	複数行の名前のノート
end note

@enduml
notes lifeline sample

複合フラグメントとグループ化

シーケンス図では、制御構造を表現するために複合フラグメントを使用します。 以下の表は PlantUML で使える複合フラグメントです。
キーワード 意味
alt/else 条件分岐
opt 条件を満たした場合のみ実行する処理
par 並列処理
loop ループ処理
break 中断処理
critical マルチスレッド環境などでの排他制御
次の形式で記述します。
キーワード [条件など]
  メッセージ
end
PlantUML では行頭の空白は無視するので、任意にインデントをつけることができます。

alt/else

条件分岐には alt および else を使用します。 正常系と異常系の処理といったシーケンスを書く場合などに使われます。
@startuml{plantuml_seq_cf_alt.png}
actor ユーザー as user
participant ログイン画面 as login
participant ユーザー情報 as userinfo

user -> login : ログイン
login -> userinfo : 認証チェック
login <-- userinfo : チェック結果

alt 認証成功
  user <- login : メインメニューを表示
else 認証失敗
  user <- login : エラーメッセージを表示
end

@enduml
alt sample

opt

条件を満たした場合にのみ実行する処理には opt を使用します。 条件分岐と似ていますが、 else の処理がありません。
@startuml{plantuml_seq_cf_opt.png}
actor ユーザー as user
participant メイン画面 as main

opt 管理権限あり
  main -> main : 管理用メニューを追加
end

user <- main : メニューを表示

@enduml
opt sample

par

並列処理には par および else を使います。
@startuml{plantuml_seq_cf_par.png}
actor Bob

Bob -> めざまし : 止める
Bob <-- めざまし

par
  Bob -> 歯ブラシ : 磨く
  Bob <-- 歯ブラシ
else
  Bob -> 新聞: 読む
  Bob <-- 新聞
end

@enduml
par sample

loop

ループ(繰り返し)処理は loop です。 loop の後は任意の文字列が使えますが、 UML としては [開始、終了] の形式で書かれます
@startuml{plantuml_seq_cf_loop.png}
actor 客 as guest

loop 1, 商品数
  guest -> 店員 : 商品
  店員 -> レジ : バーコード入力
end
店員 <-- レジ : 合計金額
guest <-- 店員 : 合計金額
guest -> 店員 : お金
店員 -> レジ : お金
店員 <-- レジ : レシート
guest <-- 店員 : レシート
guest <-- 店員 : 商品

@enduml
loop sample

break

break は中断処理を意味しており、 ループ処理などと一緒に使います。
@startuml{plantuml_seq_cf_break.png}
actor "客(未成年)" as guest

loop 1, 商品数
  guest -> 店員 : 商品
  break 商品 = 酒
    guest <- 店員 : 販売を拒否
  end
  店員 -> レジ : バーコード入力
end
店員 <-- レジ : 合計金額
guest <-- 店員 : 合計金額
guest -> 店員 : お金
店員 -> レジ : お金
店員 <-- レジ : レシート
guest <-- 店員 : レシート
guest <-- 店員 : 商品

@enduml
break sample

critical

マルチスレッド環境などで、排他制御の処理には critical を使います。
@startuml{plantuml_seq_cf_critical.png}
actor ユーザー as user
participant 画面 as view
participant データ as doc

create view
user -> view : 表示
view -> doc : データの読み取り
view <-- doc : データ
user <-- view

user -> view : データの変更
user <-- view

user -> view : 保存
critical
  view -> doc : データの書き込み
  view <-- doc
end
user <-- view
destroy view

@enduml
critical sample

グループ化

PlantUML にない複合フラグメントを使いたい場合や単に処理をグループ化したい場合には、 group キーワードを使用します。
ただし、条件などの説明を記述することはできません。
group グループ名
  メッセージ
end
@startuml{plantuml_seq_cf_group.png}
actor Bob

Bob -> めざまし : 止める
Bob <-- めざまし

group 朝の準備
  par
    Bob -> 歯ブラシ : 磨く
    Bob <-- 歯ブラシ
  else
    Bob -> 新聞: 読む
    Bob <-- 新聞
  end
  Bob -> 服 : 着替える
  Bob <-- 服
end

@enduml
group sample

シーケンス図の装飾

シーケンス図の見栄えなどの付加的な変更するための方法を説明します。

タイトル

シーケンス図にタイトルを付けるには title キーワードを使います。
title タイトル
title
  タイトル
end title
@startuml{plantuml_seq_title.png}

title 簡単なシーケンス図の例

Alice -> Bob: 認証要求
Bob --> Alice: 認証応答

@enduml
title sample

フッターの除去

フッターを取り除くには hide footbox キーワードを記述します。
@startuml{plantuml_seq_footbox.png}

hide footbox
title フッターの除去

Alice -> Bob: 認証要求
Bob --> Alice: 認証応答

@enduml
remove footer sample

スペース

スペースは以下の形式で記述します。
|||
|| スペースのピクセル値 ||
@startuml{plantuml_seq_space.png}

Alice -> Bob: message 1
Bob --> Alice: ok
|||
Alice -> Bob: message 2
Bob --> Alice: ok
||45||
Alice -> Bob: message 3
Bob --> Alice: ok

@enduml
space sample

分離線

分離線は以下の形式で記述します。
== ラベル ==
@startuml{plantuml_seq_divider.png}

== 初期化 ==

Alice -> Bob: 認証要求
Bob --> Alice: 認証応答

== 後処理 ==

Alice -> Bob: タスク開放
Alice <-- Bob

@enduml
divider sample

ボックス

box キーワードによって、ライフラインをボックスで囲むことができます。
box [ラベル] [色]
  participant または actor による定義
end box
@startuml{plantuml_seq_box.png}
box "社内" #LightBlue
	actor エンジニア
	participant サポート
end box
participant 顧客

顧客 -> サポート : 問い合わせ
サポート -> エンジニア : 問い合わせ

エンジニア --> サポート : 回答
サポート --> 顧客 : 回答

@enduml
box sample

HTML タグ

ライフライン名、メッセージ名、ノート、タイトルといった要素の文字列では、 以下の HTML タグを使用することができます。
タグ 説明
<b> 太字
<u>, <u:色> 下線
<w>, <w:色> 波線の下線
<s>, <s:色> 取り消し線
<color:色> 文字色
<back:色> 背景色
<size:ピクセル値> フォントサイズ
<img src="ファイルパス">, <img:ファイルパス> 画像
色は要素の背景色のように RGB 値または色名で指定します。ただし、色名の前に # は付けません。
@startuml{plantuml_seq_html.png}
title
 <size:24><w>HTML タグ</w> のサンプル (<img:blogicon.png>)</size>
end title

participant Alice
participant "The <i>Famous</i> Bob" as Bob

Alice -> Bob : <u>かしこまった</u>挨拶
note right of Alice
  Alice の<u:blue></u>側に
  <back:cadetblue>表示</back>するノート
end note
note left of Bob 
  <s:red>Alice</s> Bob の<b></b>側に
  <color:#118888>表示</color>するノート
end note
 
@enduml
html tag sample

参考

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



 

PlantUML - クラス図

PlantUML でのクラス図の記法についての解説です。
クラス図は Doxygen や CASE ツール等でも生成できますが、 パッケージなども書けますし、大まかな構成を記述する際に役に立ちます。
  1. クラスの関係
  2. クラス定義
  3. パッケージ
  4. ノート
  5. オブジェクト図
  6. パッケージ図
  7. 参考
Class diagram sample
@startuml{plantuml_class_sample.png}
title <size:18> クラス図 のサンプル </size>
class Canvas
package Geometry
abstract Figure {
    #{static} const size_t ParseBufferSize = 256
    +{abstract} size_t getPointsNum()
    +{static} Figure *ParseString(const char *str)
}

Figure "0..*" o- "1" Canvas : 集約

Figure <|-- Rect : 汎化
Figure <|-- Polygon
Rect <|-- Ellipse

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

クラスの関係

クラスの関連は以下の形式で書きます。
クラス名 線種の記号 クラス名 [: ラベル]
クラス名に英数字以外を使いたい場合は "(ダブルクオート) で囲みます。
日本語の場合は " がないとうまく表示されない場合があるので、囲っておいた方が安全です。
@startuml{plantuml_class_relation.png}

ClassA -- "Class B"
"クラスC" -- "Class\nD" : 関係

@enduml
Relation sample

クラスの関係と線種

クラス間の関係と線種は次のようになります。
記号 線種 関係
-- 実線 関連
<-- 矢印 実線
<|-- 白抜き矢印 実線 汎化
<|.. 白抜き矢印 破線 実現
o-- 白抜き菱形 実線 集約
*-- 黒塗り菱形 実線 コンポジション、合成
<.. 矢印 破線 依存
.. 破線 (ノートで使用されます)
PlantUML では UML のどの図を使うかの指定はありません。
デフォルトはシーケンス図で、シーケンス図にない記号がつかわれたり、 次章のクラス定義があった場合にクラス図となります。

関連
クラス間になんらかの関連がある関係です。一番意味の広い関係です。

矢印は誘導可能性です。 矢印の方向にのみ関連があります。 実装レベルでいえば、ヘッダーをインクルードする必要があるかといった関係になります。
矢印がない場合は方向が不明であるか、双方向に関連しています。
@startuml{plantuml_class_assocation.png}

Control -- View
Control --> Model

@enduml
Assocation sample
汎化と実現
汎化は抽象化ともいい、継承(is-a)関係の逆になります。
汎化も関連の一種です。 継承の方がわかりやすいですが、 基底クラスは派生クラスを関知しないため、矢印の向きにあう汎化となります。

基底クラスがインターフェースや抽象クラスで、 派生クラスがその振る舞いを実装する場合、特に実現といいます。
@startuml{plantuml_class_is_a.png}

"図形" <|-- "四角形" : 汎化
Comparable <|.. ComplexNumber : 実現

@enduml
is a sample
集約と合成
集約は全体と部分といった包含(has-a)関係です。
合成は結合の強い集約で、全体と部品といった関係になります。
@startuml{plantuml_class_has_a.png}

"駐車場" o-- "自動車" : 集約
"車" *-- "タイヤ" : 合成
"車" *--> "エンジン" : 合成(矢印付き)

@enduml
has a sample
依存
変更すると他方にも変更が生じるような関係です。
@startuml{plantuml_class_depend.png}

"残量メーター" ..> "燃料タンク"  : 依存

@enduml
depend sample

線の長さと矢印の向き

例えば関連の矢印の場合 <-, <--, <--- というように - や . はいくつ書いてもかまいません。
この長さ(文字数)はレイアウトの向きと相対的な長さに使われます。
文字数 向き
1
2
@startuml{plantuml_class_linelength.png}

Foo - Bar1
Foo -- Bar2
Foo --- Bar3

@enduml
linelength sample

また、 -position- と書く事によって、関係の方向を明示的に指定することもできます。 position には以下のキーワードが使えます。
方向 キーワード
up, u
down, d, do
left, l, le
right, r, ri
@startuml{plantuml_class_line_direction.png}

Foo -up-> 上
Foo -do-> 下
Foo -le-> 左 
Foo -ri-> 右 

@enduml
Line direction sample

多重度

関係の多重度を記述する場合には関係の前後に記述します。
クラス名 "多重度" 線種 "多重度" クラス名 [: ラベル]
@startuml{plantuml_class_multi.png}

Car "1" *-- "4" Tire
"車" "1" o-- "0..*" "駐車場" : 1 対 多

@enduml
Multiplicity sample

クラス定義

クラス定義は省略するできますが、 class キーワードで明示的に記述することもできます。
シーケンス図と同様に色名の指定、別名(as)を付けることもできます。 ただし、この場合は "" で囲う必要があります。
@startuml{plantuml_class_define.png}
class Rect
class "Figure" as fig #E0FFFF

fig <|-- Rect

@enduml
Class define sample

メンバーの追加

属性(メンバー変数)やメソッド(メンバー関数)は : を使って追加するか、クラス定義時に {} 内に記述します。
クラス名 : メンバー
class クラス名 {
  メンバー
}
属性かメソッドはメンバーの () の有無で判断しています。
@startuml{plantuml_class_member.png}
class Node {
    size_t getElementNum()
    Element *getElement(size_t id)

    std::vector<Element*> m_elements
}
Element <|-- Node

Element: getName()

@enduml
Member sample

可視性

private などの可視性の指定はメンバーの前に記号を付けます。
記号 可視性
- private
# protected
~ package private
+ public
@startuml{plantuml_class_visibility.png}
class Foo {
    -m_field
    #method1()
    ~method2()
    +method3()
}
@enduml
Visibility sample
可視性のアイコンを表示したくない場合には skinparam で指定してください。

抽象(純粋仮想)関数とクラスメンバー

メソッドが抽象(純粋仮想)関数 の場合には {abstract} をつけます。
クラス変数やクラス関数の場合には {classifier} または {static} で指定します。
@startuml{plantuml_class_abst.png}
class Figure {
    {abstract} size_t getPointsNum()
    {static} Figure *ParseString(const char *str)
    {static} const size_t ParseBufferSize = 256
}

@enduml
Abstract Static sample

特殊クラスの定義

クラス定義は class キーワードだけでなく、特殊な型(クラス)用のキーワードも用意されています。
キーワード
abstract, abstract class 抽象クラス
interface インターフェースクラス
enum 列挙型
@startuml{plantuml_class_specclass.png}
enum FigureType {
    FigureType_unknown=-1
    FigureRect
    FigurePolygon
    FigureEllipse
}

abstract Figure
class Rect
interface Comparable {
  {abstract} int compare(Comparable *other)
}

Figure <|-- Rect
Rect .|> Comparable 

@enduml
Special class sample

スポットとステレオタイプ

シーケンス図と同様にクラス定義の後にステレオタイプを書く事ができます。
また、ステレオタイプで C, I, A, E 以外のスポットを指定することができます。
class クラス名 <<(スポット文字, 色) [ステレオタイプ名]>>
@startuml{plantuml_class_spot.png}
class System << (S,#FF7700) Singleton >>
class Date << (D,violet) >>

@enduml
Spot sample

ロリポップ

インターフェースクラスを実現する場合で、 インターフェイスを提供しているということを強調するために、 ロリポップ(棒付きキャンディー)で省略表記することがあります。
PlantUML でロリポップとして表示するには、関係の線種に ()-- を使います。

@startuml{plantuml_class_lollipop.png}

Comparable ()-- RationalNumber

@enduml
Lollipop sample

ただし、インターフェースを介して利用するクラスとインターフェース間の関係ではロリポップを使ったリンクはできません。
Lollipop sample

テンプレート(ジェネリック)

テンプレート(ジェネリック)クラスは < > を使って表現します。
@startuml{plantuml_class_template.png}

class HashMap<Key:Class, Value:Class> {
    Value &getValue(const Key &key)
}

HashMap *- Element

@enduml
Template sample

パッケージ

パッケージ定義

パッケージを記述する場合には package キーワードを使用します。
package パッケージ名 {
  クラス定義や関係
}
package パッケージ名
  クラス定義や関係
end package
クラス定義と同様に色指定なども使用できます。
@startuml{plantuml_class_pkgdef.png}

package "Classic Collections" #DDDDDD {
  Object <|-- ArrayList
}

package net.sourceforge.plantuml
  Object <|-- Demo1
  Demo1 *- Demo2
end package

@enduml
Package define sample

パッケージスタイル

パッケージのスタイルはデフォルトのフォルダースタイルだけでなく、 ステレオタイプで指定することによって、形状を変えることができます。
@startuml{plantuml_class_pkgstyle1.png}

package node <<Node>> {
  class Class1
}

package rect <<Rect>> {
  class Class2
}

package "folder (default)" <<Folder>> {
  class Class3
}

@enduml
@startuml{plantuml_class_pkgstyle2.png}

package frame <<Frame>> {
  class Class4
}

package cloud <<Cloud>> {
  class Class5
}

package database <<Database>> {
  class Class6
}

@enduml
Package style sample 1 Package style sample 2

ネームスペース

同じ名前のクラス名をネームスペースで分けて定義することはあると思います。 これをクラス図で実現するには namespace キーワードを使用します。 namespace キーワードは package と同じようなスタイルで記述します。

ネームスペースをまたいだクラス関係を記述する場合には . (ピリオド) でつないで "ネームスペース名"."クラス名" といった形式でクラスを指定します。
@startuml{plantuml_class_namespace.png}

abstract class AbstractPerson

namespace net.dummy #DDDDDD
  .AbstractPerson <|-- Person
  'ネームスペース外のクラスは指定するには前に . 
  'つけていないとネームスペース内で新しいクラス要素を作る

  Meeting o-- Person
  
  .AbstractPerson <|- Meeting

end namespace

namespace net.foo {
  net.dummy.Person  <|- Person
  .AbstractPerson <|-- Person

  net.dummy.Meeting o-- Person
}

AbstractPerson <|-- net.auto.Person
'namespace の定義なしで作成

@enduml
Namespace sample

ノート

クラスに対するノート

クラスに対してノート(コメント)を付けることができます。
note position of クラス : コメント
クラス定義
note position : コメント
position には以下のキーワードのいづれかを指定します。
  • top
  • bottom
  • left
  • right
@startuml{plantuml_class_noteclass.png}
class Bar
note right
  Bar に対する
  クラス
end note

Foo - Bar

note top of Foo : Foo に対する\nノート
'right を指定するとエラー

@enduml
Notes for class sample
この方法では表示できない方向にノートを付けるとエラー終了してしまいます。 次の方法でノートを付ける方がお勧めです。

関係を使ったノート

別名をつけてノートの要素を作り、 それをクラスにリンクさせることによってコメントをつけます。
@startuml{plantuml_class_noterelation.png}
abstract Object
Object <|--- ArrayList

note "Object に対するノート" as NO
Object . NO

note as N2
  複数の対象に
  関連づけられたノート
end note
Object .. N2
N2 .. ArrayList

note "対象が指定されていない\n フローティングノート" as NF
'使わない場合でも別名をつけないと解析エラー

@enduml
Notes by relation sample クラスの関係の記述の直下にノートを書くと関係のリンクへのノートとなります。
クラス関係の記述
note [position] on link : コメント
@startuml{plantuml_class_notelink.png}

class Dummy
Dummy --> Foo : A link
note on link #red: 赤い背景色のノート

Dummy --> Bar : Another link
note right on link #E0FFFF
    右側に配置した
    ノート
end note

@enduml
Notes for link sample

オブジェクト図

オブジェクト図はクラス図とほぼ同じです。
class の代わりにobject を使うとオブジェクト図となります。 ただし、 ブロックによる定義では英数字しか使えないため、 それ以外の文字を使いたい場合は一度 as で別名を付けた後、メンバーを追加する必要があります。
@startuml{plantuml_class_object.png}

object foo {
    id = 1234
    name = "Alice"
}

object "<u>bar:Bar</u>" as bar
bar : id = 4321
bar : name = "Bob"

@enduml
Object diagram sample

パッケージ図

PlantUML にはパッケージ図は特に用意されていません。 しかし、空のパッケージパッケージ間のリンクもできるため、 クラス図で代用することができます。
ただし、パッケージ - クラス間のリンクはできません。
@startuml{plantuml_class_package_diagram.png}

package 検索処理
end package

package 描画処理 {
}

検索処理 .> 描画処理 : <<import>>

package "入出力処理" as io {
}

検索処理 ..> io : <<access>>

package データベース {
}

io +-- データベース

@enduml
Package diagram sample

参考

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

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

参考

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

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

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

05月 | 2023年06月 | 07月
- - - - 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 -


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

yohshiy

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

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

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