シーケンス図を活用しよう~Mermaidコード+AI~

【エクセル作業をわかりやすくするのにピッタリなシーケンス図を手軽に作成しちゃおう!】

はじめに
システム設計や業務フローを説明する際、「静的な構造」と「動的な流れ」の両方を伝える必要があります。しかし、これらは本来相反する性質を持ちます。たとえば:

  • 円グラフ:構成比を示す「静」の代表
  • 折れ線グラフ:時間軸に沿った変化を示す「動」の代表

このように、静と動は通常別々に扱われます。しかし、シーケンス図はこの二つを融合できる稀有な表現手段なのです。

*下記はMermaid.jsサイトから引用させて頂きました

エクセルとの相性も抜群

Mermaidコードはコードで図を書けるツールです。中でもシーケンス図は、以下のような特徴を持ちます:

  • **登場人物(ライフライン)**が並ぶことで「構造」を表現
  • **メッセージのやり取り(矢印)**で「動き」を表現
  • 時系列の流れが縦軸に自然に組み込まれる

つまり、Excelのシートが横に並び、関数やVBAがそれらを動かす様子をそのまま図式化できるのです。

加えて、

コードなのでAIとの相性はばっちりです

Mermaidコード自体をAIで生成したり、作成したMermaidコードをAIでプログラミングコードにすることも可能です!

図で作成したいもののイメージを確定しながらプログラミングコードを書けるのはとても便利です

それはどこで使えるか?というと以下のサイトから始めるのが一番手っ取り早いです(他にも方法はあります)

それでは本格的な説明に入っていきます

説明はMearmaid.jsの画面を使っていきます

基本パターン

対象一覧化

下のGIF画像はMermaid.jsの画面です

左上にコードを追加すると横に図形(対象物)が追加されているのが分かると思います

以下が上記の画像内のMermaidコードになります

  • sequenceDiagram
  • Actor ユーザー
  • Participant 操作シート

詳細に解説を行うと「sequenceDiagram」にてシーケンス図を書くと宣言しています

次に「Actor」と「Participant」ですが、まず「Actor」で人形の図形を登場させます

上記の画像には「ユーザー」と出ていますが、「Actor ユーザー」とつなげることで人形の図に名前を付けることができます

次に「Participant」です

こちらもActorと同様にParticipantに名前を付けることで、四角の図形内に名前を挿入することができます

処理

ここからは上記で登場させた対象間での処理を描いていきます

まずは事前に設定した対象物間を「->>」で結びます

その後「:」を記入した後に処理内容を続けます

これで下のような図になります

それでは対象物に「データシート」を追加したうえで処理を追加してみます

すると下の図のように処理内容が追加されていきます

つまり処理内容を下に続けていくと、時系列も同時に表現できることになります

繰返しになりますが、この静と動(時系列)を表現できる点が便利です

(参考:対象の種類)

データベース: participant 販売データ@{ “type” : “database” }

複数: participant @{ “type” : “collections” }

キュー:participant 処理メッセージ@{ “type” : “queue” }

操作・確認画面:participant 操作画面@{ “type” : “boundary” }

(参考:線の種類)

種類コード表示
実線(矢印無)->
点線(矢印無)–>
点線(矢印有)–>>(矢印2つ)—▶
実線(両端)<<->>◀ー▶
点線(両端)<<–>>◀—▶
実線(×印)-xーX
点線(x印)–x–X
実線(鋭い矢印)-)ー➤
点線(鋭い矢印)–)—➤

対象の追加・削除

冒頭で対象を横方向に一覧化する方法を解説しました

実は途中から対象を登場させる方法もあります

この対象の追加・削除により業務の流れやデータの流れをわかりやすくすることができます

新たに対象を追加・削除をするには次のコードを書きます

  • Create Participant 対象名
  • Detroy 対象名

この対象の追加・削除を行う時に注意点が一つあります

例えば、次のコードがあったとします

操作シート->>データシート:条件記入

