2.2. PlantUMLがサポートする図#

2.2.1. サポートされる UML 図#

PlantUML を使用することで、以下のような構造化された UML 図を作成することができます:

https://upload.wikimedia.org/wikipedia/commons/d/d6/Uml_diagram2.png

図 2.1 UML2.2ダイアグラム体系 (Wikipediaより引用)#

2.2.2. サポートされる非 UML 図#

従来の UML ダイアグラムにとどまらず、PlantUML は以下のような様々なタイプのダイアグラムの 作成もサポートしています:

  • JSON データ 図 2.11

  • YAML データ 図 2.10

  • EBNF 図 図 2.21

  • 正規表現ダイアグラム 図 2.22

  • ネットワーク図(nwdiag) 図 2.9

  • UIモックアップ(ソルト) 図 2.16

  • アルキメイト図 (ArchiMateはそれ自体がエンタープライズ・アーキテクチャ・モデリング言語です。) 2.4 章

  • 仕様記述言語(SDL) 図 2.20

  • Ditaaダイアグラム(Ditaa:DIagrams Through Ascii Art) 2.9 章

  • ガント・ダイアグラム 図 2.6

    • 年表

  • マインドマップ図 図 2.8

  • WBS図 図 2.15

  • AsciiMathまたはJLaTeXMath記法による数学 図 2.23

  • 情報工学ダイアグラム(ER図) 図 2.18

  • エンティティ関係図 図 2.17

2.2.3. (ほとんど) すべての図の例(PlantUML)#

PlantUML 共通コマンド から引用した主なPlantUMLの図版の一覧です。

mainframe アクティビティ図

header some header

footer some footer

title My title

caption This is caption

legend
The legend
end legend

start
:Hello world;
:This is defined on
several **lines**;
stop

図 2.2 アクティビティ図 (***)#

mainframe アーキテクチャ図

header some header

footer some footer

title My title

caption This is caption

legend
The legend
end legend

archimate #Technology "VPN Server" as vpnServerA <<technology-device>>

rectangle GO #lightgreen
rectangle STOP #red
rectangle WAIT #orange

図 2.3 アーキテクチャ図#

mainframe クラス図

header some header

footer some footer

title My title

caption This is caption

legend
The legend
end legend

a -- b

図 2.4 クラス図(***)#

mainframe コンポーネント図、配置図、ユースケース図
header some header
footer some footer
title My title
caption This is caption

legend
The legend
end legend

node n
(u) -> [c]

図 2.5 コンポーネント図(**)、配置図、ユースケース図#

@startgantt
mainframe ガントチャート

header some header

footer some footer

title My title

caption This is caption

legend
The legend
end legend


[t] lasts 5 days

@endtgantt

図 2.6 ガントチャート#

mainframe オブジェクト図
header some header

footer some footer

title My title

caption This is caption

legend
The legend
end legend

object user {
  name = "Dummy"
  id = 123
}

図 2.7 オブジェクト図 (*)#

@startmindmap

mainframe マインドマップ

header some header

footer some footer

title My title

caption This is caption

legend
The legend
end legend

* r
** d1
** d2

@endmindmap

図 2.8 マインドマップ#

mainframe ネットワーク図(nwdiag)

header some header

footer some footer

title My title

caption This is caption

legend
The legend
end legend

nwdiag {
  network inet {
      web01 [shape = cloud]
  }
}

図 2.9 ネットワーク図(nwdiag)#

@startyaml
doe: "a deer, a female deer"
ray: "a drop of golden sun"
pi: 3.14159
xmas: true
french-hens: 3
calling-birds:
        - huey
        - dewey
        - louie
        - fred
xmas-fifth-day:
        calling-birds: four
        french-hens: 3
        golden-rings: 5
        partridges:
                count: 1
                location: "a pear tree"
        turtle-doves: two
@endyaml

図 2.10 YAML#

