前回の「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コードはすべてコピー&ペーストで利用できます。ぜひご自身のプロジェクトやドキュメントで活用してみてください。