データシート->>操作シート:計算結果反映

    Create Participant ユーザーフォーム

この時点では作成される図は下のようになっています

特に追加されたような状態にはなっていませんよね

ここは注意点です

下のようにCreate Participantの後に処理を追加してはじめて「対象の追加」の状態になります

  Create Participant ユーザーフォーム

操作シート->>ユーザーフォーム:表示

この状態の図が以下です

Detroyも同様です

  Create Participant ユーザーフォーム
操作シート->>ユーザーフォーム:表示
ユーザーフォーム->>ユーザーフォーム:マスタ選択
  Destroy ユーザーフォーム

この時点での図は以下です

Detroyの後、次のように処理を追加してはじめて対象の削除が明確化します

  Destroy ユーザーフォーム

ユーザーフォーム->>データシート:抽出

対象有効化

対象の役割範囲を時系列で明確化するために有効なのがこの「対象有効化」です

コードは「Active」「DeActive」を使用します

   Activate データシート

操作シート->>データシート:条件記入

データシート->>操作シート:計算結果反映

    DeActivate  データシート

このコードの組み合わせにより以下のように対象が有効になっているのが明確になります

ただし、前述の「Create Participant 対象」と似た現象が起きます

今回はCreateだけでは表面上は何も変わらず、DeActiveとの組み合わせが成立した段階でのみ「変化」が起こります

応用処理

条件分岐処理(Alt)

ここから応用編です

エクセルのIF関数を題材にして、条件分岐処理の書き方を解説します

上の画像では操作シートのB2セルにデータシートのB2セルの値を「100以上」「100未満」にて判定する条件式が入力されています

以下が条件式を入力する前のMermaidコードです

sequenceDiagram

Actor ユーザー

Participant 操作シート

Participant データシート

ユーザー->>操作シート:B2セルに関数を入力

操作シート->>データシート:関数がB2セルの値を取得

データシート->>データシート:関数がB2セルの値を判定

この段階での図は以下です

ここからAlt式を使って条件分岐式を作成します

基本的な構文は以下です

Alt 条件式1

~

Else 条件式2

~
End

この構文に沿って前述のIF式の条件をMermaidコードで表現してみます

Alt B2セルの値が100以上
データシート->>操作シート:操作シートのB2セルに〇を出力
else B2セルの値が100未満
データシート->>操作シート:操作シートのB2セルに×を出力
End

これで図は以下のようになります

並列処理

エクセルに入力した2つの数式の内容をMermaidコードで表現してみましょう

並列処理は以下の構文で表現します

Par 処理1

~

and 処理2

~

End

それでは、上記の構文で前述のエクセルの内容を表現してみましょう(対象の一覧化は省略)
Par B2セルに数式を入力

E2->>B2:E2の2倍を出力

and B3セルに数式を入力

E2->>B3:E2の10倍を出力

End

これで図が以下になります

繰り返し処理

繰り返し処理を表現するにはLoopを使用します

以下のような繰り返しセルの内容を取得・表示するVBAを「Loop」を使用してmermaidコードにしてみましょう!

Loopを使う時の構文は以下です

Loop (繰り返し範囲、または条件)

(繰返し行う処理の内容)
End

今回は繰り返し処理を行う範囲は2行目から最終行までです

ですので「loop i = 2 から myLast まで」と記述します

そして、繰り返し処理を行う内容は取得と表示ですので、そちらをLoopとEndの間に記述します

loop i = 2 から myLast まで

        VBA->>客先マスタ範囲: セル(i, 1)の値を取得

        客先マスタ範囲–>>VBA: myCustomer を返す

        VBA->>ユーザー: MsgBoxで myCustomer を表示

end

以下が全てのMermaidコードの内容です

