1. Top
  2. Blog
  3. 第2回:Mermaid実践編 - 図解で伝えるAI概念
第2回:Mermaid実践編 - 図解で伝えるAI概念

第2回:Mermaid実践編 - 図解で伝えるAI概念

  • Yamashita
  • 2025.04.03

前回の「Mermaid入門 - 基本の使い方と環境構築」に続き、今回はMermaidの応用的な使い方を紹介していきます。特に注目したいのは、昨今話題のAI技術を図解する方法です。「百聞は一見にしかず」というように、複雑なAI概念も図解することで理解が深まります。

今回は、Model Context Protocol (MCP)3Cスキルといった最新のAI概念を例に、Mermaidでの効果的な図解表現方法を学んでいきましょう。

1. フローチャートの応用技術

前回、基本的なフローチャートの書き方を学びました。今回は一歩進んで、より複雑な図を描く方法を見ていきましょう。

複雑なフローの表現方法

MCPのようなシステムアーキテクチャは複数の要素が相互に関連し合っています。そうした複雑な関係性を表現するには、方向や形状を工夫する必要があります。

flowchart TD User([ユーザー]) --> Claude[Claude AIアシスタント] Claude --> MCP{Model Context Protocol} MCP -->|データ取得| ExternalSources[(外部データソース)] MCP -->|APIコール| Tools[外部ツール] MCP -->|ファイル読込| LocalFiles[(ローカルファイル)] ExternalSources --> MCP Tools --> MCP LocalFiles --> MCP MCP --> Claude Claude --> Response([応答生成])
flowchart TD
    User([ユーザー]) --> Claude[Claude AIアシスタント]
    Claude --> MCP{Model Context Protocol}
    MCP -->|データ取得| ExternalSources[(外部データソース)]
    MCP -->|APIコール| Tools[外部ツール]
    MCP -->|ファイル読込| LocalFiles[(ローカルファイル)]
    
    ExternalSources --> MCP
    Tools --> MCP
    LocalFiles --> MCP
    
    MCP --> Claude
    Claude --> Response([応答生成])

ここでは、以下のテクニックを使っています:

  • TD(Top Down)でトップダウンの方向を指定
  • ()[]などの形状を使い分けて要素の種類を視覚的に区別
  • 双方向の矢印で相互作用を表現

サブグラフを活用した階層構造の表現

MCPアーキテクチャ図のような階層構造を表現するには、サブグラフが効果的です。サブグラフはsubgraphキーワードで定義します。

flowchart TB subgraph "ローカル環境" Host["MCPクライアントを持つホスト\n(Claude、IDE、ツールなど)"] S1["MCPサーバー A"] S2["MCPサーバー B"] S3["MCPサーバー C"] Host -->|MCPプロトコル| S1 Host -->|MCPプロトコル| S2 Host -->|MCPプロトコル| S3 end subgraph "外部環境" D3[(リモートサービス)] end D1[(ローカルデータソース1)] D2[(ローカルデータソース2)] S1 --> D1 S2 --> D2 S3 -->|Web API| D3
flowchart TB
    subgraph "ローカル環境"
        Host["MCPクライアントを持つホスト\n(Claude、IDE、ツールなど)"]
        S1["MCPサーバー A"]
        S2["MCPサーバー B"]
        S3["MCPサーバー C"]
        
        Host -->|MCPプロトコル| S1
        Host -->|MCPプロトコル| S2
        Host -->|MCPプロトコル| S3
    end
    
    subgraph "外部環境"
        D3[(リモートサービス)]
    end
    
    D1[(ローカルデータソース1)]
    D2[(ローカルデータソース2)]
    
    S1 --> D1
    S2 --> D2
    S3 -->|Web API| D3

サブグラフのテクニック:

  • subgraph "タイトル"で領域をグループ化
  • サブグラフ内の要素間の関係も明示的に描画
  • サブグラフをまたいだ関係性も表現可能

ノードとエッジのスタイリング基本

図をより分かりやすくするために、ノード(要素)とエッジ(線)のスタイルをカスタマイズできます。

