コンテンツへスキップ

フローチャート - 基本構文

フローチャートは、**ノード**(幾何学的形状)と**エッジ**(矢印または線)で構成されています。Mermaidコードは、ノードとエッジの作成方法を定義し、さまざまな矢印の種類、多方向矢印、およびサブグラフとの任意のリンクに対応します。

警告

フローチャートのノードで「end」という単語を使用する場合は、単語全体または文字のいずれかを大文字にする(例:「End」または「END」)、またはこの回避策を適用してください。「end」をすべて小文字で入力すると、フローチャートが壊れます。

警告

接続するフローチャートノードの先頭文字に「o」または「x」を使用する場合は、文字の前にスペースを追加するか、文字を大文字にします(例:「dev--- ops」、「dev---Ops」)。

「A---oB」と入力すると、円形エッジが作成されます。

「A---xB」と入力すると、クロスエッジが作成されます。

ノード(デフォルト)

情報

IDはボックスに表示されるものです。

ヒント

flowchartの代わりにgraphを使用することもできます。

テキストを含むノード

ボックス内のテキストをIDとは異なるものにすることも可能です。これを複数回行う場合、ノードに使用されるのは最後に検出されたテキストです。また、後でノードのエッジを定義する場合は、テキスト定義を省略できます。レンダリング時にボックスに使用されるのは、以前に定義されたテキストです。

Unicodeテキスト

Unicodeテキストを囲むには"を使用します。

Markdown書式

Markdownテキストを囲むには、二重引用符とバッククォート「` text `」を使用します。

方向

このステートメントは、フローチャートの方向を宣言します。

これは、フローチャートが上から下に向いていることを宣言します(TDまたはTB)。

これは、フローチャートが左から右に向いていることを宣言します(LR)。

可能なフローチャートの方向は次のとおりです。

  • TB - 上から下
  • TD - 上から下(TBと同じ)
  • BT - 下から上
  • RL - 右から左
  • LR - 左から右

ノードの形状

丸みを帯びたエッジを持つノード

スタジアム型のノード

サブルーチン形状のノード

円柱形状のノード

円形のノード

非対称形状のノード

現在、上記の形状のみが可能であり、鏡像は不可能です。今後のリリースで変更される可能性があります。

ノード(菱形)

六角形のノード

平行四辺形

平行四辺形(代替)

台形

台形(代替)

二重円

Mermaidフローチャートの拡張ノード形状(v11.3.0以降)

Mermaidは、フローチャート作成の柔軟性と精度を向上させるために、30個の新しい形状を導入しました。これらの新しい形状は、プロセス、決定、イベント、データストレージなどを視覚的に表現するためのより多くのオプションを提供し、フローチャートの明確さと意味論的な意味を向上させます。

形状定義の新しい構文

Mermaidは、増加する数の形状に対応するために、形状の種類を定義するための一般的な構文をサポートするようになりました。この構文により、明確で柔軟なフォーマットを使用して、ノードに特定の形状を割り当てることができます。

A@{ shape: rect }

この構文は、ノードAを長方形として作成します。これは、A["A"]またはAと同じようにレンダリングされます。

新しい形状の完全なリスト

以下は、新しく導入された形状とその対応する意味論的な意味、短い名前、およびエイリアスの包括的なリストです。

