Mermaidで矢印をめちゃめちゃ繋ぐと楽しい

ボックスと矢印で関係性を記述したグラフがたいへん簡単に描けるMermaidというツールを使ってみたので紹介します。

構成図が描きたい

ひとつ前の『Nextcloudをロードバランシング』という記事を仲間内で見せたところ、わけわかんねえよ構成図描けよ、と言われたので、気になってたMermaidというグラフマークアップツールを使ってみました。

mermaid-js.github.io

こいつはテキストで内容物をゴジョゴジョっと書くだけでグラフ(ノードとエッジで構成された数学的な意味のグラフ…なんだけど、実はパイチャートとかも描けるらしい)が描けてしまうというツール。トップページにいろいろ載ってる。

mermaidトップページの画像

マークアップに必要な文法の解説もいろいろあるんだけど、オレはとりあえずライブエディタkubernetesのチュートリアルの例を突っ込んで、いろいろいじってカラダで覚えました。

それで出来た図がこれなんだけど:

さっきの記事の図

こいつがこのくらいの記述でできるわけです:

graph LR
client-->thenet[Internet]-->router[<b>FreeBSD</b><br>ルータ兼 <br> ロードバランサ<br>兼Redis<br>Nextcloud予備];
router-->linux[<b>Linux</b><br>Nextcloud]
linux --> windows[<b>Windows</b><br>dbserver]
router .-> windows
subgraph home[家]
router
end
classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000;
classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff;
classDef cluster fill:#fff,stroke:#bbb,stroke-width:2px,color:#326ce5;
class router,linux,windows,ingress,service,pod1,pod2 k8s;
class thenet plain;
class home,cluster cluster;

ここで使った要素は:

  • graph LRで左から右に行く図
  • 文字を書くとそのままノードになる(router[<b>FreeBSD</b><br>ルータ兼 <br> ロードバランサ<br>兼Redis<br>Nextcloud予備]のように名称と表記を分けられる)
  • 矢印で関係性を記述
  • 囲み部分はsubgraph
  • 色付けや装飾はclassDefで書いたものをclass宣言で割当て

という感じ。

気に入ったのが、こいつはグラフ(数学的な)記述ツールなので、エッジ(矢印)を適当に足したり引いたりしてやると、関係性のガラっと変わったグラフが一瞬で描けてしまうこと。

上図にたどり着くまでは紆余曲折あるのでお見せしましょう。まずは最初のバージョン。

最初のバージョン

なんか関係性がヘンです。dbserverはルータじゃなくてNextcloudと通信するでしょ?とかそういうの。それで直したのが次。

ver. 2。もうこんなもんでええやろ

一気にわかりやすくなりました。

これでいいじゃんと思ったんだけど、いらんバージョンアップをしてみる。

構成図を見たがためにわからなくなる例

いやー、Linuxが調子悪かったらFreeBSDからdbserverにアクセスすることもあるんですよ、といいながら足してみたら一挙におかしな感じになりました。

ちょっと矢印の意味が統一されてないよね? アクセスの流れと頻度でやろうかな。ということで整理:

 

まだなんかおかしい

いや、これって単にFreeBSDマシンから見た流れだよね? もうユーザー視点で整理したほうが良くね?  ということで出来たのが完成版:

完成版

頻度を反映したり

頻度を反映しよう

矢印増やしたくない? てことで足したり

あかんやろ

みたいなことが、数行のコピペだけでできてしまうわけです。

これらは以下のように、コードの記述的には「linux --> windows」の行を増やしたり

 linux --> internet
 windows --> client

の2行を足したりしてるだけです。やるなグラフ理論

Mermaidのページに初めてアクセスしてから最初のバージョンを出すまでに30分くらいかかってますが、そのあと最後の図までの足したり引いたりは、全部で20分とかです。グラフ最高!!

Joplinで使えます

もうひとつ大事なことがあります。最後の2枚はOnline Editorじゃなく、Joplinに標準で入ってるインラインプラグインで描いてるんです。

JoplinはEvernote代替を目指してるノートアプリですが、組み込みのMarkdownエディタがたいへん強力で、書いたMDが即座にフォーマットされるライブコーディングエディタになってます。

そしてmermaidに関しても、記述が即座に図に反映されてくれます。つまり、だいたい手元で完結してていじり放題です。

さいきんは50人くらいのクラスで授業とかやってるんで、資料作りが大変だったんですが、こんな感じで定形に流し込むだけで関係性を記述できるグラフが簡単に描ける、しかもその場で…! ほとんど夢のようです。

いやー、便利な世の中になったよね。やり放題ですわ〜。