flowchart LR A[標準ノード] --> B(丸括弧ノード) C([角丸四角ノード]) --> D[[二重角括弧ノード]] E[(データベース)] --> F((円ノード)) G>非対称ノード] --> H{ダイヤモンド} I --> J[/平行四辺形/] K[AIモデル] -->|訓練| L[推論エンジン] M[入力] -.->|処理中| N[出力] O[ユーザー] ==>|リクエスト| P[サーバー] style K fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff style L fill:#bfb,stroke:#6f6,stroke-width:2px linkStyle 7 stroke:#ff3,stroke-width:4px,color:red
flowchart LR
    A[標準ノード] --> B(丸括弧ノード)
    C([角丸四角ノード]) --> D[[二重角括弧ノード]]
    E[(データベース)] --> F((円ノード))
    G>非対称ノード] --> H{ダイヤモンド}
    I --> J[/平行四辺形/]
    
    K[AIモデル] -->|訓練| L[推論エンジン]
    M[入力] -.->|処理中| N[出力]
    O[ユーザー] ==>|リクエスト| P[サーバー]
    
    style K fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
    style L fill:#bfb,stroke:#6f6,stroke-width:2px
    linkStyle 7 stroke:#ff3,stroke-width:4px,color:red

スタイリングのポイント:

  • 様々な形状のノードを使い分けて意味を持たせる
  • 線の種類(実線、点線、太線)で関係性の違いを表現
  • styleでノードの色やボーダーをカスタマイズ
  • linkStyleで線のスタイルを変更

2. シーケンス図で学ぶAIとの対話フロー

フローチャートが静的な関係性を表すのに対し、シーケンス図は時間の経過に伴う相互作用を表現するのに適しています。AIとのインタラクションを図解してみましょう。

AIアシスタントと人間の対話を図解

sequenceDiagram actor User as ユーザー participant Claude as Claude AI participant MCP as Model Context Protocol participant DB as 外部データベース User->>+Claude: 質問を入力 Claude->>+MCP: コンテキスト情報を要求 MCP->>+DB: 関連データをクエリ DB-->>-MCP: データ結果を返す MCP-->>-Claude: コンテキスト付きデータを提供 Claude-->>-User: 情報を統合して回答 Note over Claude,MCP: MCPを通じて外部データにアクセス
sequenceDiagram
    actor User as ユーザー
    participant Claude as Claude AI
    participant MCP as Model Context Protocol
    participant DB as 外部データベース
    
    User->>+Claude: 質問を入力
    Claude->>+MCP: コンテキスト情報を要求
    MCP->>+DB: 関連データをクエリ
    DB-->>-MCP: データ結果を返す
    MCP-->>-Claude: コンテキスト付きデータを提供
    Claude-->>-User: 情報を統合して回答
    
    Note over Claude,MCP: MCPを通じて外部データにアクセス

シーケンス図のポイント:

  • actorで人間のアクターを定義
  • participantでシステムのパーティシパントを定義
  • ->> で実線矢印、-->> で点線矢印を表現
  • +  - で活性化状態を表現(開始と終了)
  • Note over でコメントを追加

メッセージの流れと処理の可視化

より詳細なメッセージフローを表現するには、オプションやループを活用します。

sequenceDiagram actor User as ユーザー participant Claude as Claude AI participant MCP as Model Context Protocol participant Tool as 外部ツール User->>Claude: 「今日の天気を教えて」 alt MCPでコンテキスト情報を取得 Claude->>MCP: 位置情報の要求 MCP->>User: 位置情報へのアクセス許可を要求 User->>MCP: 許可を与える MCP->>Tool: 天気APIにアクセス Tool-->>MCP: 天気データ MCP-->>Claude: 天気情報を提供 else コンテキスト情報なし Claude-->>User: 位置情報が必要である旨を伝える end Claude->>User: 天気情報を含む回答 loop フォローアップの質問 User->>Claude: 追加質問 Claude-->>User: 追加回答 end
sequenceDiagram
    actor User as ユーザー
    participant Claude as Claude AI
    participant MCP as Model Context Protocol
    participant Tool as 外部ツール
    
    User->>Claude: 「今日の天気を教えて」
    
    alt MCPでコンテキスト情報を取得
        Claude->>MCP: 位置情報の要求
        MCP->>User: 位置情報へのアクセス許可を要求
        User->>MCP: 許可を与える
        MCP->>Tool: 天気APIにアクセス
        Tool-->>MCP: 天気データ
        MCP-->>Claude: 天気情報を提供
    else コンテキスト情報なし
        Claude-->>User: 位置情報が必要である旨を伝える
    end
    
    Claude->>User: 天気情報を含む回答
    
    loop フォローアップの質問
        User->>Claude: 追加質問
        Claude-->>User: 追加回答
    end

高度なシーケンス図のテクニック:

  • alt/else/end で条件分岐を表現
  • loop/end で繰り返しを表現
  • 矢印のスタイルを変えて情報の種類を区別

3. クラス図で表現するAIシステム構造

クラス図はシステムの構造を表現するのに最適です。MCPのコンポーネント構造を例に見てみましょう。