意味的な名前形状名短い名前説明サポートされるエイリアス
カードノッチ付き長方形notch-rectカードを表しますcardnotched-rectangle
照合砂時計hourglass照合操作を表しますcollatehourglass
通信リンク稲妻bolt通信リンクcom-linklightning-bolt
コメント波括弧braceコメントを追加しますbrace-lcomment
右側のコメント波括弧brace-rコメントを追加します
両側に波括弧のあるコメント波括弧bracesコメントを追加します
データ入力/出力右に傾いた長方形lean-r入力または出力を表しますin-outlean-right
データ入力/出力左に傾いた長方形lean-l出力または入力を表しますlean-leftout-in
データベース円柱cylデータベースストレージcylinderdatabasedb
決定ひし形diam意思決定ステップdecisiondiamondquestion
遅延半円形長方形delay遅延を表しますhalf-rounded-rectangle
直接アクセスストレージ水平円柱h-cyl直接アクセスストレージdashorizontal-cylinder
ディスクストレージライン付き円柱lin-cylディスクストレージdisklined-cylinder
ディスプレイ湾曲した台形curv-trapディスプレイを表しますcurved-trapezoiddisplay
分割プロセス分割長方形div-rect分割プロセス形状div-procdivided-processdivided-rectangle
ドキュメントドキュメントdocドキュメントを表しますdocdocument
イベント丸みのある長方形roundedイベントを表しますイベント
抽出三角形tri(三角形略記)抽出プロセスextracttriangle
フォーク/ジョイン塗りつぶされた長方形fork(フォーク略記)プロセスフローにおけるフォークまたはジョインjoin(ジョイン略記)
内部ストレージウィンドウペインwin-pane(ウィンドウペイン略記)内部記憶域internal-storagewindow-pane
ジャンクション塗りつぶされた円f-circ(塗りつぶされた円略記)ジャンクションポイントfilled-circlejunction
ライン付きドキュメントライン付きドキュメントlin-doc(ライン付きドキュメント略記)線のあるドキュメントlined-document
線/影付きプロセス線付き長方形lin-rect(線付き長方形略記)線付きプロセスシェイプlin-proclined-processlined-rectangleshaded-process
ループ制限台形五角形notch-pent(台形五角形略記)ループ制限ステップloop-limitnotched-pentagon
手動ファイル反転三角形flip-tri(反転三角形略記)手動ファイル操作flipped-trianglemanual-file
手動入力傾斜長方形sl-rect(傾斜長方形略記)手動入力ステップmanual-inputsloped-rectangle
手動操作台形上底trap-t(台形上底略記)手動タスクを表すinv-trapezoidmanualtrapezoid-top
複数ドキュメント積み重ねられたドキュメントdocs(ドキュメント略記)複数のドキュメントdocumentsst-docstacked-document
複数プロセス積み重ねられた長方形st-rect(積み重ねられた長方形略記)複数のプロセスprocessesprocsstacked-rectangle
奇数奇数odd(奇数略記)奇数形状
紙テープflag(旗略記)ペーパーテープpaper-tape
条件の準備六角形hex(六角形略記)準備または条件ステップhexagonprepare
優先アクション台形下底trap-b(台形下底略記)優先度の高いアクションprioritytrapezoidtrapezoid-bottom
プロセス長方形rect(長方形略記)標準的なプロセスシェイプprocprocessrectangle
開始circle(円略記)開始点circ(円略記)
開始小さい円sm-circ(小さい円略記)小さな開始点small-circlestart
停止二重円dbl-circ(二重円略記)停止点を表すdouble-circle
停止枠付き円fr-circ(枠付き円略記)停止点framed-circlestop
保存されたデータ蝶ネクタイ型長方形bow-rect(蝶ネクタイ型長方形略記)保存されたデータbow-tie-rectanglestored-data
サブプロセス枠付き長方形fr-rect(枠付き長方形略記)サブプロセスframed-rectanglesubprocsubprocesssubroutine
サマリー交差した円cross-circ(交差した円略記)サマリーcrossed-circlesummary
タグ付きドキュメントタグ付きドキュメントtag-doc(タグ付きドキュメント略記)タグ付けされたドキュメントtag-doctagged-document
タグ付きプロセスタグ付き長方形tag-rect(タグ付き長方形略記)タグ付けされたプロセスtag-proctagged-processtagged-rectangle
終端点スタジアムstadium(スタジアム略記)終端点pillterminal
テキストブロックテキストブロックtext(テキスト略記)テキストブロック

新しいシェイプを使用したフローチャートの例

新しく導入されたシェイプの一部を使用したフローチャートの例を以下に示します。

プロセス

イベント

終端点(スタジアム)

サブプロセス

データベース(円柱)

開始(円)

奇数

判定(菱形)

条件の準備(六角形)

データ入力/出力(右に傾斜)

データ入力/出力(左に傾斜)

優先アクション(台形下底)

手動操作(台形上底)

停止(二重円)

テキストブロック

カード(切り欠きのある長方形)

線/影付きプロセス

開始(小さい円)

停止(枠付き円)

フォーク/ジョイン(長い長方形)

整理(砂時計)

コメント(中括弧)

右側のコメント(右側のねじれた中括弧)

両側に中括弧のあるコメント

ドキュメント

遅延(半円形の長方形)

直接アクセス記憶装置(水平円柱)

ディスク記憶装置(線付き円柱)

表示(湾曲台形)

分割プロセス(分割長方形)

抽出(小さい三角形)

内部ストレージ(ウィンドウペイン)

ジャンクション(塗りつぶされた円)

ライン付きドキュメント

ループ制限(切り欠きのある五角形)

手動ファイル(反転三角形)

手動入力(傾斜長方形)

複数ドキュメント(積み重ねられたドキュメント)

複数プロセス(積み重ねられた長方形)

紙テープ(旗)

保存されたデータ(蝶ネクタイ型長方形)

サマリー(交差した円)

タグ付きドキュメント

