Skip to content

ダイアグラム

MarkdownはMermaid構文を使って様々なダイアグラムやフローチャートを作成でき、ドキュメントに視覚的な表現力を与えます。

Mermaidの概要

Mermaidはテキストベースのダイアグラム生成ツールで、複数のダイアグラムタイプをサポートします:

  • フローチャート
  • シーケンス図
  • ガントチャート
  • クラス図
  • 状態遷移図
  • 円グラフ
  • ユーザージャーニー
  • Gitグラフ

基本構文

フローチャート

markdown
```mermaid
flowchart TD
    A[開始] --> B{ログイン済み?}
    B -->|はい| C[ホームを表示]
    B -->|いいえ| D[ログイン画面を表示]
    C --> E[終了]
    D --> F[ユーザーログイン]
    F --> G{ログイン成功?}
    G -->|はい| C
    G -->|いいえ| H[エラー表示]
    H --> D

**レンダリング結果:**

```mermaid
flowchart TD
    A[開始] --> B{ログイン済み?}
    B -->|はい| C[ホームを表示]
    B -->|いいえ| D[ログイン画面を表示]
    C --> E[終了]
    D --> F[ユーザーログイン]
    F --> G{ログイン成功?}
    G -->|はい| C
    G -->|いいえ| H[エラー表示]
    H --> D

シーケンス図

markdown
```mermaid
sequenceDiagram
    participant ユーザー
    participant フロントエンド
    participant バックエンド
    participant データベース
    
    ユーザー->>フロントエンド: ログインリクエスト
    フロントエンド->>バックエンド: ユーザー検証
    バックエンド->>データベース: ユーザーデータ照会
    データベース-->>バックエンド: ユーザー情報返却
    バックエンド-->>フロントエンド: 検証結果
    フロントエンド-->>ユーザー: ログイン応答

**レンダリング結果:**

```mermaid
sequenceDiagram
    participant ユーザー
    participant フロントエンド
    participant バックエンド
    participant データベース
    
    ユーザー->>フロントエンド: ログインリクエスト
    フロントエンド->>バックエンド: ユーザー検証
    バックエンド->>データベース: ユーザーデータ照会
    データベース-->>バックエンド: ユーザー情報返却
    バックエンド-->>フロントエンド: 検証結果
    フロントエンド-->>ユーザー: ログイン応答

フローチャート詳細

ノードタイプ

markdown
```mermaid
flowchart LR
    A[長方形ノード]
    B(角丸ノード)
    C((円形ノード))
    D{ひし形ノード}
    E[[サブルーチン]]
    F[(データベース)]
    G>ラベルノード]

**レンダリング結果:**

```mermaid
flowchart LR
    A[長方形ノード]
    B(角丸ノード)
    C((円形ノード))
    D{ひし形ノード}
    E[[サブルーチン]]
    F[(データベース)]
    G>ラベルノード]

エッジタイプ

markdown
```mermaid
flowchart TD
    A --> B
    C --- D
    E -.-> F
    G ==> H
    I --o J
    K --x L

**レンダリング結果:**

```mermaid
flowchart TD
    A --> B
    C --- D
    E -.-> F
    G ==> H
    I --o J
    K --x L

方向制御

markdown
<!-- 上から下 -->
```mermaid
flowchart TD
    A --> B
mermaid
flowchart BT
    A --> B
mermaid
flowchart LR
    A --> B
mermaid
flowchart RL
    A --> B

### 複雑なフローチャート例

```markdown
```mermaid
flowchart TD
    Start([プロジェクト開始]) --> Analysis[要件分析]
    Analysis --> Design[システム設計]
    Design --> Dev{開発段階}
    
    Dev --> Frontend[フロントエンド開発]
    Dev --> Backend[バックエンド開発]
    Dev --> Database[データベース設計]
    
    Frontend --> FrontTest[フロントテスト]
    Backend --> BackTest[バックテスト]
    Database --> DataTest[データテスト]
    
    FrontTest --> Integration[統合テスト]
    BackTest --> Integration
    DataTest --> Integration
    
    Integration --> Deploy{デプロイ準備}
    Deploy -->|合格| Production[本番環境]
    Deploy -->|失敗| Bug[問題修正]
    Bug --> Integration
    
    Production --> Monitor[監視]
    Monitor --> End([プロジェクト完了])
    
    style Start fill:#e1f5fe
    style End fill:#e8f5e8
    style Bug fill:#ffebee

**レンダリング結果:**

```mermaid
flowchart TD
    Start([プロジェクト開始]) --> Analysis[要件分析]
    Analysis --> Design[システム設計]
    Design --> Dev{開発段階}
    
    Dev --> Frontend[フロントエンド開発]
    Dev --> Backend[バックエンド開発]
    Dev --> Database[データベース設計]
    
    Frontend --> FrontTest[フロントテスト]
    Backend --> BackTest[バックテスト]
    Database --> DataTest[データテスト]
    
    FrontTest --> Integration[統合テスト]
    BackTest --> Integration
    DataTest --> Integration
    
    Integration --> Deploy{デプロイ準備}
    Deploy -->|合格| Production[本番環境]
    Deploy -->|失敗| Bug[問題修正]
    Bug --> Integration
    
    Production --> Monitor[監視]
    Monitor --> End([プロジェクト完了])
    
    style Start fill:#e1f5fe
    style End fill:#e8f5e8
    style Bug fill:#ffebee