MCP関連コンポーネントの関係性を図解

classDiagram class MCPClient { +connect() +sendRequest() +receiveResponse() } class MCPServer { -dataProviders[] +registerProvider() +handleRequest() +sendResponse() } class DataProvider { <<interface>> +getData() +hasAccessTo() } class DatabaseProvider { -connection +getData() +hasAccessTo() } class APIProvider { -endpoint -credentials +getData() +hasAccessTo() } class FileSystemProvider { -rootPath +getData() +hasAccessTo() } MCPClient --> MCPServer: リクエスト送信 MCPServer *-- DataProvider: 利用する DataProvider <|-- DatabaseProvider: 実装 DataProvider <|-- APIProvider: 実装 DataProvider <|-- FileSystemProvider: 実装 end
classDiagram
    class MCPClient {
        +connect()
        +sendRequest()
        +receiveResponse()
    }
    
    class MCPServer {
        -dataProviders[]
        +registerProvider()
        +handleRequest()
        +sendResponse()
    }
    
    class DataProvider {
        <<interface>>
        +getData()
        +hasAccessTo()
    }
    
    class DatabaseProvider {
        -connection
        +getData()
        +hasAccessTo()
    }
    
    class APIProvider {
        -endpoint
        -credentials
        +getData()
        +hasAccessTo()
    }
    
    class FileSystemProvider {
        -rootPath
        +getData()
        +hasAccessTo()
    }
    
    MCPClient --> MCPServer: リクエスト送信
    MCPServer *-- DataProvider: 利用する
    DataProvider <|-- DatabaseProvider: 実装
    DataProvider <|-- APIProvider: 実装
    DataProvider <|-- FileSystemProvider: 実装

クラス図のテクニック:

  • クラスと属性、メソッドの定義
  • <<interface>> でインターフェースを表現
  • 関係性を示す矢印の使い分け:
    • --> は関連(association)
    • *-- は集約(aggregation)
    • <|-- は継承(inheritance)

システム設計図としての活用法

より実践的なシステム設計を表現するには、関係性に注釈を加えます。

classDiagram class AIAssistant { -model -context +process(input) +generateResponse() } class MCPManager { -servers[] +connectServer(server) +requestData(query) +processResults() } class MCPServer { -providers[] +registerProvider(provider) +handleRequest(query) } class User { -preferences +sendQuery() +receiveResponse() } User "1" -- "1..*" AIAssistant: 利用する AIAssistant "1" -- "1" MCPManager: データ取得 MCPManager "1" -- "n" MCPServer: 管理する MCPServer "1" -- "n" DataProvider: 利用する note for AIAssistant "Claude, GPT-4などの大規模言語モデル" note for MCPManager "複数のMCPサーバーを統合管理"
classDiagram
    class AIAssistant {
        -model
        -context
        +process(input)
        +generateResponse()
    }
    
    class MCPManager {
        -servers[]
        +connectServer(server)
        +requestData(query)
        +processResults()
    }
    
    class MCPServer {
        -providers[]
        +registerProvider(provider)
        +handleRequest(query)
    }
    
    class User {
        -preferences
        +sendQuery()
        +receiveResponse()
    }
    
    User "1" -- "1..*" AIAssistant: 利用する
    AIAssistant "1" -- "1" MCPManager: データ取得
    MCPManager "1" -- "n" MCPServer: 管理する
    MCPServer "1" -- "n" DataProvider: 利用する
    
    note for AIAssistant "Claude, GPT-4などの大規模言語モデル"
    note for MCPManager "複数のMCPサーバーを統合管理"

ここでは:

  • 数値で多重度(cardinality)を表現
  • note for でクラスに説明を追加
  • 複雑なシステムの全体像を俯瞰できるよう設計

4. ガントチャートでAIプロジェクト管理

AIプロジェクトの管理にはガントチャートが効果的です。MCPプロジェクトの進行を例に見てみましょう。

