PlantUML使い方メモ #Java - Qiita の続き。
クラス図やシーケンス図以外の図の書き方について、気になったやつのメモ。
◆EBNF図
Extended Backus–Naur Form diagram
- プログラミング言語の構文を説明するときとかに用いられる図
- EBNF 自体の説明は EBNF - Wikipedia とかを参照
EBNF の基本
hoge = "a" | "b" | fuga;
fuga = "1" | "2";
- EBNF は、プログラムの構文を生成規則を列挙することによって表現する
- 上の例は、
hoge
とfuga
の2つの生成規則を定義している - 生成規則
hoge
は、文字a
, 文字b
または別の生成規則fuga
のいずれかであることを示している - 生成規則
fuga
は、文字1
または 文字2
のいずれかであることを示している
終端記号と非終端記号
- プログラムの構文は、最終的には全て終端記号で構成されるものと考えることができる
- 終端記号とは、
a
や1
,*
などの具体的な文字や数字、記号などを指す
- 終端記号とは、
- 一方で、上の例の
hoge
やfuga
などのように、他の終端記号や生成規則に分解可能なものは非終端記号と呼ぶ- 逆に言うと、具体的な文字はそれ以上分解できないから終端記号と呼べる
- EBNF は、非終端記号を終端記号に達するまで分解していっているようなものと考えられる
終端記号
@startebnf
hoge = "a";
@endebnf
- 終端記号はダブルクォーテーション (
"
) で囲うことで表現できる
非終端記号
@startebnf
hoge = fuga;
@endebnf
- 素のテキストは非終端記号として扱われる
いずれか
@startebnf
hoge = "a" | "b" | "c";
@endebnf
- パイプ (
|
) で区切ることで、いずれかが選択可能であることを表す
順序
@startebnf
hoge = "a", "b", "c";
@endebnf
- カンマ (
,
) で区切ることで、その順序で並ぶ必要があることを表すことができる
グループ化
@startebnf
hoge = ("a" | "b"), "c";
@endebnf
- 丸括弧 (
()
) で囲うことでグループ化できる
任意
@startebnf
hoge = ["a"];
@endebnf
- 角括弧 (
[]
) で囲うことで、任意を表現できる
0回以上
@startebnf
hoge = {"a"};
@endebnf
- 波括弧 (
{}
) で囲うことで、0回以上を表現できる
1回以上
@startebnf
hoge = {"a"}-;
@endebnf
- 波括弧 (
{}
) で囲った後ろにハイフン (-
) をつけることで、1回以上を表現できる
n回
@startebnf
hoge = 3 * "a";
@endebnf
-
n *
を前につけることで、繰り返し回数を指定できる
特殊シーケンス
@startebnf
hoge = ? 0-9 ?;
@endebnf
- はてな (
?
) で囲うことで、特殊シーケンス(special sequence)を表現できる - これは EBNF で表現しきれない特殊なケースを任意の表現で説明するときに利用する
ノート
@startebnf
(* ノート
改行 *)
hoge = "a" (*aaa*), [b (*bbb*)], {c}(*ccc*);
(*note*)
@endebnf
-
(*
,*)
で囲うことでノートを記載できる - 改行はそのまま反映される
- 各要素の直後に挿入することで、要素ごとにノートをつけることができる
応用
カンマ区切り
@startebnf
hoge = "a", {",", "a"};
@endebnf
◆JSONデータ
@startjson
{
"string": "FOO",
"number": 10,
"boolean": true,
"null": null,
"list": [1, 2, 3],
"object": {
"foo": "bar"
},
"empty-list": [],
"empty-object": {}
}
@endjson
- JSON を表形式で表示させることができる
特定のプロパティをハイライトさせる
@startjson
#highlight "hoge"
#highlight "fuga"/"fuga"
#highlight "piyo"/"2"
{
"hoge": "HOGE",
"fuga": {
"hoge": "HOGE",
"fuga": "FUGA"
},
"piyo": ["HOGE", "FUGA", "PIYO"]
}
@endjson
-
#highlight プロパティ
と記述することで、指定されたプロパティをハイライトできる - プロパティは、キーをダブルクォーテーションで囲って記述する
- ネストされた要素のプロパティを指定する場合は、スラッシュ (
/
) で区切ってプロパティのキーをつなげる - 配列の場合はインデックスをダブルクォーテーションで囲って記述する
ハイライトのスタイルを変更する
@startjson
<style>
highlight {
BackGroundColor lightblue
}
</style>
#highlight "hoge"
#highlight "fuga"/"fuga"
#highlight "piyo"/"2"
{
"hoge": "HOGE",
"fuga": {
"hoge": "HOGE",
"fuga": "FUGA"
},
"piyo": ["HOGE", "FUGA", "PIYO"]
}
@endjson
-
<style>
タグ?を追加して、そこに CSS みたいな感じでスタイルを定義する -
highlight
というタグ?に対してスタイルを定義することで、デフォルトのハイライトのスタイルを変更できる - プロパティは PlantUML 独自?のものを指定する
- プロパティに使えそうなものは以下
プロパティ | 説明 |
---|---|
BackGroundColor |
背景色 |
FontName |
フォント名 |
FontColor |
フォント色 |
FontSize |
フォントサイズ |
特定のプロパティだけハイライトを変更する
@startjson
<style>
.my-class {
BackGroundColor pink
}
</style>
#highlight "hoge" <<my-class>>
#highlight "fuga"
{
"hoge": "HOGE",
"fuga": "FUGA",
"piyo": "PIYO"
}
@endjson
-
<style>
で、任意のクラスでスタイルを定義する- クラス名の先頭に
.
が必要なので注意
- クラス名の先頭に
-
#highlight
の最後に割り当てたいクラスを<<クラス名>>
という形で指定する
◆YAMLデータ
@startyaml
string: "STRING"
number: 12
list:
- hoge
- fuga
-
foo: FOO
bar: BAR
nested:
hoge: HOGE
fuga: FUGA
@endyaml
- YAML データを表形式で表示できる
特定のプロパティをハイライトさせる
@startyaml
#highlight "hoge"
#highlight "fuga"/"hoge"
#highlight "piyo"/"2"
hoge: HOGE
fuga:
hoge: HOGE
fuga: FUGA
piyo:
- HOGE
- FUGA
- PIYO
@endyaml
- ハイライトのさせかたは JSON の場合 と同じ
- デフォルトの変更とかも JSON と同じなのでそっち参照
◆正規表現ダイアグラム
@startregex
^https?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
@endregex
- 正規表現を入力するとダイアグラムにして表示してくれる
◆ER図
- ER図を作成できる
エンティティの定義
entity HOGE {}
-
entity <名前> {}
でエンティティを定義できる- 空でも
{}
がないとシーケンス図と勘違いされるので注意
- 空でも
属性の定義
entity HOGE {
* ID: NUMBER
---
* name: VARCHAR
memo: VARCHAR
}
-
{}
の中にエンティティの属性を定義できる - 先頭に
*
をつけると必須属性であることを表すことができる - 属性の書式は割とフリーで、書いたものがそのまま表示される
-
---
で区切ることで、主キーとそれ以外を分けて表現できる
リレーション
Entity01 ||--|| Entity02
Entity03 |o--o| Entity04
Entity05 }|--|{ Entity06
Entity07 }o--o{ Entity08
-
|o
など専用の記法を使ってエンティティ同士をつなげることでリレーションを定義できる
左端 | 右端 | 意味 |
---|---|---|
|o |
o| |
0または1 |
|| |
|| |
1のみ |
}o |
o{ |
0以上 |
}| |
|{ |
1以上 |
非依存リレーション
Hoge ||..o{ Fuga
-
..
でつなげることと破線になり、非依存リレーションを表現できる
ラベルを付ける
Hoge ||--|| Fuga: ラベル
- リレーションの定義の後ろに
: ラベル
と続けることでラベルを付けることができる
◆ガント・ダイアグラム
- ガント・ダイアグラム(ガントチャート)を作成できる
タスクを定義する
@startgantt
[task1] requires 3 day
[task2] requires 4 day
[task3] requires 1 day
@endgantt
-
[タスク名] requires <日数> day
でタスクを期間とともに定義できる
タスクに別名をつける
@startgantt
[task1] as [t1] requires 2 day
@endgantt
- タスク名の後に
as [別名]
とすることで、タスクに別名をつけることができる
プロジェクトの開始日付を設定する
@startgantt
Project starts 2024-01-01
[task1] requires 10 days
@endgantt
-
Project starts <開始日>
と指定することで、プロジェクト全体の開始日を設定できる
タスクの開始を定義する
@startgantt
[task1] requires 3 day
[task2] requires 4 day
[task3] requires 2 day
Project starts 2024-01-01
[task1] starts D+0
[task2] starts D+2
[task3] starts 2024-01-04
@endgantt
-
[タスク名] starts <開始>
で、タスクの開始を定義する-
D+N
で、プロジェクトの開始からの相対的な日付で指定できる - プロジェクトの開始日を設定している場合は、開始を具体的な日付で指定できる
-
タスクの終了を定義する
@startgantt
[task1] requires 3 day
[task2] requires 4 day
[task3] requires 2 day
Project starts 2024-01-01
[task1] ends D+10
[task2] ends D+5
[task3] ends 2024-01-08
@endgantt
-
[タスク名] ends <終了>
で、タスクの終了を定義する-
D+N
で、プロジェクトの開始日からの相対的な日付を指定できる - プロジェクトの開始日を設定している場合は、終了を具体的な日付で指定できる
-
開始・終了を指定して定義する
@startgantt
Project starts 2024-01-01
[task1] starts D+0
[task1] ends D+4
[task2] starts 2024-01-02
[task2] ends 2024-01-04
@endgantt
-
requires
を使わずに、starts
とends
だけで定義することもできる
1行でまとめて定義する
@startgantt
Project starts 2024-01-01
[task1] starts D+0 and ends D+5
[task2] starts 2024-01-02 and ends 2024-01-04
[task3] starts 2024-01-03 and requires 3 days
@endgantt
-
and
でつなげることで、複数の定義を1行にまとめることができる
タスク間の制約(前後関係)を設定する
@startgantt
[task1] requires 3 days
[task2] starts at [task1]'s end and requires 2 days
[task3] starts D+2 and requires 4 days
[task4] starts at [task3]'s start and requires 2 days
@endgantt
-
[タスクA] starts at [タスクB]'s end
と指定することで、タスクAの開始をタスクBの終了後にできる -
[タスクA] starts at [タスクB]'s start
と指定することで、タスクAの開始をタスクBの開始と同時にできる
タスクの前後関係を簡易的に記述する
@startgantt
[task1] requires 3 days
then [task2] requires 4 days
[task3] requires 2 days
[task4] requires 3 days
[task3] -> [task4]
@endgantt
-
then
でつなげることによりタスク間の前後関係を簡易的に表現できる - もしくは
->
でつなげることでも表現できる
言語を変更する
@startgantt
language ja
Project starts 2024-01-01
[task1] starts D+0 and requires 10 days
@endgantt
-
language <言語>
で言語を変更できる - 日本語にする場合は
ja
を指定する
タスクに進捗率を設定する
@startgantt
[task1] requires 10 days
[task1] is 40% completed
[task2] requires 10 days and is 70% completed
@endgantt
-
[タスク名] is <進捗率>% completed
と記述することで、タスクの進捗率を設定できる -
and
でつなげることにより1行にまとめることもできる
マイルストーンの定義
@startgantt
Project starts 2024-01-01
[task1] starts 2024-01-03 and requires 6 days
[task2] starts 2024-01-10 and requires 3 days
[milestone1] happens at D+3
[milestone2] happens at 2024-01-05
[milestone3] happens at [task1]'s end
[milestone4] happens at [task2]'s start
[milestone5] happens on 3 days after [task2]'s end
[milestone6] happens on 1 weeks after [task2]'s end
[milestone7] happens on 3 days before [task2]'s start
[milestone8] happens on 1 weeks before [task2]'s start
@endgantt
-
[マイルストーン名] happens at <日付>
でマイルストーンを定義できる - 日付には相対的な日付や絶対的な日付、他のタスクの開始・終了を指定できる
-
on N <days|weeks> <before after> [タスク名]'s <start|end>
とすることで、基準のタスクの開始・終了を基準にして一定時間前後したところにマイルストーンを設定できる
複数のタスクの終了を日付として指定した場合
@startgantt
[task1] requires 3 days and starts D+1
[task2] requires 4 days and starts D+2
[task3] requires 2 days
[milestone1] happens at [task1]'s end
[milestone1] happens at [task2]'s end
[milestone1] happens at [task3]'s end
@endgantt
- マイルストーンの日付として複数のタスクの終了を指定すると、終了日が最も後ろの日付が採用される
日付に背景色を設定する
@startgantt
Project starts 2024-01-01
language ja
saturday is colored in lightblue
sunday is colored in pink
2024-01-01 to 2024-01-03 is colored in pink
2024-01-08 is colored in pink
[task1] requires 20 days
[milestone] happens at D+30
@endgantt
-
<日付> is colored in <色>
と記述することで、特定の日付の背景色を変更できる - 日付には絶対的な日付以外に、
sunday
のような曜日も指定できる - 日付を
to
でつなげることで、期間で指定できる
非稼働日を設定する
@startgantt
Project starts 2024-01-01
language ja
saturday are closed
sunday are closed
2024-01-01 to 2024-01-03 are closed
2024-01-08 is closed
[task1] requires 10 days
@endgantt
-
<日付> <is|are> closed
と記述することで、特定の日付を非稼働日にできる- 非稼働日はタスクの期間から除外される
- 日付には絶対的な日付以外に、
sunday
のような曜日も指定できる - 日付を
to
でつなげることで、期間で指定できる - 曜日を指定した場合、動詞は
are
になる - 絶対的な日付で指定した場合は、
are
でもis
でもどちらでもいい(文法的にしっくり来るほうを選べばいいと思う)
タスクの一時停止
@startgantt
Project starts 2024-01-01
language ja
[task1] requires 10 days
[task1] pauses on 2024-01-05
[task1] pauses on 2024-01-07
[task1] pauses on wednesday
[task2] requires 10 days
@endgantt
-
[タスク名] pauses on <対象日>
と指定することで、指定された日をそのタスクの稼働から除外できる
カレンダーのスケールを変更する
@startgantt
printscale weekly
Project starts 2024-01-01
[task1] requires 30 days
then [task2] requires 30 days
@endgantt
-
printscale <スケール>
と指定することで、カレンダーのスケール(1列の単位)を変更できる
スケール | 意味 |
---|---|
daily |
日(デフォルト) |
weekly |
週 |
monthly |
月 |
quarterly |
四半期 |
yearly |
年 |
ズーム
ズームなし
@startgantt
printscale weekly
Project starts 2024-01-01
[task1] requires 30 days
then [task2] requires 15 days
@endgantt
ズームあり
@startgantt
printscale weekly zoom 2
Project starts 2024-01-01
[task1] requires 30 days
then [task2] requires 15 days
@endgantt
-
printscale
の後ろにzoom N
と指定することで、グラフを拡大できる
横線
@startgantt
[task1] requires 10 days
then [task2] requires 5 days
-- 横線 --
then [task3] requires 3 days
then [task4] requires 6 days
@endgantt
-
-- テキスト --
を記述することで、横線を挿入できる
縦線
@startgantt
[task1] requires 3 days and starts D+3
[milestone] happens at D+10
Separator just at [task1]'s start
Separator just at [task1]'s end
Separator just 2 days before [task1]'s start
Separator just 2 days after [task1]'s end
@endgantt
-
Separator just at [タスク名]'s <start|end>
で、タスクの開始・終了日の縦線を入れられる -
Separator just N <days|weeks> <before|after> [タスク名]'s <start|end>
で、タスクの開始・終了日から指定された前後に縦線を入れられる
注釈
@startgantt
[task1] requires 15 days
note bottom
Task1
end note
[task2] requires 10 days and starts after [task1]'s end
note bottom
Task2
end note
@endgantt
- タスク定義の直後に
note bottom ... end note
と記述することで、そのタスクの下に注釈を追加できる -
bottom
以外は指定できないっぽい
タスクの色を変更する
@startgantt
[task1] requires 10 days
[task1] is colored in pink
[task2] requires 10 days and is colored in lightgreen
@endgantt
-
is colored in <色>
で、タスクの色を変更できる
◆マインドマップ
- マインドマップを書ける
基本
@startmindmap
+ root
++ hoge
+++ foo
+++ bar
++ fuga
-- piyo
--- fizz
--- buzz
@endmindmap
-
+
または-
でノードを定義する -
+
,-
の数でノードの深さを制御できる -
+
は右方向に、-
は左方向にノードが伸びる
Markdown で記述する
@startmindmap
* root
* hoge
* foo
* bar
* fuga
@endmindmap
- Markdown のリストの書き方でも記述できる
- この場合は右方向にしか伸ばせない
-
*
しか使えない(-
はダメ)
複数行
@startmindmap
+ root
**:multi
line;
++ foo
left side
-- fizz
**:multi
line;
@endmindmap
-
:
と;
で囲うことにより、ノードのテキストを複数行で記述できる - このとき、ノードの高さを表す記号にはアスタリスク (
*
) を使用する - 左側に複数行のノードを追加したい場合は、
left side
という1行を挿入する(ここから下が左側のノードとして扱われる) - Markdown 記法だと使えない
複数ルート
@startmindmap
+ root1
++ hoge
++ fuga
+ root2
++ foo
++ bar
@endmindmap
- 複数のルートノードを宣言できる
ノードの色を変更する
@startmindmap
+[#orange] root
++[#FFBBCC] hoge
@endmindmap
- 記号のうしろに
[#色]
と指定することで、そのノードの色を変更できる
@startmindmap
*[#orange] root
*[#FFBBCC] hoge
@endmindmap
- Markdown でも同様に指定できる
スタイルの指定
@startmindmap
<style>
mindmapDiagram {
.orange {
BackgroundColor orange
}
.pink {
BackgroundColor #FFBBCC
}
}
</style>
+ root <<orange>>
++ hoge <<pink>>
**:multi
line <<pink>>;
@endmindmap
-
<style>
でスタイルを定義できる - 各ノードの末尾に
<<クラス名>>
と指定することで、スタイルのクラスを指定できる
箱を消す
@startmindmap
+ root
++ hoge
+++_ foo
+++_ bar
--_ fizz
--_ buzz
@endmindmap
- ノードの記号の最後に
_
をつけることで、箱を消すことができる