1. マーメイド記法とは何か?
1.1 概要
Mermaid (マーメイド) は、テキストベースの記法により フローチャート、シーケンス図、ガントチャート、クラス図、ER 図(エンティティ関係図)、状態遷移図、ユーザージャーニーマップ など、さまざまな ダイアグラム(図) を 簡単かつ可読性の高い 形で作成できるオープンソースのライブラリです。
マークダウンに直接埋め込むことができ、GitHub などのプラットフォームでも一部サポートが進んでいます。UML 図作成にも重宝されるほどの柔軟性と可読性が特徴で、ソフトウェア開発のドキュメントや要件定義、システム構成図など幅広い領域で活用されています。
1.2 誕生の背景
もともと、GitHub Flavored Markdown (GFM) などで流れ図やシーケンス図を描くには、ASCIIアートや外部ツールの画像を貼り付けるなど不便が多々ありました。
しかし、テキストベースで図を管理できると、バージョン管理がしやすく、修正履歴も追いやすい。そこで登場したのが Mermaid です。
Mermaid は図を「テキスト」そのものとして書くことにより、差分管理・コラボレーションが容易になります。
1.3 Mermaid の代表的なメリット
- バージョン管理に優れている
- テキストとしてGitリポジトリで管理できる。
- 差分も容易に確認可能。
- 学習コストが低い
- 記述は直感的な英語ベースのシンプルな構文。
- 言語的にも自然なので覚えやすい。
- 様々な形式のダイアグラムをサポート
- フローチャート、シーケンス図、ガントチャート、ER 図など、幅広く対応。
- 特定の UML 記法に限らず柔軟に利用できる。
- 様々な場所でレンダリング可能
- Web ブラウザ、VSCode 拡張機能、GitLab / GitHub Pages / Notion / Confluence などで利用可能。
- 独自にローカルで CLI ツールを使ってレンダリングすることも可能。
2. Mermaid の基本書式
Mermaid のコードは主に、下記のような 「3 つのバッククォート + mermaid」 で始まり、その後にダイアグラムの種類やオプションが続きます。
<ダイアグラムの種類> <オプション(必要なら)>
<記法に沿った定義>
例えば、フローチャートを記述するときは flowchart、シーケンス図を記述するときは sequenceDiagram というキーワードを使います。
以下に、最も基本的なフローチャートの例を示します。
flowchart LR
A[スタート] --> B{条件分岐1?}
B -->|Yes| C[処理A]
B -->|No| D[処理B]
C --> E[処理結果A]
D --> E[処理結果B]
E --> F[終了]
flowchart LRの部分がダイアグラムの種類と方向を表す指定です。LRは Left to Right(左から右) を意味し、フローチャートを左から右に描画します。- その他に
TB(Top to Bottom)、RL(Right to Left)、BT(Bottom to Top) などの選択肢があります。
3. フローチャート (Flowchart) 詳説
3.1 基本構文
フローチャートを記述する際は、flowchart <方向> を先頭に書き、矢印でノードをつないでいきます。ノード同士は --> や --- の表記で結び、分岐や条件を {} で表現します。
例:
flowchart TB
A[開始] --> B{条件X?}
B -->|はい| C[分岐1]
B -->|いいえ| D[分岐2]
C --> E[処理C]
D --> E[処理D]
E --> F[終了]
3.1.1 ノードのラベル付け
[ ](角括弧)は長方形のノード()(丸括弧)は円弧形状のノード{ }(波括弧)はひし形ノード(( ))(丸括弧を2重)は円形ノード(開始・終了ノードなどで使いやすい)
ラベルは [ ] 内などに記述します。
例: A[スタート] と書くと、ノードAに「スタート」と表示される長方形を描画します。
3.1.2 ノードID と表示ラベル
ノードの ID は図中で一意に管理されるための識別子、角括弧 [ ] 内などに表示するテキストはユーザー向けのラベルです。
Mermaid ではノードID とラベルを同じように表記できますが、同じ ID を複数個所に使うと衝突しないよう注意が必要です。
flowchart LR
A(開始) --> B{条件?}
B -->|Yes| C(処理C)
B -->|No| D(処理D)
3.2 矢印・線の表現
- 通常の矢印:
-->(実線) - 太線:
==>(二重線) - 点線:
-.-> - テキスト付きの分岐:
-->|Yes|
3.3 特殊構文: サブグラフ(subgraph)
大きな図の一部をまとめたいときに便利なのが subgraph 構文です。サブグラフを使うと、フローチャートの中にまとまりを作り、見通しを良くすることが可能です。
flowchart TB
A[開始] --> B{条件A?}
subgraph グループ1
B --> C[処理1]
C --> D[処理2]
end
D --> E[別の処理]
E --> F[終了]
subgraph [名前]とendの間にサブグラフに含めたいノード定義を入れる。- サブグラフにも
subgraph id [名前]と ID を付けることができ、カスタマイズが可能。
3.4 ノードやエッジのクラス指定・カスタムスタイル
flowchart LR
classDef critical fill:#ff9999, stroke:#ff0000, stroke-width:2px
A([スタート]) --> B((判定A))
B --> C[処理C]
B --> D[処理D]
class C,D critical
classDef <className> <CSSプロパティ>でクラスの見た目を定義。class <ノードリスト> <className>で一度に複数ノードにクラスを付与できる。
これを使えば、フローチャートの特定ノードをハイライトしたり、色や枠線をカスタムしたりが可能です。
4. シーケンス図 (Sequence Diagram) 詳説
4.1 基本書式
シーケンス図の記述には sequenceDiagram を使います。たとえば以下のような例があります:
sequenceDiagram
participant Alice
participant Bob
Alice->>Bob: こんにちは
Bob->>Alice: やあ、元気?
Alice-->>Bob: とても元気です
4.1.1 登場人物の定義
participant <名前>でシーケンス図に登場するオブジェクト (人物やシステム) を定義します。Alice->>Bob: メッセージの形式で、Alice が Bob に向けてメッセージを送るフローを定義します。
4.1.2 メッセージの種類
->>はメッセージ送信を意味します(実線の矢印)。-->>は点線の矢印。->>と-->>で同期/非同期を表す表現方法として使うことが多いです。
4.1.3 アクティベーション(実行領域)やノート、オプションなど
Mermaid のシーケンス図では、その他に以下のような構文が利用可能です。
activate <participant>/deactivate <participant>
実行領域(アクティベーションバー)を示す。Note over <participant>/Note left of <participant>/Note right of <participant>
メモ(ノート)を追加する。sequenceDiagram participant Alice participant Bob Note left of Alice: Alice のメモ Alice->>Bob: こんにちは Note over Bob: Bob のメモalt/opt/par/loop/criticalなどのブロック構文alt <条件>: 条件分岐opt: オプションフローpar: 並行処理loop: 繰り返しcritical: クリティカル(エラー処理など)
例: alt (条件分岐) の例
sequenceDiagram
participant A
participant B
A->>B: データ要求
alt データあり
B->>A: データ返信
else データなし
B->>A: エラー通知
end
5. ガントチャート (Gantt Chart) 詳説
5.1 ガントチャートとは
プロジェクト管理やスケジュール管理に使われる代表的なツールがガントチャートです。Mermaid でもシンプルな構文でガントチャートを作成できます。
5.2 基本構文
gantt
dateFormat YYYY-MM-DD
title プロジェクト進行計画
section 準備フェーズ
要件定義 :task1, 2025-01-01, 7d
環境構築 :task2, after task1, 5d
section 実装フェーズ
開発 :task3, 2025-01-14, 10d
テスト :task4, after task3, 7d
ganttで始める。dateFormatで日付の形式を指定。titleでガントチャート全体のタイトルを表示。sectionでセクション(フェーズ)を分ける。- タスクの指定形式:
<タスク名> :<タスクID>, <開始日>, <日数>または、<タスク名> :<タスクID>, after <別タスクID>, <日数>のように指定すると、自動的に前のタスク終了後からのスケジュールが組まれる。
5.2.1 タスクバーの色・カスタマイズ
gantt
dateFormat YYYY-MM-DD
title サンプルガント
section 開発前
要件定義 :a1, 2025-01-01, 3d
style a1 fill:#f96,stroke:#333,stroke-width:1px
style <タスクID> fill:<色>, stroke:<枠線色>, stroke-width:<太さ>のように、個々のタスクバーの色を変更できる。
6. クラス図 (Class Diagram) 詳説
6.1 基本構文
classDiagram
class クラスA {
+属性1: int
-属性2: string
+メソッドA(param1: int): void
}
クラスA <|-- クラスB
クラスA o-- クラスC
classDiagramでクラス図を宣言。クラスA <|-- クラスBは継承(一般的に「B extends A」を表す)。
記号には<|--(継承) のほかに、*--(コンポジション) やo--(アグリゲーション) など、UML の表記を反映したものを利用可能。- クラス内部のメンバーの可視性を示すとき、
+は public、-は private、#は protected、~は package-private を意味する。
6.1.1 関係のバリエーション
- 継承:
<|--(左側が親、右側が子) - 実装 (インターフェース):
<|.. - 依存:
..> - 関連:
-- - アグリゲーション:
o-- - コンポジション:
*--
6.2 クラス同士の依存・関連
classDiagram
class Controller
class Service
class Repository
Controller ..> Service : uses
Service ..> Repository : depends on
Controller ..> Serviceは「Controller が Service を利用する依存関係」を示す。
7. ER 図 (Entity Relationship Diagram) 詳説
7.1 基本構文
ER 図(エンティティ関係図)は、データベースのテーブルやカラム間の関連を表すのに使います。Mermaid で ER 図を描く場合は、次のように erDiagram と宣言します。
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE-ITEM : contains
CUSTOMER {
string name
string address
int customer_id PK
}
ORDER {
int order_id PK
string date
}
LINE-ITEM {
int line_item_id PK
int quantity
float price
}
||--o{などの記号でリレーションの種類(1対多、多対多など)を表す。||: 1|{: 多o{: 0 以上 (可変)
{ }内でカラムを定義し、PKやFKなどの修飾子を付けられる。
7.1.1 リレーションの書き方
A ||--|| B : "リレーション名": 一対一A ||--|{ B : "リレーション名": 一対多A }|--|{ B : "リレーション名": 多対多oは 0個以上を示す可変マーク
8. 状態遷移図 (State Diagram) 詳説
8.1 基本書式
状態遷移図(ステートマシン)を表現するには stateDiagram または stateDiagram-v2 を使います。
たとえば以下のように定義できます。
stateDiagram
[*] --> State1
State1 --> State2: イベントA
State2 --> State3: イベントB
State3 --> [*]
[*]は開始状態や終了状態を表す記法。State1 --> State2: イベントのように、状態遷移を記述する。
8.2 コンポジットステート(入れ子状態)
状態遷移図には、状態の中にさらにサブ状態を定義できる場合があります。
stateDiagram
[*] --> Idle
Idle --> Active: start
state Active {
[*] --> SubState1
SubState1 --> SubState2: move
SubState2 --> [*]
}
Active --> Idle: stop
state <状態名> { ... }でサブステートを定義。
9. ユーザージャーニーマップ (User Journey) 詳説
9.1 基本構文
ユーザの行動や感情の流れを可視化するのがユーザージャーニーマップです。Mermaid では journey というキーワードで簡単なジャーニーマップを表現可能です。
journey
title ユーザーの1日の流れ
section 朝
ユーザーがログイン: 5: とても簡単
ホーム画面を確認: 3: 少しストレス
section 昼
商品を検索: 4: 概ね快適
商品を購入: 2: ややストレス
titleで全体のタイトル。sectionで区切り。- 各行で、
<アクション>: <評価(数値)>: <コメント>という書式で指定。評価(数値)は1~5などで記述することが多い。
10. Mermaid を活用する際の実践ポイント
10.1 Markdown との連携
多くの場合、Markdown ファイル内に次のように書きます:
“`mermaid flowchart LR … “`
ただし、GitHub では 2023 年現在、Mermaid が 公式サポート されており、.md ファイル内で上記のように書くと、そのままプレビューでレンダリングされる場合があります。
GitLab, Bitbucket, Confluence, Typora, Obsidian, Visual Studio Code (拡張機能) なども対応が進んでおり、プラットフォームによっては別途プラグインを入れることで簡単にプレビューできます。
10.2 Visual Studio Code の拡張機能
- “Markdown Preview Mermaid Support” などをインストールすると、VSCode 上でマークダウンプレビューを確認できます。
- Mermaid 専用のエディタ拡張 (Syntax highlight) や、リアルタイムプレビューを実現するものも多く存在。
10.3 CLI ツールを使ったビルドプロセス
Mermaid には mermaid-cli というコマンドラインツールが存在し、以下のように .mmd ファイルを指定して SVG や PNG などに一括出力できます。
npx @mermaid-js/mermaid-cli -i input.mmd -o output.svg
このように自動ビルドパイプラインに組み込むことで、最新版のダイアグラムを常に画像として出力できます。
10.4 Mermaid の設定・テーマ
Mermaid では、デフォルトのテーマ以外にダークテーマやカスタムテーマを設定できます。
設定例:
{
"theme": "forest"
}
その他にも dark / neutral などのテーマが用意されているほか、CSS で細かくカスタマイズ可能です。
11. バージョン管理・コラボレーション上のメリット
- レビューがしやすい
- Mermaid コード自体がテキストなので、Pull Request 上でフローチャートやシーケンス図の変更点を一目で把握できる。
- 再利用が簡単
- 特定の業務フロー図などをテンプレート化し、コピペで使い回せる。
- ドキュメント生成との連動
- 自動生成スクリプトで
.mmdファイルから PDF / HTML / PNG をビルドしてドキュメントを作成できる。
- 自動生成スクリプトで
12. よくあるトラブルシューティング
- GitHub で Mermaid が表示されない
- まだ対応前の GFM (古いバージョン) か、何らかの理由で
mermaidブロックが認識されていない可能性。 - レンダリングされる環境をチェックし、対応していない場合は
mermaid-cliや外部サービスで画像化して貼り付ける。
- まだ対応前の GFM (古いバージョン) か、何らかの理由で
- ノードや関係線の誤字
- Mermaid では ID にスペースが含められなかったり、大文字小文字を間違えると図が一部レンダリングされない。
---と-->を混同すると、意図しない図になる可能性がある。
- 大規模図の見づらさ
- ノード数が多いとデフォルトのレイアウトだと煩雑になる。
- サブグラフを活用したり、図を複数に分割して可読性を向上させる工夫が必要。
- ブラウザやビルド環境による差異
- Mermaid.js のバージョンによって、一部の構文が使えない / バグがある場合がある。
- 常に最新の Mermaid (公式 GitHub リポジトリ) のドキュメントを確認すると良い。
13. 高度な活用テクニック
13.1 自由な CSS カスタマイズ
Mermaid では、各ダイアグラム要素に対して class を付与し、独自の CSS をあてがうことが可能です。
これにより、ブランドカラーに合わせたカラースキームや、図形の大きさ・余白を細かく調整できます。
13.2 Interactive Mermaid
ブラウザ上で Mermaid を動的に扱う場合、JavaScript で Mermaid の API を呼び出して、動的にダイアグラムを差し替え・再描画することもできます。
例: mermaidAPI.initialize(options); mermaidAPI.render('id', mermaidSource, callback);
13.3 ASCII アートの代替
かつての手打ち ASCII アートを使わずに済むので、特にシーケンス図や複雑なフローチャートなどをテキストで整形する必要がなくなります。
Mermaid は可読性とメンテナンス性を大きく向上させてくれます。
14. まとめ
ここまで、マーメイド記法(Mermaid)を 1000倍詳しく、さまざまな観点から丁寧に説明してきました。ポイントを振り返ると:
- Mermaid は多種多様なダイアグラムをテキストベースで記述できるオープンソースライブラリ。
- 簡潔・直感的な記法 でありながら、フローチャート、シーケンス図、ガントチャート、クラス図、ER 図、状態遷移図、ユーザージャーニーマップ など、幅広い用途に対応。
- バージョン管理やコラボレーション に適した形式で、Pull Request 等でのドキュメント更新の差分比較が容易。
- GitHub, GitLab, VSCode, Notion, Confluence など、 多くのプラットフォームでサポートが進行中 で使い勝手が良い。
mermaid-cliや CSS でカスタムすれば、自動ビルドパイプライン への組み込みや テーマカスタマイズ も可能。
従来、図を更新するたびに画像編集ツールを立ち上げて修正し、再度貼り直すといった手間が生じていましたが、Mermaid を使うことで作業効率も大幅に向上します。
ソフトウェア開発のドキュメント作成やアジャイル開発の現場、さらには ビジネス要件整理 や 研究資料の可視化 にも、Mermaid は大いに役立ちます。
もしまだ使ったことがない方は、まずは簡単なフローチャート を試しに書いてみるところから始めてみましょう。一度慣れてしまえば、その利便性から手放せなくなるはずです。