gantt title MCPシステム実装プロジェクト dateFormat YYYY-MM-DD section 計画フェーズ 要件定義 :a1, 2025-04-01, 10d アーキテクチャ設計 :a2, after a1, 15d section 開発フェーズ MCPクライアント実装 :b1, after a2, 20d MCPサーバー実装 :b2, after a2, 25d データプロバイダー実装 :b3, after b2, 15d section テストフェーズ 単体テスト :c1, after b1, 10d 統合テスト :c2, after b3, 15d ユーザーテスト :c3, after c2, 10d section デプロイフェーズ ステージング環境準備 :d1, after c3, 5d 本番環境デプロイ :d2, after d1, 3d 運用監視設定 :d3, after d2, 7d
gantt
    title MCPシステム実装プロジェクト
    dateFormat  YYYY-MM-DD
    
    section 計画フェーズ
    要件定義           :a1, 2025-04-01, 10d
    アーキテクチャ設計 :a2, after a1, 15d
    
    section 開発フェーズ
    MCPクライアント実装 :b1, after a2, 20d
    MCPサーバー実装    :b2, after a2, 25d
    データプロバイダー実装 :b3, after b2, 15d
    
    section テストフェーズ
    単体テスト         :c1, after b1, 10d
    統合テスト         :c2, after b3, 15d
    ユーザーテスト     :c3, after c2, 10d
    
    section デプロイフェーズ
    ステージング環境準備 :d1, after c3, 5d
    本番環境デプロイ    :d2, after d1, 3d
    運用監視設定       :d3, after d2, 7d

ガントチャートのテクニック:

  • title でチャートのタイトルを設定
  • dateFormat で日付フォーマットを指定
  • section でフェーズを分類
  • タスクの依存関係を after で指定
  • タスクの期間を日数で指定

5. 実践エクササイズ:3Cスキルの概念図作成

最後に、「これからのAI時代を生き抜くための「3C」スキル」の概念を図解してみましょう。

flowchart LR AI((AIテクノロジー)) -->|進化| Challenge[人材に求められる\n新しいスキル] Challenge --> 3C{3Cスキル} subgraph 人間特有の価値 3C -->|1| Communication[コミュニケーション] 3C -->|2| Confidence[コンフィデンス] 3C -->|3| Consciousness[コンシャスネス] end Communication --> C1[感情・ニュアンスの理解] Communication --> C2[共感力] Communication --> C3[空気を読む力] Confidence --> F1[信頼構築能力] Confidence --> F2[一貫した行動] Confidence --> F3[透明性のある意思決定] Consciousness --> S1[目的意識] Consciousness --> S2[価値観の明確化] Consciousness --> S3[主体的コントロール] AI -.->|代替不可| 人間特有の価値 style AI fill:#f9f,stroke:#333,stroke-width:2px style 3C fill:#bbf,stroke:#33f,stroke-width:3px style Communication fill:#dfd,stroke:#3a3,stroke-width:1px style Confidence fill:#fdd,stroke:#d33,stroke-width:1px style Consciousness fill:#ddf,stroke:#33d,stroke-width:1px
flowchart LR
    AI((AIテクノロジー)) -->|進化| Challenge[人材に求められる\n新しいスキル]
    Challenge --> 3C{3Cスキル}
    
    subgraph 人間特有の価値
        3C -->|1| Communication[コミュニケーション]
        3C -->|2| Confidence[コンフィデンス]
        3C -->|3| Consciousness[コンシャスネス]
    end
    
    Communication --> C1[感情・ニュアンスの理解]
    Communication --> C2[共感力]
    Communication --> C3[空気を読む力]
    
    Confidence --> F1[信頼構築能力]
    Confidence --> F2[一貫した行動]
    Confidence --> F3[透明性のある意思決定]
    
    Consciousness --> S1[目的意識]
    Consciousness --> S2[価値観の明確化]
    Consciousness --> S3[主体的コントロール]
    
    AI -.->|代替不可| 人間特有の価値
    
    style AI fill:#f9f,stroke:#333,stroke-width:2px
    style 3C fill:#bbf,stroke:#33f,stroke-width:3px
    style Communication fill:#dfd,stroke:#3a3,stroke-width:1px
    style Confidence fill:#fdd,stroke:#d33,stroke-width:1px
    style Consciousness fill:#ddf,stroke:#33d,stroke-width:1px

この図では:

  • 中心に3Cスキルの概念を配置
  • サブグラフで「人間特有の価値」をグループ化
  • 各スキルの詳細要素を枝分かれさせて表示
  • 色とスタイルで要素の種類を区別

まとめ

今回は、Mermaidを使ってAI概念を図解する応用テクニックを紹介しました。フローチャート、シーケンス図、クラス図、ガントチャートの使い分けによって、様々な側面からAI技術を可視化できることが分かりました。

特にMCPのようなAIアーキテクチャや、3Cスキルのような概念モデルは、図解することで理解が深まります。Mermaidはその強力なツールとして活用できるでしょう。

次回の第3回では、さらに高度なMermaidの活用法として、状態遷移図やER図、インタラクティブな図解表現など、より専門的なテクニックを紹介していきます。お楽しみに!


本記事で使用したMermaidコードはすべてコピー&ペーストで利用できます。ぜひご自身のプロジェクトやドキュメントで活用してみてください。