タグ付きプロセス(タグ付き長方形)

Mermaidフローチャート(v11.3.0以降)の特殊なシェイプ

Mermaidでは、フローチャートを強化するための2つの特殊なシェイプ、**アイコン**と**画像**も導入されています。これらのシェイプを使用すると、アイコンと画像をフローチャートに直接含めることができ、より視覚的なコンテキストと明確性を提供します。

アイコンシェイプ

iconシェイプを使用して、フローチャートにアイコンを含めることができます。アイコンを使用するには、最初にアイコンパックを登録する必要があります。こちらに記載されている手順に従ってください。アイコンシェイプを定義するための構文は次のとおりです。

パラメータ

  • icon:登録されたアイコンパックからのアイコンの名前。
  • form:アイコンの背景シェイプを指定します。定義されていない場合、アイコンには背景がありません。オプションには以下が含まれます。
    • 正方形
    • circle(円略記)
    • rounded
  • label:アイコンに関連付けられたテキストラベル。任意の文字列を使用できます。定義されていない場合、ラベルは表示されません。
  • pos:ラベルの位置。定義されていない場合、ラベルはアイコンの下部にデフォルト設定されます。使用可能な値は次のとおりです。
  • h:アイコンの高さ。定義されていない場合、最小値である48にデフォルト設定されます。

画像シェイプ

imageシェイプを使用して、フローチャートに画像を含めることができます。画像シェイプを定義するための構文は次のとおりです。

パラメータ

  • img:表示する画像のURL。
  • label:画像に関連付けられたテキストラベル。任意の文字列を使用できます。定義されていない場合、ラベルは表示されません。
  • pos:ラベルの位置。定義されていない場合、ラベルは画像の下部にデフォルト設定されます。使用可能な値は次のとおりです。
  • w:画像の幅。定義されていない場合、画像の自然な幅にデフォルト設定されます。
  • h:画像の高さ。定義されていない場合、画像の自然な高さにデフォルト設定されます。
  • constraint:画像がノードのサイズを制約するかどうかを決定します。この設定により、画像の元の縦横比が維持され、幅(w)に合わせて高さが(h)調整されます。定義されていない場合、offにデフォルト設定されます。使用可能な値は次のとおりです。
    • オン
    • オフ

これらの新しいシェイプは、フローチャートに柔軟性と視覚的な魅力を追加し、より有益で魅力的なものにします。

ノードはリンク/エッジで接続できます。異なる種類のリンクを持つことや、テキスト文字列をリンクに添付することも可能です。

または

または

ノードのデフォルトの位置を変更したい場合などに、これは便利なツールになることがあります。

下記のように、同じ行に複数のリンクを宣言することができます。

下記のように、同じ行に複数のノードリンクを宣言することも可能です。

これにより、非常に表現力豊かな方法で依存関係を記述できます。下記の1行の例をご覧ください。

基本的な構文を使用して同じ図を記述すると、4行になります。警告として、やり過ぎると、マークダウン形式でフローチャートが読みづらくなる可能性があります。スウェーデンの言葉「lagom」が思い浮かびます。それは、多すぎず少なすぎないという意味です。これは、表現力豊かな構文にも当てはまります。

新しい矢印の種類

サポートされている新しい種類の矢印があります。

  • 円形エッジ
  • 交差エッジ

円形エッジの例

交差エッジの例

多方向矢印

多方向矢印を使用できます。

フローチャート内の各ノードは、最終的にレンダリングされたグラフ内でランク(つまり、フローチャートの向きに応じて垂直または水平レベル)に割り当てられます。これは、リンクされているノードに基づきます。デフォルトでは、リンクは任意の数のランクにまたがることができますが、リンク定義に追加のダッシュを追加することで、他のリンクよりも長くすることができます。

次の例では、ノード *B* からノード *E* へのリンクに2つの追加ダッシュが追加されているため、通常のリンクよりも2つのランク多くにまたがっています。

**注記** レンダリングエンジンによって、他の要求に対応するために、リンクが要求されたランク数よりも長くされる可能性があります。

リンクラベルがリンクの中央に記述されている場合、追加のダッシュはリンクの右側に追加する必要があります。次の例は前の例と同じです。

点線または太いリンクの場合、追加する文字は等号またはドットです。次の表にまとめられています。

長さ123
標準------------
矢印付き標準-->--->---->
太い============
矢印付き太い==>===>====>
点線-.--..--...-
矢印付き点線-.->-..->-...->

構文を壊す特殊文字

下記の例のように、より問題のある文字をレンダリングするために、引用符で囲んでテキストを記述できます。

文字をエスケープするエンティティコード

