楽にきれいにフローチャートを描く方法を探してたらmermaidに行きついたので、mermaidを使ってフローチャートを描く方法をまとめておきます。
公式docsはこちらです。
https://mermaid.js.org/intro/
こちらのエディタを使うとブラウザ上でサクサクmermaidが書けます。
https://mermaid.live/edit
こんな感じで左側がエディタ、右側がプレビューで書いたdiagramをリアルタイムで確認しながら使えます。即書きたい派の人はこれがいいかも。
Sample Diagramsから色んな図のテンプレを挿入することができます
Actionsから画像ファイルにエクスポートしたりも
VSCodeでmermaidを使う場合は、こちらの拡張機能を入れるとよいらしい
https://marketplace.visualstudio.com/items?itemName=bpruitt-goddard.mermaid-markdown-syntax-highlighting
mermaid記法をハイライトで表示してくれて書きやすくなります
https://marketplace.visualstudio.com/items?itemName=bierner.markdown-mermaid
こちらはVSCodeでmermaidで書いた図をプレビューで見せてくれます。
拡張機能を入れた後、
Select Language ModeでMarkdownを選択
Editorで
```mermaid
````
もしくは
:::mermaid
:::
を書いて図を書いていく
矢印の所を選択すると、
mermaidで書いた図をこんな感じでPreviewを表示してくれます
記法はこちらにあります。フローチャートの他にもシークエンス図やクラス図も書けるようです。
https://mermaid.js.org/syntax/flowchart.html
フローチャートを書く場合、
flowchart, graphが使えます。
以降はgraphで書いていきます。
graph TB(top to bottom)でもTDと同じように上→下のチャートが作れる
(分ける意味は、、、?)
下から上(BT)
あんまり使わないだろうけど、graph BT(bottom to top)で下から上
右から左(RL)
graph RL(right to left)で右から左向き
左から右(LR)
graph LR(left to right)
こういうフローをmermaidで書いてみます
A(Start Process)-->B[Check contents]
(処理の名称)
でRounded Squareの図を、
[処理の名称]
でSquareを挿入できます。
処理Aと処理Bの間を結ぶ矢印は-->で繋ぎます。
矢印を伸ばしたい時は---->というように-を増やすと矢印が伸びて、
==>
と書くと、矢印の線が太くなります。
B-->C{Check result is}C-->|OK| D[Register Data]D-->|NG| E[Return Error Message]
{条件文}
でif-elseの条件判定を挿入できます。
条件分岐は
[条件判定処理] -->|TRUE| [TRUE後の処理]
[条件判定処理] -->|NG| [NG後の処理]
みたいな感じで書きます。
D-.->|Reference| F[(Data Table)]
おなじみデータエンティティの図は
[(DataTable)]
点線の矢印は
-.->
矢印の途中にテキストを入れる時は、
-.->|矢印の途中のテキスト|
みたいな感じで書きます。
点線の矢印を伸ばす場合は、
-...->
という風に.の数を増やすと矢印が伸びます。
最初の図のフローチャートを最後まで書くとこんな感じになりました。
graph TD A(Start Process)-->B[Check Contents] B-->C{Check result is} C-->|OK| D[Register data] C-->|NG| E[Return error message] D-.->|Reference| F[(Data Table)] D--->G(End)
A[/This is the text in the box/]
A{{This is the text in the box}}
nodeの色を変える場合、下記のように色を変えたいclassに対してstyleを指定します。
下記の例ではClass A(Start Process)をピンク色にしてます。
A(Start Process) -->B(Check Process)style A fill:#ff69b4
複数のnodeの色を変える場合、下記のようにclassDefを使ってCssClassを定義して、nodeのclassに対してCssClassを設定します。
A(Start Process) -->B(Check Process)classDef className fill :#ff69b4;class A,B className
styleの付与については、公式docsではこの辺りに書かれています。
https://mermaid.js.org/syntax/flowchart.html#styling-and-classes
例えば、下記のようにnode内の文字列の中で()を使用したい場合、
文字列を""で囲むことでエスケープできます。
Table1[("Data Table A (See 'Table docs' for table definition)")]
改行したい場合、改行したい場所で<br>
を入れると改行できます。
Table1[("Data Table A <br> (See 'Table docs' for table definition)")]
flowchartの中でこんな感じで複数のnodeをひとまとめにする場合はsubgrapgh
を使います。
subgraph Tables Table1[(Table1)] Table2[(Table1)] Table3[(Table1)]end
以下の形式で書きます。
subgraph 任意のグラフ名まとめたいNode達end
invisible linkを使うと、Node同士を並べることができます。
先程subgraphで作ったテーブル達は横並びになっていますが、これをinvisible linkでこのように~~~
で繋ぐと、
subgraph TablesTable1[(Table1)] ~~~ Table2[(Table1)] ~~~ Table3[(Table1)]end
縦並びになります。元々フローチャート作成時にgraph TD
で設定した縦向きに並びます。
線ではつなげたくないけどNode同士を並べたい時に使えます。
公式のLive editorでflowchartを作成した場合、PNGやSVGとしてDLできます。
私のおすすめは、左から3番目のボタンでPNGファイルをブラウザ上で開いて
※flowchartがめちゃくちゃ長いときは画像クリックで拡大表示
DevToolでbackgroundcolorを解除
Ctrl+Shift+P でコマンドが入力できるようになるので、ここでCapture full size screenshot
を実行
そうすると結構見やすい大きさのPNGファイルがDLできます。
※めちゃくちゃ長いflowcchartだと、live editorから直でDLするPNGファイルだと微妙に小さかったりして見にくい
Azure DevOpsのWikiでもここからmermaidの挿入ができます。
WikiのMarkdownと合わせるとそこそこ綺麗なドキュメントが作れそうですね。
Azure DevOpsのWikiではこの書き方はできない
```mermaid
````
こっちの方を使って下さい
::: mermaid
:::
flowchartが使えないので、フローチャートを描きたいときはgraphを使う
プレビューの所がこんな表示になりますが、
Load Diagramをクリックするとちゃんと図がレンダリングされます。
バッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。