シーケンス図詳細

基本構文

mermaid
sequenceDiagram

Rendered Output:

mermaid
sequenceDiagram

アクティベーションバーとライフライン

mermaid
sequenceDiagram
    participant A as クライアント
    participant B as サーバー
    
    A->>+B: データ要求
    Note right of B: リクエスト処理中
    B-->>-A: データ返却
    
    A->>+B: 別のリクエスト
    B->>+B: 内部処理
    B-->>-B: 処理完了
    B-->>-A: 結果返却

Rendered Output:

mermaid
sequenceDiagram
    participant A as クライアント
    participant B as サーバー
    
    A->>+B: データ要求
    Note right of B: リクエスト処理中
    B-->>-A: データ返却
    
    A->>+B: 別のリクエスト
    B->>+B: 内部処理
    B-->>-B: 処理完了
    B-->>-A: 結果返却

ループと条件分岐

mermaid
sequenceDiagram
    participant U as ユーザー
    participant S as システム
    
    U->>S: ログインリクエスト
    
    alt ユーザー名が存在
        S->>S: パスワード検証
        alt パスワード正しい
            S-->>U: ログイン成功
        else パスワード間違い
            S-->>U: パスワード誤り
        end
    else ユーザー名なし
        S-->>U: ユーザー未登録
    end
    
    opt 「ログイン状態を記憶」
        S->>S: ログイン状態保存
    end

Rendered Output:

mermaid
sequenceDiagram
    participant U as ユーザー
    participant S as システム
    
    U->>S: ログインリクエスト
    
    alt ユーザー名が存在
        S->>S: パスワード検証
        alt パスワード正しい
            S-->>U: ログイン成功
        else パスワード間違い
            S-->>U: パスワード誤り
        end
    else ユーザー名なし
        S-->>U: ユーザー未登録
    end
    
    opt 「ログイン状態を記憶」
        S->>S: ログイン状態保存
    end

クラス図

mermaid
classDiagram
    class 動物 {
        +String 名前
        +int 年齢
        +食べる()
        +眠る()
    }
    
    class 犬 {
        +String 犬種
        +吠える()
        +しっぽを振る()
    }
    
    class 猫 {
        +String 色
        +鳴く()
        +ゴロゴロする()
    }
    
    動物 <|-- 犬
    動物 <|-- 猫
    
    class 飼い主 {
        +String 名前
        +ペットに餌をやる()
    }
    
    飼い主 --> 動物 : 飼う

Rendered Output:

mermaid
classDiagram
    class 動物 {
        +String 名前
        +int 年齢
        +食べる()
        +眠る()
    }
    
    class 犬 {
        +String 犬種
        +吠える()
        +しっぽを振る()
    }
    
    class 猫 {
        +String 色
        +鳴く()
        +ゴロゴロする()
    }
    
    動物 <|-- 犬
    動物 <|-- 猫
    
    class 飼い主 {
        +String 名前
        +ペットに餌をやる()
    }
    
    飼い主 --> 動物 : 飼う

状態遷移図

mermaid
stateDiagram-v2
    [*] --> 待機
    待機 --> 実行中 : 開始
    実行中 --> 一時停止 : 一時停止
    実行中 --> 完了 : 終了
    一時停止 --> 実行中 : 再開
    一時停止 --> 停止 : 停止
    停止 --> 待機 : リセット
    完了 --> 待機 : リセット
    完了 --> [*]
    
    state 実行中 {
        [*] --> 初期化
        初期化 --> 処理中
        処理中 --> 検証
        検証 --> [*]
    }

Rendered Output:

mermaid
stateDiagram-v2
    [*] --> 待機
    待機 --> 実行中 : 開始
    実行中 --> 一時停止 : 一時停止
    実行中 --> 完了 : 終了
    一時停止 --> 実行中 : 再開
    一時停止 --> 停止 : 停止
    停止 --> 待機 : リセット
    完了 --> 待機 : リセット
    完了 --> [*]
    
    state 実行中 {
        [*] --> 初期化
        初期化 --> 処理中
        処理中 --> 検証
        検証 --> [*]
    }

ガントチャート

mermaid
gantt
    title プロジェクト開発タイムライン
    dateFormat  YYYY-MM-DD
    section 要件分析
    要件収集          :done,    des1, 2024-01-01,2024-01-05
    要件分析            :done,    des2, after des1, 5d
    要件レビュー              :done,    des3, after des2, 2d
    
    section 設計フェーズ
    システム設計                   :active,  design1, 2024-01-12, 7d
    UI設計                       :         design2, after design1, 5d
    データベース設計                 :         design3, after design1, 3d
    
    section 開発フェーズ
    フロントエンド開発            :         dev1, after design2, 10d
    バックエンド開発             :         dev2, after design3, 12d
    テスト                         :         test1, after dev1, 5d

円グラフ

mermaid
pie title ウェブサイト流入元
    "検索エンジン" : 45
    "ソーシャルメディア" : 25
    "ダイレクト" : 20
    "メールマーケティング" : 7
    "その他" : 3

ユーザージャーニー

mermaid
journey
    title ユーザーショッピングジャーニー
    section 発見
      ホームページ訪問: 3: ユーザー
      商品閲覧: 4: ユーザー
      商品検索: 4: ユーザー
    section 検討
      詳細を見る: 4: ユーザー
      価格比較: 3: ユーザー
      レビューを読む: 5: ユーザー

Git Graph

mermaid
gitgraph
    commit id: "初回コミット"
    commit id: "ユーザーモジュール追加"
    branch feature/auth
    commit id: "ログイン機能追加"
    commit id: "登録機能追加"
    checkout main
    commit id: "ホームバグ修正"
    merge feature/auth
    commit id: "v1.0リリース"
    branch hotfix
    commit id: "緊急修正"
    checkout main
    merge hotfix
    commit id: "v1.0.1リリース"

実践シナリオ

システムアーキテクチャ図

mermaid
flowchart TB
    subgraph "ユーザー層"
        Web[Webブラウザ]
        Mobile[モバイルアプリ]
        API[APIクライアント]
    end
    
    subgraph "ゲートウェイ層"
        Gateway[APIゲートウェイ]
        Auth[認証サービス]
    end
    
    subgraph "サービス層"
        UserService[ユーザーサービス]
        OrderService[注文サービス]
        PaymentService[決済サービス]
        NotificationService[通知サービス]
    end
    
    subgraph "データ層"
        UserDB[(ユーザーDB)]
        OrderDB[(注文DB)]
        Cache[(Redisキャッシュ)]
        Queue[メッセージキュー]
    end
    
    Web --> Gateway
    Mobile --> Gateway
    API --> Gateway
    
    Gateway --> Auth
    Gateway --> UserService
    Gateway --> OrderService
    Gateway --> PaymentService
    
    UserService --> UserDB
    OrderService --> OrderDB
    PaymentService --> Queue
    NotificationService --> Queue
    
    UserService --> Cache
    OrderService --> Cache
    
    style Gateway fill:#e1f5fe
    style Auth fill:#fff3e0
    style Cache fill:#f3e5f5

APIコールフロー

mermaid
sequenceDiagram
    participant C as クライアント
    participant G as APIゲートウェイ
    participant A as 認証サービス
    participant U as ユーザーサービス
    participant D as データベース
    participant R as Redis
    
    C->>G: ユーザー情報リクエスト
    G->>A: トークン検証
    A->>R: トークンキャッシュ確認
    R-->>A: トークン有効
    A-->>G: 認証成功
    
    G->>U: ユーザー情報取得
    U->>R: ユーザーキャッシュ確認
    alt キャッシュあり
        R-->>U: ユーザーデータ返却
    else キャッシュなし
        U->>D: データベース照会
        D-->>U: ユーザー情報返却
        U->>R: キャッシュ更新
    end
    
    U-->>G: ユーザー情報返却
    G-->>C: ユーザーデータ応答

業務フローチャート