sequenceDiagram

    actor ユーザー

    participant VBA

    participant 客先マスタ範囲

    ユーザー->>VBA: 実行開始

    VBA->>客先マスタ範囲: シート「客先マスタ」を取得

    VBA->>客先マスタ範囲: 最終行を取得(myLast)

    Note over VBA,客先マスタ範囲: 開始行は2

    loop i = 2 から myLast まで

        VBA->>客先マスタ範囲: セル(i, 1)の値を取得

        客先マスタ範囲–>>VBA: myCustomer を返す

        VBA->>ユーザー: MsgBoxで myCustomer を表示

    end

    VBA–>>ユーザー: 処理完了

これで以下の図ができます

もう一度、Loopのコード部分とLoopの図を対比してみましょう!

繰返し範囲と繰り返し処理内容の違いを意識するとコードを書きやすいです

上の図ででてきた注釈(開始行は2)について、次の章で詳細に後述します

注釈・コメントアウト

注釈

この注釈が使いこなせると、格段にシーケンス図が分かりやすくなります

基本的には「Note Over」を使用します

ただし、範囲や位置の仕方で違いがあります

基本的な構文は以下です

Note Over 対象:注釈

例えば、対象が1つの場合を見てみましょう

VBA->>客先マスタ範囲: 最終行を取得(myLast)

    Note over VBA: 開始行は2

    loop i = 2 から myLast まで

この書き方だと対象/VBAの下にだけ注釈が表示されます

こちらを「,」を使用して複数の対象範囲を指定するようにしてみます

    Note over VBA,客先マスタ範囲: 開始行は2

こうすると対象を複数(VBA、客先マスタ範囲)をまたがって注釈が表示されます

次に注釈の表示位置にの変更方法(Left of、Right of)について触れます

Note Left of VBA: 開始行は2

こうすると対象の左に注釈が表示されます

逆に対象の右に表示したい時には「Right Of」を使用します

グループ化・色付け

対象をグループ化することもできます

このグループ化には以下の構文を使用します

 actor ユーザー

    participant 操作シート

Box rgb(255,0,0) データ管理

    participant データシート

    participant 一時シート

End

    participant 出力シート

Box 色 グループ名~Endでグループ化する対象を指定します

色についてはrgb(赤,緑,青)で指定します

色に透明感を出したいときには青の後に0:最小~1:最大の値を指定します

例えば、以下のように0.1を指定したとします

Box rgb(255,0,0,0.1) データ管理

すると以下の画像のように透明感が出せます

コメントアウト

%%により図には表示されない文書を記述できます

マル秘テクニック

番号付与

Mermaidコードの冒頭で「autonumber」を宣言することで各処理に番号を付与できます

sequenceDiagram

autonumber

Actor ユーザー

Participant 操作シート

以下が図です

この番号付与により処理内容をより明確にすることができます

対象名に略称を付ける

以下のように「as」を使用することで対象名の指定を省略することができます

Actor A as ユーザー

Participant B as 操作シート

Participant C as データシート

こうすると以下のように処理の指定時に略称を使用することができます

A->>B:操作シートのB2セルに関数を入力

B->>C:②で入力した関数がB2セルの値を取得

C->>C:関数がB2セルの値を判定

Alt B2セルの値が100以上

C->>操作シート:操作シートのB2セルに〇を出力

else B2セルの値が100未満

C->>操作シート:操作シートのB2セルに×を出力

End

略称を使用しても対象名はas以下で指定した内容で表示されます

<まとめ>

今回はシーケンス図をmermaidコードで自動作成する方法を解説しました

最初に躓きやすいのが対象と処理の不一致だと思います

sequenceDiagram
 autonumber
actor VBA
participant 操作
participant 転記元セル位置

loop Mapping_Headerの2行目〜最終行まで
VBA->>転記元セル: 3列目から転記元セル位置を取得

end

上記のようなコードの書き方だと、実質的に同じ対象なのに意図しない対象が表示されます

ですので、対象を宣言したら処理内では表現を一致させるようにしましょう

もしくは、前述のasを使用して間違いが起こりにくくしておきましょう!

コメントを残す

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