ここで例示されている構文を使用して、文字をエスケープできます。

数値は10進数なので、##35;としてエンコードできます。HTML文字名を使用することもサポートされています。

サブグラフ

subgraph title
    graph definition
end

下記に例を示します。

サブグラフに明示的なIDを設定することもできます。

フローチャート

graphtypeがflowchartの場合、下記のフローチャートのように、サブグラフとの間でエッジを設定することもできます。

サブグラフの方向

graphtypeがflowchartsの場合、この例のようにdirectionステートメントを使用して、サブグラフがレンダリングされる方向を設定できます。

制限

サブグラフのノードが外部にリンクされている場合、サブグラフの方向は無視されます。代わりに、サブグラフは親グラフの方向を継承します。

マークダウン文字列

「マークダウン文字列」機能は、太字や斜体などのテキスト書式設定オプションをサポートし、ラベル内のテキストを自動的に折り返す、より多様な文字列タイプを提供することで、フローチャートとマインドマップを強化します。

書式設定

  • 太字にするには、テキストの前後に二重アスタリスク(**)を使用します。
  • 斜体にするには、テキストの前後に単一アスタリスク(*)を使用します。
  • 従来の文字列では、ノード内のテキストを折り返すために<br>タグを追加する必要がありました。しかし、マークダウン文字列は、テキストが長すぎると自動的にテキストを折り返し、<br>タグの代わりに改行文字を使用するだけで改行を開始できます。

この機能は、ノードラベル、エッジラベル、サブグラフラベルに適用できます。

自動折り返しは無効にできます。

---
config:
  markdownAutoWrap: false
---
graph LR

インタラクション

ノードにクリックイベントをバインドできます。クリックは、JavaScriptコールバック、または新しいブラウザタブで開かれるリンクのいずれかになります。

情報

この機能は、securityLevel='strict'を使用している場合は無効になり、securityLevel='loose'を使用している場合は有効になります。

click nodeId callback
click nodeId call callback()
  • nodeIdはノードのIDです。
  • callbackは、グラフを表示するページで定義されたJavaScript関数の名前です。この関数は、nodeIdをパラメーターとして呼び出されます。

ツールチップの使用例を以下に示します。

html
<script>
  window.callback = function () {
    alert('A callback was triggered');
  };
</script>

ツールチップテキストは二重引用符で囲まれています。ツールチップのスタイルはクラス.mermaidTooltipで設定されます。

**成功** ツールチップ機能とURLへのリンク機能は、バージョン0.5.2から利用可能です。

?> DocsifyがJavaScriptコールバック関数を処理する方法の制限により、上記のコードの代替動作デモはこのjsfiddleで確認できます。

リンクはデフォルトで同じブラウザタブ/ウィンドウで開きます。クリック定義にリンクターゲットを追加することで、これを変更できます(_self_blank_parent_topがサポートされています)。

初心者向けヒント—HTMLコンテキストでインタラクティブリンクを使用する完全な例

html
<body>
  <pre class="mermaid">
    flowchart LR
        A-->B
        B-->C
        C-->D
        click A callback "Tooltip"
        click B "https://www.github.com" "This is a link"
        click C call callback() "Tooltip"
        click D href "https://www.github.com" "This is a link"
  </pre>

  <script>
    window.callback = function () {
      alert('A callback was triggered');
    };
    const config = {
      startOnLoad: true,
      flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'cardinal' },
      securityLevel: 'loose',
    };
    mermaid.initialize(config);
  </script>
</body>

コメント

フローチャート内にコメントを入力できます。パーサーによって無視されます。コメントはそれぞれ別の行に記述する必要があり、%%(二重パーセント記号)を先頭に付ける必要があります。コメントの開始から次の改行までのテキストは、フロー構文を含めてすべてコメントとして扱われます。

スタイルとクラス

リンクのスタイルを設定できます。たとえば、フローで逆方向に進んでいるリンクのスタイルを設定したい場合があります。リンクにはノードと同じようにIDがないため、リンクにどのスタイルを適用するかを決定する別の方法が必要です。IDの代わりに、グラフでリンクが定義された順序番号を使用するか、すべてリンクに適用するデフォルトを使用します。次の例では、linkStyleステートメントで定義されたスタイルは、グラフ内の4番目のリンクに属します。

linkStyle 3 stroke:#ff3,stroke-width:4px,color:red;

コンマでリンク番号を区切ることで、1つのステートメントで複数のリンクにスタイルを追加することもできます。

linkStyle 1,2,7 color:blue;

ラインカーブのスタイル設定

