Hajimeの妄言とTechの部屋

このブログでは、テック系の話や、ドキュメントに関する話などをエンジニアが「こんな感じに使うとええんじゃね?」ということを書き連ねるブログです。

僕的Plant UMLのススメ【図形描画編】

はじめに

こんにちは。
このブログも開始から無事1ヶ月経過しました。
本日は前回(UML知識&環境構築 for mac編)前々回(Style編)に続いて、いよいよPlantUMLで図形の描画に関しての記述をまとめていきます。

僕的PlantUMLのススメ

  1. Style編 (前々回)
  2. UML知識&環境構築 for mac編 (前回)
  3. 図形描画編 (今回)

構成

PlantUMLは様々な図を表現することができますが、ここでは@ogomrさんの「PlantUML Cheat Sheet」*1に則って、大きく振る舞い図と状態図に分けて解説していきます。
また、可能な限りサンプルを用意していますが、図を含むサンプルは記述が長くなりすぎるので、基本的には▶Sample みたいな感じで閉じていますので、利用したい方は開いてみてください。
ではいつものようにネタ画像とともに、どうぞ。

乾_俺はたった今から

目次

目次一覧

1. 全般

1-1. コメント

ここで書くコメントは、PlantUMLでの記述中にメモとして残すコメントです。
なので、図には反映されません。
本記事ではわかりやすさのため、サンプルのPlantUML上にコメントを残していきますので、最初にご紹介します。