@startjson
#highlight "lastName"
#highlight "address" / "city"
#highlight "phoneNumbers" / "0" / "number"
{
  "firstName": "John",
  "lastName": "Smith",
  "isAlive": true,
  "age": 28,
  "address": {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": "10021-3100"
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "212 555-1234"
    },
    {
      "type": "office",
      "number": "646 555-4567"
    }
  ],
  "children": [],
  "spouse": null
}
@endjson

図 2.11 JSON#

mainframe シーケンス図

header some header

footer some footer

title My title

caption This is caption

legend
The legend
end legend

a->b

図 2.12 シーケンス図 (***)#

mainframe ステート図

header some header

footer some footer

title My title

caption This is caption

legend
The legend
end legend

[*] --> State1
State1 -> State2

図 2.13 ステート図 (**)#

mainframe タイミング図

header  タイミング図 ヘッダ

footer タイミング図 フッタ

title タイミング図 題名

caption This is caption in the diagram

legend
The legend
end legend

robust "Web Browser" as WB
concise "Web User" as WU

@0
WU is Idle
WB is Idle

@100
WU is Waiting
WB is Processing

@300
WB is Waiting

図 2.14 タイミング図 (*)#

@startwbs
mainframe Work Breakdown Structure (WBS)

header some header

footer some footer

title My title

caption This is caption

legend
The legend
end legend

* r
** d1
** d2

@endwbs

図 2.15 Work Breakdown Structure (WBS)#

@startsalt

mainframe Wireframe (SALT)

header some header

footer some footer

title My title

caption This is caption

legend
The legend
end legend

{+
  Login    | "MyName"
  Password | "****"
  [Cancel] | [  OK   ]
}
@endsalt

図 2.16 Wireframe (SALT)#

@startchen

entity Person {
}
entity Location {
}
relationship Birthplace {
}

Person -N- Birthplace
Birthplace -1- Location

@endchen

図 2.17 ER図 (Chenに拠る)#

entity users {
  * **id** : INTEGER <<not null>>
  --
  * username : VARCHAR
  created_at : TIMESTAMP
  deleted_at : TIMESTAMP
  description : VARCHAR
  name : VARCHAR
  updated_at : TIMESTAMP
  }

entity tweets {
  * **id** : INTEGER  <<not null>>
  --
  * author_id : INTEGER <<not null>>
  created_at : TIMESTAMP
  deleted_at : TIMESTAMP
  tweet : VARCHAR
  updated_at : TIMESTAMP
}

tweets }o-|| users

図 2.18 ER図#

@startuml

interface "Data Access" as DA

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

@enduml

図 2.19 コンポーネント図#

start

repeat
:read data;
:generate diagrams;
repeat while (more data?)

stop

図 2.20 SDL(仕様記述言語)図#

@startebnf
title Title
not_styled_ebnf = {"a", c , "a" (* Note on a *)}
| ? special ?
| "repetition", 4 * '2';
(* Global End Note *)
@endebnf

図 2.21 EBNF図#

@startregex
title optionalRepetition
ab*
@endregex

図 2.22 正規表現図#

@startuml
:<math>int_0^1f(x)dx</math>;
:<math>x^2+y_1+z_12^34</math>;
note right
Try also
<math>d/dxf(x)=lim_(h->0)(f(x+h)-f(x))/h</math>
<math>P(y|bb"x") or f(bb"x")+epsilon</math>
end note
@enduml

図 2.23 AsciiMath記法による数式(PNG形式出力のみ)#

2.2.3.1. Wikipedia中のExample#

WikipediaのPlantUML項目中で示された図版。

skinparam style strictuml
class Façade {
 doSomething()
}
Façade .> package1.Class1
Façade .> package2.Class2
Façade .> package3.Class3
Client1 .> Façade : doSomething()
Client2 .> Façade : doSomething()
note as N2
doSomething() {
  Class1 c1 = newClass1();
  Class2 c2 = newClass2();
  Class3 c3 = newClass3();
  c1.doStuff(c2)
  c3.setX(c1.getX());
  return c3.getY();
}
end note
Façade .. N2

図 2.24 example on Wikipedia#