LoginSignup
1
2

続・PlantUML使い方メモ

Posted at

PlantUML使い方メモ #Java - Qiita の続き。
クラス図やシーケンス図以外の図の書き方について、気になったやつのメモ。

◆EBNF図

Extended Backus–Naur Form diagram

  • プログラミング言語の構文を説明するときとかに用いられる図
  • EBNF 自体の説明は EBNF - Wikipedia とかを参照

EBNF の基本

hoge = "a" | "b" | fuga;
fuga = "1" | "2";
  • EBNF は、プログラムの構文を生成規則を列挙することによって表現する
  • 上の例は、 hogefuga の2つの生成規則を定義している
  • 生成規則 hoge は、文字 a, 文字 b または別の生成規則 fuga のいずれかであることを示している
  • 生成規則 fuga は、文字 1 または 文字 2 のいずれかであることを示している

終端記号と非終端記号

  • プログラムの構文は、最終的には全て終端記号で構成されるものと考えることができる
    • 終端記号とは、 a1, * などの具体的な文字や数字、記号などを指す
  • 一方で、上の例の hogefuga などのように、他の終端記号や生成規則に分解可能なものは非終端記号と呼ぶ
    • 逆に言うと、具体的な文字はそれ以上分解できないから終端記号と呼べる
  • 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 を使わずに、 startsends だけで定義することもできる

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
  • ノードの記号の最後に _ をつけることで、箱を消すことができる

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2