書き方
1行のみのコメント
`
複数行のコメント

/` 
HOGE
FUGA
`/

sample

@startuml

` 1行のみのコメント
` 簡潔かつわかりやすく書くことが大事

/`
複数行に渡るコメント
ガッツリ説明を入れる場合などに使う
`/
@enduml

1-2. タイトル・ヘッダー・フッター

項目 説明
title ページにタイトルを付ける
header ページにヘッダーを付ける
footer ページにフッターを付ける

Sample

f:id:DTM3110:20191103124802p:plain

@startuml
' 表示スタイルの設定
skinparam Shadowing false
skinparam Monochrome true

' ==============本題は以下から=============
header 僕的Plantumlのススメ\n(ヘッダー)
title サンプルのヘッダー\n改行はこちら
footer 僕的Plantumlのススメ\n(フッター)
' どのパラメータも \n により改行を入れることができる

(hoge) -> (fuga)

@enduml

1-3. ページ分割

newpage を入れることでグラフを分割して、ページを分けることができる
newpage 前後ではスタイルやヘッダー・フッター・タイトルなどすべて受け継がないので、同一ファイル内で複数の画像を生成するというイメージのほうがあっているかも‥

1-4. ノート(メモ)

PlantUMLではあらゆる要素に対して、メモを差し込むことができる。
キーワードは noteで、様々な方法でノートの挿入が可能になっている。

また、差し込んだメモ内には次のHTMLタグなどを利用することができる。

利用可能タグ一覧

  • <b>
    • 太文字指定
  • <u>
    • アンダーライン
  • <i>
    • 斜字体
  • <s>, <del>, <strike>
    • 打ち消し線
  • <font color="HOGEHOGE">または<color:#HOGEHOGE>
    • 文字色変更
  • <font size="NN">または<size:nn>
    • フォントサイズ変更
  • <img src="file"> または<img:file>
    • 画像の挿入 *2

Sample

f:id:DTM3110:20191103160223p:plain

@startuml
' ヘッダー・フッターを読み込み & スタイル定義
!include ./const_contents.plantuml
skinparam Shadowing false
' タイトル
title ノート(メモの使い方)

/'単純なノート
  他の要素に直接繋げない場合、名前を付ける必要があるので注意
'/
note "単純なノート" as sinmpeNote

' 複雑なノート
note as complexNote
  複雑なノート
  改行するとそのまま改行される
  ===
  ' ===で二重線を引くことができる
  - <b>太文字</b>
    - **「*」も使える**
  - <u>アンダーライン</u>
    - __「_」も使える__
    - ~~「~」で波線も使える~~
  - <i>斜字体</i>
    - //「/」も使える//
  - <s>打ち</s>  <del>消し</del>  <strike>線</strike>
    - --「-」も使える--
  - <font color="indigo">文字色変更</font>
  - <size:11>フォントサイズ変更</size>
  - 画像の挿入
  ---
  ' ---で境界線を引くことができる
  <img https://pbs.twimg.com/profile_images/3228282688/4a3c9e25b9831f3d74c357cae6c90636_reasonably_small.png>
end note

/'エレメントとノートを関連付ける
  1. 関連付けるエレメントの直後にnoteを入れる
  2. ノートに名前をつけ、線でつなぐ
'/
(上note)
note top: 上にノートをくっつける
(右note)
note right: 右にノートをくっつける
(下note)
note bottom
  下にノートをくっつける
  複数行もできる
end note
(左note)
note left
  左にノートをくっつける
  複数行もできる
end note

complexNote ... (右note)
complexNote --- (上note)

(上note) -right-> (右note)
(右note) -down-> (下note)
(下note) -left-> (左note)
(左note) -up-> (上note)

@enduml

1-5. 表示順序

描画の順番を左右方向か、上下方向化を指定する。
defaultは上下方向。

key sample
top to bottom direction f:id:DTM3110:20191103180545p:plain
left to right direction f:id:DTM3110:20191103180721p:plain

Sample

@startuml
' ヘッダー・フッターを読み込み & スタイル定義
!include ./const_contents.plantuml
!include ./const_style.plantuml
' タイトル
title 表示順序変更\ntop to bottom(default)

top to bottom direction
(001) --> (002)
(002) --> (003)

newpage

' ヘッダー・フッターを読み込み & スタイル定義
!include ./const_contents.plantuml
!include ./const_style.plantuml

' タイトル
title 表示順序変更\nleft to right
left to right direction

(001) --> (002)
(002) --> (003)

@enduml

1-6. ライブラリー

PlantUMLではスタンダードライブラリーとして AWSAzureCloud InsightなどのLibraryが用意されており、実際にPlantUMLで利用することができる。

Sample f:id:DTM3110:20191103183911p:plain

@startuml
!include ./const_contents.plantuml
!include <aws/common>
!include <aws/Storage/AmazonS3/AmazonS3>
!include <aws/Storage/AmazonS3/bucket/bucket>
skinparam Shadowing false

title ライブラリーインポート(AWS)

AMAZONS3(s3_internal)
AMAZONS3(s3_partner,"Vendor's S3")
s3_internal <- s3_partner
@enduml


2. 振る舞い図

2-1. 全般

2-1-1. シーケンス番号付

振る舞い図における順序において、上から順に番号付をしてくれる機能。
autonumber <連番開始数(省略可)> <数字送りの幅> "<フォーマット>"

Sample

f:id:DTM3110:20191103191942p:plain

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title シーケンス番号付

autonumber
HOGE -> FUGA : 自動連番開始
HOGE <- FUGA : 連番を一時停止
autonumber stop
HOGE -> FUGA : 停止中
autonumber resume "<b>[0]"
HOGE -> FUGA : フォーマットを変えて再開
HOGE <- FUGA : 再停止
autonumber stop
HOGE -> FUGA : 停止中
autonumber 1 10 "<b>0.0: "
HOGE -> FUGA : 連番振り直し
HOGE <- FUGA : 連番間隔を10に設定
@enduml

2-1-2. 境界線・遅延・間隔

key 名称
== <境界線名称> == 境界線
... 遅延
||<間隔px>|| 間隔

Sample

f:id:DTM3110:20191103194951p:plain

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title 境界線・遅延・間隔

' 境界線
== 境界線 ==
FUGA --> HOGE: Authentication Request
HOGE --> FUGA: Authentication Response
' 遅延
...
FUGA --> HOGE: Another authentication Request
HOGE --> FUGA: another authentication Response
' 間隔50px
||50||
FUGA --> HOGE: Another authentication Request
HOGE --> FUGA: another authentication Response
@enduml

2-1-3. 条件

エンジニアの方なら見慣れた ifelseを使う処理。
サンプルを見るのが一番早いやつ。

Sample

f:id:DTM3110:20191103220152p:plain

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title 条件文

start
if (A or B) then (A)
  :Aを選んだらこっち;
elseif (A or B) then (B)
  :Bを選んだらこっち;
  stop
else
  :どれも選ばなかったらこっち;
  stop
endif
stop
@enduml

2-1-4. 繰り返し

ある条件がクリアするまで繰り返す。
繰り返しには後判定前判定の2パターンがある。

key 繰り返しパターン 詳細
(処理Aを繰り返す場合)
repeat while 後判定 Aの処理が終了した後に繰り返すかどうかの判定をする
while 前判定 Aの処理を実施する前に実施するかどうかの判定をする

Sample

f:id:DTM3110:20191103221435p:plain

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title 繰り返し

start
' 後判定
repeat
  :HOGE;
repeat while (繰り返す?)
' 前判定
while (繰り返す?)
  :FUGA;
endwhile

stop
@enduml

2-1-5. 並列処理

複数の処理を同時並行で処理する場合の記述する。
フォークノードやジョインノード等と呼ばれる。

Sample

f:id:DTM3110:20191103230644p:plain

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title 並列処理

start

if (並列処理する?) then (yes)
  fork
    :並列タスク1;
  fork again
    :並列タスク2;
  end fork
else (no)
  :非同期タスク1;
  :非同期タスク2;
endif
stop
@enduml

2-2. ユースケース

ユースケース図ではいろいろな記号を使うので、それぞれの書き方をまとめます。

名称 キーワード 省略記法 サンプル
ユースケース usecase ユースケース (ユースケース省略記法) f:id:DTM3110:20191103230919p:plain
アクター actor アクター :アクター省略記法: f:id:DTM3110:20191103232154p:plain
ステレオタイプ <<ステレオタイプ>> f:id:DTM3110:20191104002338p:plain
関連(矢印) ->,-->,..|> なし f:id:DTM3110:20191103235820p:plain

矢印サンプル

f:id:DTM3110:20191103235820p:plain

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title 矢印

left to right direction
:アクター1: -> (ユースケース1)
:アクター1: -------> (ユースケース2)
:アクター1: ..|> :アクター2: : <<extend>>
:アクター2: ..|> :アクター3: : <<include>>
:アクター3: -left-> (左)
:アクター3: -right-> (右)
:アクター3: -up-> (上)
:アクター3: -down-> (下)

@enduml

ユースケース図Sample

f:id:DTM3110:20191104004223p:plain

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title ユースケース図

left to right direction
actor 顧客 as 顧客 <<ユーザー>>
actor 受付 as 受付 <<ユーザー>>
actor 受付システム as 受付システム <<システム>>

rectangle チェックアウト {
  顧客 --> (チェックアウト)
  (チェックアウト) <-- 受付
  (チェックアウト) ..|> (支払い) : <<include>>
  (問い合わせ) ..|> (チェックアウト) : <<extends>>
  (問い合わせ) -down-> 受付システム
}

@enduml

2-3. アクティビティ図

アクティビティ図にも記号が複数あるのでそれぞれまとめます。

名称 キーワード 省略記法(ベータ版) サンプル
アクティビティ "アクティビティ" :アクティビティ; f:id:DTM3110:20191104012020p:plain
初期ノード (*)--> start f:id:DTM3110:20191104010635p:plain
終端ノード -->(*) stop f:id:DTM3110:20191104010738p:plain
動線 |<動線名称>| |<動線名称>|

導線Sample 上記導線Sample

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title 動線
|α|
start
|β|
:1;
|γ|
|δ|
:2;
|ε|
:3;
|γ|
:4;
|β|
stop

@enduml

Sample

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title アクティビティ図

|自宅|
start
:起床;
fork
  if (時間の猶予) then (ある)
    :朝ごはんを準備;
    :朝食;
  else (ない)
  endif
fork again
  :テレビをつける;
  :天気を確認;
end fork
:出勤の準備;
if (終日の天気) then (雨模様)
  :電車を確認;
  |屋外|
  :家を出る;
  :電車に乗る;
  |会社|
  :会社ビルに\n到着;
else (晴れ)
  |屋外|
  :家を出る;
  :自転車の状態を確認;
  :自転車に乗る;
  while (移動)
    :自転車で移動;
  endwhile (会社ビルに到着)
  |会社|
endif
:エレベーターに乗る;
:執務室階へ移動;
:勤怠をつける;
stop
@enduml

3. 状態図

3-1. クラス図

クラスの関連を示す矢印の記法は3種類あります。

Type key
関連(Association) ---
集約(Aggregation) o--
コンポジション
(Composition)
*--
依存(Dependency) <..
汎化(Generalization) <|--
実現(Realization) <|...

また、下記のように接続するクラスと関連の矢印の間に"1*などの多重度をラベルとしてつけることができます。

Class01 "1" --- "1..n" Class02

f:id:DTM3110:20191104132046p:plain

関連矢印Sample

サンプル図は上記のもの

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title Class 関連矢印

rectangle 関連\n(Association) {
  Association01 "0" -- "*" Association02
}

rectangle 集約\n(Aggrefation) {
  Aggrefation01 "1" --o "*" Aggrefation02
}

rectangle コンポジション\n(Composition) {
  Composition01 "1" --* "1..n" Composition02
}

rectangle 依存\n(Dependency) {
  Dependency01 "*" ..> "*" Dependency02
}

rectangle 汎化\n(Generalization) {
  Generalization01 "1..n" --|> "*" Generalization02
}

rectangle 実現\n(Realization) {
  Realization01 "1" ..|> "1" Realization02
}

@enduml

クラスは上記で説明した関連を使えば勝手に作成されますが、中身を詳細に書こうと思うと、きちんと定義して上げる必要があります。
定義の仕方は大きく「最初に{}を使ってフィールドとメソッドを作る方法」と「宣言した後にそれぞれのエレメント等を定義する方法」、2パターンあります。

f:id:DTM3110:20191104134003p:plain

クラス宣言Sample サンプル図は上記のもの

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title Class

Class 先に宣言するクラス {
  data : String
  setData() : Void
}

先に宣言するクラス "1" - "1" 後で要素を追加するクラス

後で要素を追加するクラス : data : Object[]
後で要素を追加するクラス : getData() : String

@enduml

クラスの中にはデータ・もしくはfunctionの可視性を定義することができます。

Type Key 内容
private
プライベート
- 宣言クラスのみアクセス可能
package private
パッケージプライベート
~ 宣言クラスと同パッケージのみアクセス可能
protected
プロテクト
# 宣言クラス・サブクラスのみアクセス可能
public<パブリック> + すべてのクラスからアクセス可能

f:id:DTM3110:20191104135753p:plain

可視性(Visiility)Sample サンプル図は上記のもの

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
skinparam Shadowing false
title 可視性(Visibility)

Class Visibility {
  - privateData : String
  - privateFunction() : Void
  # protextedData : String
  # protextedFunction() : Void
  ~ packagePrivateData : String
  ~ packagePrivateFunction() : Void
  + publicData : String
  + publicFunction() : Void
}

@enduml

クラス図はパッケージとしてまとめることができます。
f:id:DTM3110:20191104141159p:plain

パッケージSample 図は上記

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title パッケージ

package Nodeパッケージ <<Node>> {
  class NodeClass
}

package 四角パッケージ <<Rectangle>> {
  class RectangleClass
}

package フォルダーパッケージ <<Folder>> {
  class FolderClass
}

package フレームパッケージ <<Frame>> {
  class CrameClass
}

package クラウドパッケージ <<Cloud>> {
  class CloudClass
}

package データベースパッケージ <<Database>> {
  class DatabaseClass
}

@enduml

クラスで使われる目印文字を指定して利用することができます。
f:id:DTM3110:20191104142423p:plain

目印文字指定Sample

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
skinparam Shadowing false
title 目印文字

Class Hash <<(H,#00bfff)>>
Class Analysis <<(A,#fa8072)>>
Class Joke <<(J,#f0f8ff)>>
Class Idea <<(I,#00ff7f)>>
Class Member <<(M,#ffb6c1)>>
Class Event <<(E,#00ced1)>>

@enduml

3-2. コンポーネント

関連や矢印等の書き方はクラス図と同じ。
[] 内でくくるとコンポーネントの表記に変わる。

f:id:DTM3110:20191104144812p:plain

コンポーネント図Sample 上記の図

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
skinparam componentStyle uml2

title コンポーネント図

package "認証認可パッケージ" {
  [認証]
  [ユーザー操作]
}

cloud "CloudファンクションAPI" {
  [認証API]
  [ユーザーAPI]
}

database "BigQuery" {
  [ユーザーデータ]
  [閲覧情報]
}

[認証] <--> [認証API]
[ユーザー操作] --> [認証API]
[ユーザー操作] <--> [ユーザーAPI]
[認証API] <--> [ユーザーデータ]
[ユーザーAPI] <--> [ユーザーデータ]
[ユーザーAPI] <--> [閲覧情報]

@enduml

3-3. オブジェクト図

オブジェクト図はPlantUML上の記述方法がほぼほぼクラス図と同じで、「クラス図からファンクション部分がなくなったもの」という認識で十分です。
使い方も Objectというキーワードを入れると後はClass図のときと同様に利用することができます。

f:id:DTM3110:20191104153924p:plain

Sample 図は上記

@startuml
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
skinparam Shadowing false
top to bottom direction

title Object図

rectangle 関連 {
  rectangle 実現\n(Realization) {
    Object Realization01
    Object Realization02
    Realization01 "1" .|> "1" Realization02
  }
  rectangle 汎化\n(Generalization) {
    Object Generalization01
    Object Generalization02
    Generalization01 "1..n" -|> "*" Generalization02
  }
  rectangle 依存\n(Dependency) {
    Object Dependency01
    Object Dependency02
    Dependency01 "*" .> "*" Dependency02
  }
  rectangle コンポジション\n(Composition) {
    Object Composition01
    Object Composition02
    Composition01 "1" -* "1..n" Composition02
  }
  rectangle 集約\n(Aggrefation) {
    Object Aggrefation01
    Object Aggrefation02
    Aggrefation01 "1" -o "*" Aggrefation02
  }
  rectangle 関連\n(Association) {
    Object Association01
    Object Association02
    Association01 "0" - "*" Association02
  }
}

rectangle 可視性 {
  Object Visibility {
    - privateData : String
    # protextedData : String
    ~ packagePrivateData : String
    + publicData : String
  }
}

rectangle パッケージ {
  package データベースパッケージ <<Database>> {
    Object DatabaseObject
  }
  package クラウドパッケージ <<Cloud>> {
    Object CloudObject
  }
  package フレームパッケージ <<Frame>> {
    Object CrameObject
  }
  package フォルダーパッケージ <<Folder>> {
    Object FolderObject
  }
  package 四角パッケージ <<Rectangle>> {
    Object RectangleObject
  }
  package Nodeパッケージ <<Node>> {
    Object NodeObject
  }
}

可視性 -[hidden]le- パッケージ
関連 -[hidden]do- パッケージ

@enduml

4. その他

実はPlantUMLはUMLだけではなく様々なものを扱うことができます。
今回はその中でも使い勝手の良いものをいくつかご紹介します。(サンプルと書き方だけですが…。)

4-1. マインドマップ

@startmindmap @endmindmapを使う。
Markdownのリストみたいな書き方。
子要素にする場合は親要素の直後に「親要素の*の数+1」個の*を先頭につけて記述。 テキストのみを表示する場合は最後の*の後に_を入れる

f:id:DTM3110:20191104163211p:plain

Sample 図は上記

@startmindmap
' ヘッダー・フッターを読み込み & スタイル定義ファイル読み込み
!include ./const_contents.plantuml
!include ./const_style.plantuml
title マインドマップ

* <&star>星のカービィ
** サウンド
*** ボイス
****_ 大本 眞基子(カービィ他)
****_ 桜井 政博(デデデ 64, スマブラ)
****_ 緒方 賢一(デデデ アニメ)
****_ 熊崎 信也(デデデ USD, Wii, トリデラ)
****_ 私市 淳(メタナイト)
****_ 齋藤 彩夏(ワドルディ)
*** 効果音
****_ 安藤浩和
****_ 石川淳
****_ 小笠原雄太
*** 音楽
****_ 安藤浩和
****_ 石川淳
****_ 小笠原雄太
** テキスト
*** システムメッセージ
****_ 子供向け
****_ 伏線を張りまくる
****_ ネタを作る
*** ナレーション
****_ 毛糸のカービィのみナレーションあり
****_ 津賀 有子
*** セリフ
****_ 備えあれば嬉しいな!
****_ 才能は無くても根気だけはある物好きは腐るほどいるでゲス
****_ 環境破壊は気持ちいいぞい
** グラフィック
*** 背景
****_ 美しい系のきれい
****_ 違和感がない程度に異常
*** オブジェクト
****_ 限りなく少ない
****_ ワドルディが時々コントしてる
*** カメラワーク
****_ 固定
*****_ 基本2D移動
left side
** 世界観
*** コンテキスト
****_ カービィの周りは平和
****_ なにげにシリーズを通して深い
*** キャラクター
****_ 基本的に可愛らしいビジュアル
*** イベント
****_ ギミック多め
****_ HAL部屋
****_ 裏切り
****_ 敵の敵は味方
*** ストーリー
****_ 可愛らしさ優先
****_ 割とエグい設定
****_ 世界の危機(いつもの)
** システム
*** 自由度
****_ 増え続けるコピー能力
****_ 基本ストーリーをなぞる
****_ 移動に関する自由はほぼ無い
*** 操作性
****_ コピー能力によりコマンド有り
****_ ノーマルの場合は単純明快
*** ゲームバランス
****_ 基本初心者向け
****_ 上級者向けのモードあり

@endmindmap

4-2. ツリー

木構造ウィジェットを作る感じで利用可能。 ワイヤーを作る機能に付随している(@startsalt@endsaltで囲む)。

f:id:DTM3110:20191104165026p:plain

Sample

@startsalt
{
  {T
    + World
    ++ America
    +++ Canada
    +++ USA
    ++++ New York
    ++++ Boston
    +++ Mexico
    ++ Europe
    +++ Italy
    +++ Germany
    ++++ Berlin
    ++ Africa
  }
}
@endsalt

4-3. 算術表記

PlantUMLではAsciiMathやJLaTeXMathの構文が利用可能。

f:id:DTM3110:20191104164206p:plain

Sample

@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>
    <latex>P(y|\mathbf{x}) \mbox{ or } f(\mathbf{x})+\epsilon</latex>
end note

@enduml

4-4. ワイヤーフレーム

ツリー構造のところで記述したとおり、@startsalt@endsaltで囲んで記述する。
チープなUIだが、いろいろ書くことができる。

f:id:DTM3110:20191104165935p:plain

Smaple

@startsalt
{+
  {* ファイル | 編集 | 表示 | ウィンドウ | ヘルプ}
  {/ ブログ記事編集 | 僕的URMのススメ | PlanUML言語 }
  {
    { 保存種別: | ^日時を指定して予約投稿^ }
    [X] サムネイル画像を変更する
    [X] Twitterと連携し、投稿されたらツイートする
    [ ] 投稿時にメールを送信する
  }
  [Close]
}
@endsalt

おわりに

今回も、信じられないくらい長文になりましたが、なんとかPlantUMLシリーズ書ききることができました。
今回ご紹介したPlantUMLはまだいろいろな機能があります。(私はあまり使わないのですが…)
PlantUML自体の記述方法は簡単ですが、使いこなそうと思うと一気に難しくなります。
触れる機会が多いほど、当たり前にかけるようになってくるので、是非仕事だけじゃなく個人的でも、趣味でもいろいろなところで使ってみてください。

ではまた次回。

参考