mermaid
flowchart TD
    Start([ユーザー注文]) --> Check{在庫確認}
    Check -->|在庫あり| Reserve[在庫確保]
    Check -->|在庫なし| OutOfStock[在庫切れ]
    OutOfStock --> Notify[ユーザー通知]
    Notify --> End1([終了])
    
    Reserve --> Payment{決済処理}
    Payment -->|成功| ConfirmOrder[注文確定]
    Payment -->|失敗| ReleaseStock[在庫解放]
    ReleaseStock --> PaymentFailed[決済失敗]
    PaymentFailed --> End2([終了])
    
    ConfirmOrder --> UpdateInventory[在庫更新]
    UpdateInventory --> SendNotification[通知送信]
    SendNotification --> Logistics[物流手配]
    Logistics --> End3([注文完了])
    
    style Start fill:#e8f5e8
    style End1 fill:#ffebee
    style End2 fill:#ffebee
    style End3 fill:#e8f5e8
    style OutOfStock fill:#ffebee
    style PaymentFailed fill:#ffebee

スタイルとテーマ

ノードスタイル

mermaid
flowchart LR
    A[デフォルトスタイル] --> B[スタイル1]
    A --> C[スタイル2]
    A --> D[スタイル3]
    
    style B fill:#f9f,stroke:#333,stroke-width:4px
    style C fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
    style D fill:#f96,stroke:#333,stroke-width:4px,color:#fff

クラススタイル

mermaid
flowchart LR
    A[ノードA]:::classA --> B[ノードB]:::classB
    A --> C[ノードC]:::classC
    
    classDef classA fill:#e1f5fe,stroke:#01579b,stroke-width:2px
    classDef classB fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
    classDef classC fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px

設定と互換性

VitePressの設定

javascript
// .vitepress/config.js
export default {
  markdown: {
    mermaid: true
  }
}

GitHubサポート

GitHubはMermaidをネイティブサポートしており、Markdownファイル内で直接利用できます:

markdown
```mermaid
graph LR
    A --> B

### その他プラットフォームのサポート

| プラットフォーム      | サポート      | 設定要件           |
|--------------|--------------|-------------------|
| **GitHub**   | ✅ ネイティブ     | なし              |
| **GitLab**   | ✅ ネイティブ     | なし              |
| **VitePress**| ✅ プラグイン     | 設定が必要         |
| **Jekyll**   | ✅ プラグイン     | プラグイン導入     |
| **Hugo**     | ✅ テーマ        | テーマ依存         |

## ベストプラクティス

### 設計のヒント

```markdown
✅ 推奨:

1. **シンプルを保つ:**
   - 複雑すぎるダイアグラムを避ける
   - 明確なラベルと接続を使う

2. **論理的なレイアウト:**
   - 適切なダイアグラム方向を選ぶ
   - 論理的な流れを明確に

3. **一貫したスタイル:**
   - 一貫したカラーテーマを使う
   - ダイアグラムのスタイルを統一

4. **説明を追加:**
   - 複雑なダイアグラムにはタイトルを
   - 必要なテキスト説明を加える

❌ 避けるべき:

1. 理解しにくいほど複雑な図
2. 交差線が多すぎる
3. 曖昧なラベル
4. 凡例の欠如

パフォーマンス考慮

markdown
- **大きなダイアグラムの最適化:**
  - 複雑な図は分割を検討
  - サブグラフで整理

- **読み込みパフォーマンス:**
  - 1ページにダイアグラムを詰め込みすぎない
  - 遅延読み込みを検討

- **モバイル対応:**
  - 小さい画面でも読めるように
  - 横スクロールを検討

関連構文

ツールとリソース

オンラインエディタ

  • Mermaid Live Editor: 公式オンラインエディタ
  • Draw.io: 汎用ダイアグラムツール
  • Lucidchart: プロ向けダイアグラムプラットフォーム
  • Excalidraw: 手書き風ダイアグラム

開発者向けツール

  • Mermaid CLI: コマンドラインツール
  • VS Code Mermaid: Visual Studio Code拡張
  • Atom Mermaid: Atomエディタ拡張
  • IntelliJ Mermaid: JetBrains IDE拡張

参考資料

  • Mermaid公式ドキュメント: 全構文リファレンス
  • Mermaidサンプル集: 各種ダイアグラム例
  • GitHub Mermaid: GitHubでの利用方法
  • Awesome Mermaid: リソースコレクション

フローチャート構文をマスターすれば、ドキュメント内でプロフェッショナルな視覚ダイアグラムを作成でき、明瞭さと表現力が大幅に向上します。

Build by www.markdownlang.com