シーケンス図、ユースケース図、クラス図、アクティビティ図、コンポーネント図、ステート図、デプロイ図、オブジェクト図などイロイロ作れる java 製ツール

http://plantuml.com/

インストール・実行

brew install graphviz
brew install plantuml

記法に従ってテキストに記述したファイル(hoge.pu)を作り、以下のコマンドを叩くとテキストと同じディレクトリに画像が生成される。

$ plantuml hoge.pu

描画

シーケンス図

@startuml
'分類子の宣言 (何も宣言しないと participant)
box
	participant Hoge
	participant "Named\nAs Fuga" as Fuga #cyan
end box
actor Actor #red
boundary Boundary #black
control Control #yellowgreen
entity Entity #purple
database Database #pink
collections Collections #yellow

'シーケンス
Hoge -> Fuga: to participant
Hoge -> Actor: to actor
Hoge -> Boundary: to boundary
Hoge -> Control: to control
Hoge -> Entity: to entity
Hoge -> Database: to database
Hoge -> Collections: to collections
Hoge -> Hoge: to myself
Actor --> Hoge: from actor
Hoge <-> Fuga
Hoge ->x Fuga
Hoge ->o Fuga
Hoge ->> Fuga
Hoge -\ Fuga
Hoge -\\ Fuga
Hoge --\\ Fuga
Hoge -/ Fuga
Hoge -// Fuga
Hoge --// Fuga
Hoge /- Fuga
Hoge //- Fuga
Hoge //-- Fuga
Hoge \- Fuga
Hoge \\- Fuga
Hoge \\-- Fuga
Hoge -[#red]> Fuga
Hoge -[#cyan]->o Fuga
Hoge <[#blue]-> Fuga

autonumber
Hoge -> Actor : 自動で
Actor <- Boundary : 番号が
Boundary <-> Control : 増える
Control --> Entity

autonumber 15 4
Hoge -> Actor
Hoge -> Boundary : 15 から
Hoge -> Control : 4 ずつ
Hoge -> Entity : 増える

autonumber 4 "<u>request-000</u>"
Fuga -> Boundary
Fuga -> Control : HTML タグ使用可
Fuga -> Entity : "000" のように桁数指定

'一時停止
autonumber stop
Hoge -> Fuga

'再開
autonumber resume
Fuga -> Database

autonumber stop


'ライフライン
activate Hoge
Hoge -> Actor
activate Actor #cyan
Actor -> Database
activate Database #blue
Actor <- Database
deactivate Database
Hoge <- Actor
destroy Actor

Hoge -> Boundary
activate Boundary #pink
Boundary -> Boundary
activate Boundary #salmon
deactivate Boundary
Hoge <- Boundary
deactivate Boundary

deactivate Hoge

'メッセージのグルーピング
group request and response
	group request
		Actor -> Boundary
		Boundary -> Control
		activate Control
	end
	group response
		Control -> Boundary
		deactivate Control
		Boundary -> Actor
	end
end

'メッセージの注釈
Hoge -> Fuga
note right #pink: right\ncomment
Hoge <- Fuga
note left
	<font color="red">left
	<b>comment
end note
note over Hoge: over Hoge
note over Hoge, Actor #yellowgreen: over Hoge, Actor
note right of Hoge: note right\nof Hoge
hnote left of Hoge: hnote left\nof Hoge\n(hexagon)
rnote over Hoge: rnote over Hoge\n(rectangle)

'遅延・コメント付き遅延
...
... <font size="30"><b>long delay ...
...
...
Hoge -> Entity
...
...

'境界線
== Initialization ==

'間隔(ピクセル数指定も可能)
Hoge -> Boundary
|||
Hoge -> Boundary
|||
|||
Hoge -> Boundary
|||
|||
|||
Hoge -> Boundary
||100||
Hoge -> Boundary

'分類子の生成
create Tom
Entity -> Tom
create database DB2 #red
Entity -> DB2

'インとアウト
Database ->] : out
Database <-] : in
[<- Actor : out
[-> Actor : in

'ステレオタイプとスポット
create Piyo << (C,#ADD1B2) Generated >>
Entity -> Piyo

'フッター削除
hide footbox

@enduml

こういうのも指定すると面白そう。

@startuml
skinparam backgroundColor #EEEBDC
skinparam handwritten true

skinparam sequence {
	ArrowColor DeepSkyBlue
	ActorBorderColor DeepSkyBlue
	LifeLineBorderColor blue
	LifeLineBackgroundColor #A9DCDF
	
	ParticipantBorderColor DeepSkyBlue
	ParticipantBackgroundColor DodgerBlue
	ParticipantFontName Impact
	ParticipantFontSize 17
	ParticipantFontColor #A9DCDF
	
	ActorBackgroundColor aqua
	ActorFontColor DeepSkyBlue
	ActorFontSize 17
	ActorFontName Aapex
}

actor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as C

User -> A: DoWork
activate A

A -> B: Create Request
activate B

B -> C: DoWork
activate C
C --> B: WorkDone
destroy C

B --> A: Request Created
deactivate B

A --> User: Done
deactivate A

@enduml

Atom との連携

  • Atom > Preference > Install > “plantuml-viewer”
  • 文法に従って何か記述
  • Ctrl + Opt + pでプレビュー起動

よくわからないエラーが出てうまく preview されなかった。

出たメッセージによると既に報告済みのエラーとのことなので、エラーメッセージに書かれていたリンクを見たところ、Atom 再起動で直ったとのことなのでやってみたところ、表示はマトモになったが別?のエラーが。

Uncaught TypeError: Cannot read property 'getRelativeZoom' of undefined
/Users/hkawabat/.atom/packages/plantuml-viewer/node_modules/svg-pan-zoom/src/svg-pan-zoom.js:349
Hide Stack Trace
TypeError: Cannot read property 'getRelativeZoom' of undefined
    at SvgPanZoom.getRelativeZoom (/Users/hkawabat/.atom/packages/plantuml-viewer/node_modules/svg-pan-zoom/src/svg-pan-zoom.js:349:23)
    at Object.getZoom (/Users/hkawabat/.atom/packages/plantuml-viewer/node_modules/svg-pan-zoom/src/svg-pan-zoom.js:708:40)
    at updatePanZoom (/Users/hkawabat/.atom/packages/plantuml-viewer/lib/plantuml-viewer-view.js:134:32)
    at /Users/hkawabat/.atom/packages/plantuml-viewer/lib/plantuml-viewer-view.js:52:7
The error was thrown from the plantuml-viewer package. This issue has already been reported.

これも報告済みらしいが、Issueが閉じてない模様。 何度か Viewer を開いたり閉じたりしていると直った。

IntelliJ との連携

  • IntelliJ IDEA > Preference > Plugins > “PlantUML integration”
  • プロジェクトを開き、適当なディレクトリを右クリック > New > UML xx
  • エディタと同時にプレビューが開く