デフォルトの方法がニーズを満たさない場合は、アイテム間の線のカーブの種類のスタイルを設定できます。使用可能なカーブスタイルには、basisbumpXbumpYcardinalcatmullRomlinearmonotoneXmonotoneYnaturalstepstepAfterstepBeforeなどがあります。

この例では、左右のグラフでstepBeforeカーブスタイルを使用しています。

%%{ init: { 'flowchart': { 'curve': 'stepBefore' } } }%%
graph LR

カスタムカーブの説明を含む、使用可能なカーブの完全なリストについては、Shapesのドキュメントを参照してください。d3-shapeプロジェクト。

ノードのスタイル設定

より太い境界線や異なる背景色などの特定のスタイルをノードに適用できます。

クラス

毎回スタイルを定義するよりも便利なのは、スタイルのクラスを定義し、異なる外観を持つ必要があるノードにこのクラスを添付することです。

クラス定義は、下記の例のようになります。

    classDef className fill:#f9f,stroke:#333,stroke-width:4px;

また、1つのステートメントで複数のクラスにスタイルを定義することもできます。

    classDef firstClassName,secondClassName font-size:12pt;

ノードへのクラスの添付は、下記のように行います。

    class nodeId1 className;

1つのステートメントで複数のノードのリストにクラスを添付することもできます。

    class nodeId1,nodeId2 className;

クラスを追加するより短い方法は、下記のように:::演算子を使用してノードにクラス名を添付することです。

この形式は、ノード間の複数のリンクを宣言する場合に使用できます。

CSSクラス

下記の例のように、グラフ定義から適用できるCSSスタイルでクラスを事前に定義することもできます。

スタイル例

html
<style>
  .cssClass > rect {
    fill: #ff0000;
    stroke: #ffff00;
    stroke-width: 4px;
  }
</style>

定義例

デフォルトクラス

クラス名がdefaultの場合、特定のクラス定義のないすべてのクラスに割り当てられます。

    classDef default fill:#f9f,stroke:#333,stroke-width:4px;

Fontawesomeの基本サポート

Fontawesomeからアイコンを追加できます。

アイコンには、fa:#アイコンクラス名#構文でアクセスします。

Mermaidは、CSSがウェブサイトに含まれている場合、Font Awesomeをサポートします。Mermaidは、使用できるFont Awesomeのバージョンに制限はありません。

ウェブサイトへの追加方法については、公式Font Awesomeドキュメントを参照してください。

<head>にこのスニペットを追加すると、Font Awesome v6.5.1がサポートされます。

html
<link
  href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
  rel="stylesheet"
/>

カスタムアイコン

ウェブサイトが対応するキットをインポートしている限り、Font Awesomeから提供されるカスタムアイコンを使用できます。

これは現在、Font Awesomeの有料機能であることに注意してください。

カスタムアイコンには、fakプレフィックスを使用する必要があります。

flowchart TD
    B[fa:fa-twitter] %% standard icon
    B-->E(fak:fa-custom-icon-name) %% custom icon

そして、レンダリングを試みます。

  • グラフ宣言では、ステートメントはセミコロンで終わる必要もなくなりました。0.2.16以降のリリースでは、グラフステートメントをセミコロンで終わらせるのはオプションです。そのため、下記のグラフ宣言は、古いグラフ宣言と同様に有効です。

  • 頂点とリンクの間に1つのスペースを許可します。ただし、頂点とそのテキスト、およびリンクとそのテキストの間にスペースがあってはいけません。古いグラフ宣言の構文も機能するため、この新しい機能はオプションであり、可読性を向上させるために導入されました。

グラフエッジの新しい宣言を以下に示します。これは、古いグラフエッジの宣言と同様に有効です。

設定

レンダラー

ダイアグラムのレイアウトはレンダラーによって行われます。デフォルトのレンダラーはdagreです。

Mermaidバージョン9.4以降では、elkという別のレンダラーを使用できます。elkレンダラーは、より大きく複雑なダイアグラムに適しています。

elkレンダラーは実験的な機能です。このディレクティブを追加することで、レンダラーをelkに変更できます。

%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%

情報

この機能が動作するには、サイトでMermaidバージョン9.4以降を使用し、遅延読み込みの設定でこの機能を有効にする必要があることに注意してください。

レンダリングされたフローチャートの幅を調整できます。

これは、mermaid.flowchartConfigを定義するか、CLIを使用して設定を含むJSONファイルを使用することによって行われます。CLIの使用方法については、mermaidCLIページに記載されています。mermaid.flowchartConfigは、設定パラメータを含むJSON文字列、または対応するオブジェクトに設定できます。

javascript
mermaid.flowchartConfig = {
    width: 100%
}