PlantUML による UML 図の描き方
[履歴] [最終更新] (2017/09/16 02:27:08)
最近の投稿
注目の記事

概要

PlantUML はテキスト形式で表現されたシーケンス図やクラス図といった UML (Unified Modeling Language) 図の情報から画像を生成するためのツールです。簡単な使い方をまとめます。

インストール方法の選択

Atom や Eclipse のプラグインをインストールしてエディタから利用する方法、JAR をダウンロードして Java コマンドで実行する方法、Redmine や Confluence にインストールする方法など、様々な利用方法が選択できます。ここでは簡単のため、GitHub Gist の ID を指定してアクセスすると画像を生成して返す PlantUML Gist というサービスを利用します。その他、オンラインエディタも編集時に便利です。「Switch layout」ボタンを押してから利用します。

簡単なサンプル

PlantUML 言語仕様がまとめられた公式ドキュメントを参考に、簡単なサンプルを記載します。

シーケンス図

Uploaded Image

@startuml
actor アリス as A
database ボブ as B

== 初期化 ==
A -> B: 矢印
note left: 一行
B --> A: 点線矢印
note right
複数行
複数行
end note

== 何らかの処理グループ ==
A -> B
A <-- B
create actor 新規アクター as C
A -> C: new
@enduml

クラス図

Uploaded Image

@startuml
package com.example.mypackage {
  class MyClass {
    int myVal1
    String myVal2
    void myMethod()
  }
  note left: クラス定義直後の注釈

  MyClass <|-- MySubClass: 継承
  MyClass1 <-- MyClass2: 実線の矢印
  MyClass1 <.. MyClass2: 点線の矢印

  note top of MyClass1: 一行
  note bottom of MyClass1: 一行
  note left of MyClass1
  複数行
  複数行
  end note

  note "複数クラスに対する注釈" as N
  MyClass1 .. N
  N .. MyClass2
}

enum MyEnum {
  C1
  C2
}
interface IMyClass
abstract class MyAbstractClass
annotation MyAnnotation
@enduml

状態遷移図

Uploaded Image

@startuml
state "状態1" as S1
state "状態2" as S2

S1: 状態に関する説明その1
S1: 状態に関する説明その2
note left of S1: 一行注釈

[*] --> S1: 始点から状態1へ
S1 --> [*]
S1 --> S2
S2 --> [*]
@enduml

アクティビティ図

Uploaded Image

@startuml
start
:処理1;
note left
複数行注釈
複数行注釈
end note
fork
  :並行処理2-1;
fork again
  :並行処理2-2;
end fork

if (何らかの判定) then (yes)
  :処理3;
elseif (何らかの別の判定) then (yes)
  :処理4;
else (該当なし)
  :処理5;
endif

repeat
  :処理6;
repeat while (繰り返し判定?)

while (繰り返し判定?) is (ループ必要)
  :処理7;
  -> 文字列あり矢印;
endwhile (ループ不要)
stop
@enduml

全 UML 図に共通の PlantUML 文法

Uploaded Image

@startuml
title
タイトル文字列
end title   
legend right
説明
説明
end legend
Alice -> Bob
'一行コメント
/'
コメント
コメント
'/
@enduml
関連ページ
    概要 よく使う python ライブラリのサンプルコード集です。 JSON #!/usr/bin/python # -*- coding: utf-8 -*- import json arr = [1, 2, {'xxx': 3}] # オブジェクト ←→ JSON 文字列 jsonStr = json.dumps(arr) arr2 = json.loads(jsonStr) # オ