mermaid.jsのシーケンス図の書き方

mermaid.js使ってますか。

このブログでも何度か紹介させていただいてますが、mermaid.js は JavaScript 製の作図ツールで、テキストベースで図の作成ができるスグレモノです。

WordPressの記事中に直接埋め込めるようにしているのも相まって、ブログ記事内でもたまに使ったりしてます。

以前書いた、mermaid.jsのフローチャートの書き方 が結構読まれているみたいだったので、今回はシーケンス図の書き方も紹介したいと思います。

英語ですが公式ドキュメントもありますのでそちらも合わせて参照ください。

環境

  • macOS Mojave 10.14
  • mermaid.js 7.0.10

環境構築

以前フローチャートの書き方を紹介した時に環境構築の方法を書きましたので、そちらを参照ください。

mermaid.js のシーケンス図の書き方

基本

まずは基本的なコード。mermaid.js公式のサンプルを拝借します。

sequenceDiagram Alice->>John: Hello John, how are you? John-->>Alice: Great!

sequenceDiagram でシーケンス図であることを宣言し、あとはアクタ同士をメッセージでつないでいく感じです。

  • アクタ(上の例の Alice、John) は自動的に認識される(別途宣言しなくてもOK)
  • アクタ同士を繋ぐメッセージの書き方で矢印の表示方法が変わる
  • : 移行でメッセージのテキストを表示

フローチャートの書き方もそうでしたが、非常に書き方がシンプルなので、テキストからも内容が推測しやすい感じになってます。

アクタ

上述の通り、アクタは特に宣言しなくても、コード中に最初に登場した時点で自動で認識されます。

ただし、明示的に宣言することもできます。その場合は participant で最初に宣言します。

sequenceDiagram participant Client participant Server Client->>Server: ping Server-->>Client: pong

これだけだとなんのありがたみも感じませんが、この書き方をすると Alias(別名) が使えるようになります。

Alias は、participantas で使えるようになります。上の例だとこんな感じに。

“アクタ ->> アクタ” の部分が短く書けるようになるので良いかと思います。

また、よくあるシーケンス図の書き方として、”オブジェクト名:クラス名” をアクタとして表示するものがありますが、これも as を使わないと実現できません。

“アクタ –> オブジェクト名:クラス名” という書き方をしようとすると、”:” 部分を mermaid.js の方で正しく解釈できないためです。(”:”以降がメッセージのテキストとして扱われてしまう)

メッセージ

アクタ同士を繋ぐメッセージの書き方で、グラフ中の表示方法を変えることができます。

6パターンしかないので全パターン書きます。

sequenceDiagram A ->> B: 実線矢印 B -->> A: 破線矢印 A -> B: 矢印なし実線 B --> A: 矢印なし破線 A -x B: バツ付き実線 B --x A: バツ付き破線

  • ハイフン(-) 1つで実線、2つで破線。
  • >> で矢印、> で矢印なし、x でバツ付きの矢印

x のバツ付き矢印何に使うんだろうと思って調べてみたら、mermaid.js開発者の方が非同期呼び出し用に使うみたいなことを GitHubのissue で答えておりました。

一般的なのかな・・・。矢印の形状で同期/非同期を切り替えるものと思っていたので、ちょっと不思議な感じがします。

また、: からはメッセージに表示するテキストの内容ですが、これは省略することができないみたいです。

アクティビティ

実行仕様とも言うそうですが、とにかく処理が実行中であることを示すために使います。

sequenceDiagram A ->>+ B: 活性化 B -->>- A: 非活性化 A ->>+ B: 活性化 B ->>+ B: さらに別の処理を呼び出し B -->>- B: 別の処理終わり B -->>- A: 非活性化

  • メッセージに + をつけると活性化、- をつけると非活性化
  • 多段に活性化することもできる

+- はペアになってないと正しく表示されないみたいです。

ループ

シーケンス図中で繰り返し処理を行う箇所にはループの表現を使います。

sequenceDiagram loop 繰り返し条件 A ->> B: 繰り返し処理 end

loop 条件 繰り返し処理 end という感じの構文ですね。

選択

どれか一つの処理のみが実行される場合に使います

sequenceDiagram alt 晴れの場合 親 ->> 子: 水筒をわたす else 雨の場合 親 ->> 子: 傘をわたす end

alt 条件で最初の条件を、else 条件で以降の条件を記載するという構文のようです。

オプション

実行されない可能性がある処理を記述する時に使います。

sequenceDiagram opt 空腹なら 客 ->> 店: デザートを注文 end

opt 条件 処理 end という感じの構文ですね。

注釈

シーケンス図上に注釈(コメント)を記述することができます。

sequenceDiagram A ->> B: 実線矢印 Note left of A: 左側に注釈 Note right of B: 右側に注釈 Note over A, B: 2つのアクタの上に注釈 B ->> C: 実線矢印 Note over A, C: 3つ以上のアクタでも可

  • Note で注釈であることを宣言し、その後の left of, right of, over で表示場所を指定
  • over では3つ以上のアクタにまたがる注釈をつけることも可
  • 注釈中に <br> で改行できる

さいごに

mermaid.js は手軽にかけて、表示も結構きれいなのでお気に入りです。

WordPress上でも書けるように環境構築したので、ブログでもさくっと使えます。
(今回の記事も全て直接ブログ上にmermaid.jsのコードを書いていて、画像を一つも使ってません。すごくない?)

ただ、本格的な UML を書こうとすると mermaid.jsのシーケンス図だと少し物足りないかなと思うこともありますね。

そういうときは PlantUML を使うことが多いです。

このあたりは使い分ければ良いかなと思います。

いずれにしても、テキストベースの環境はやはり良いです。手に馴染みます。


最後まで読んでいただきありがとうございます。 このブログを「いいな」と感じていただけましたら、Twiter にてフォローいただけるとうれしいです。ブログ更新情報などもお届けします。



この記事をシェアする




りゅーた
フリーランスのエンジニアしてます。Android、iOS アプリの開発、対向サーバの開発、C/C++のライブラリ開発が現在のメイン。趣味はテニス。3児の父。 もっと詳しく

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA