📐

設計図パターン比較

SVG, Mermaid, draw.io, D2, Excalidraw — どの方式で描くか

設計図を描く方式は大きく3種類に分かれます。コードベース(Mermaid, D2)はGit diffとCI/CD自動化が可能で、GUIベース(draw.io, Excalidraw)は非開発者でも編集しやすく、直接レンダリング(SVG/HTML+CSS)は完全な制御が可能ですが作成コストが高いです。

構造ダイアグラム

3つのアプローチ
📝
コードベース
Diagrams as Code
Mermaid.js
D2
PlantUML
🖱️
GUIベース
ドラッグ&ドロップ
draw.io
Excalidraw
Lucidchart / Figma
🎨
直接レンダリング
SVG / HTML+CSS
SVG直接記述
HTML + Tailwind CSS
(app56はこの方式!)
ツール別詳細比較
ツール 方式 Git Diff レイアウト制御 非開発者 CI/CD自動化
Mermaid.js テキスト 弱い 普通
D2 テキスト 強い 普通
PlantUML テキスト 普通 難しい
draw.io GUI (XML) XML 完全 制限的
Excalidraw GUI (JSON) JSON 完全
SVG直接 コード 完全 不可 手動
HTML+CSS コード 完全 不可 手動
同じ図、異なる文法
🧜 Mermaid.js GitHub READMEで直接表示
graph LR
  A[Client] -->|HTTP| B[Load Balancer]
  B --> C[App Server 1]
  B --> D[App Server 2]
  C --> E[(Database)]
  D --> E
💎 D2 レイアウト制御 + テーマ
client: Client {shape: rectangle}
lb: Load Balancer {shape: hexagon}
app1: App Server 1
app2: App Server 2
db: Database {shape: cylinder}

client -> lb: HTTP
lb -> app1
lb -> app2
app1 -> db
app2 -> db
🖼️ draw.io GUI + XML保存
ドラッグ ドロップ 接続
.drawio (XML) / .svg / .png エクスポート
VS Code拡張でエディタから直接編集!
✏️ Excalidraw 手書きスタイル
Client
--->
Server
--->
DB
JSON保存 → Git管理可能
「未完成感」→ 初期議論に最適
どのツールを使う? — 選択ガイド
GitHub READMEに<br>直接表示?
Mermaid.js
複雑なレイアウト<br>+ Git管理?
D2
非開発者も<br>編集必要?
draw.io
チームブレスト<br>/ 初期設計?
Excalidraw
Webアプリ内<br>インタラクティブ?
SVG / HTML+CSS
AIに<br>自動生成?
Mermaid / D2
Claude/GPTが即座に生成
Gitワークフロー比較
コードベース(Mermaid/D2)
# PR diffで変更点を確認
- A -->|HTTP| B
+ A -->|gRPC| B
レビュアーが変更意図を即座に把握
バイナリ(PNG/Figma)
Binary files a/diagram.png
and b/diagram.png differ
何が変わったか分からない
draw.io (XML)
&lt;!-- diff可能だが --&gt;
<mxCell value="Server"
x="340" y="180"/>
diff可能だが読みにくい
おすすめ: 公式文書 = draw.io, コードレビュー = Mermaid/D2, ブレスト = Excalidraw, Webアプリ内 = HTML+CSS

動作フロー

1

SVG直接記述: <svg>タグで図形・線・テキストを直接コーディング。完全なピクセル制御だが作成コスト最大

2

HTML+CSS(app56方式): Tailwindボックス + flexbox/gridで図を構成。レスポンシブ対応、コードと同じスタック

3

Mermaid.js: マークダウンのコードブロック内にテキストで宣言 → 自動レンダリング。GitHub/GitLab READMEで直接表示

4

D2: 宣言型ダイアグラム言語。Mermaidより優れたレイアウト制御とテーマ/スタイリング

5

draw.io(diagrams.net): GUIエディタでドラッグ&ドロップ。XML保存でGit管理可能。VS Code拡張対応

6

Excalidraw: 手書きスタイルのホワイトボード。ブレインストーミング・初期設計に最適。JSON保存でGit管理可能

メリット

  • コードベース: Git diff可能、PRレビューで変更点を確認
  • コードベース: CI/CDで自動レンダリング(mermaid-cli, d2)
  • GUIベース: 非開発者でも編集可能
  • draw.io: XML保存でGit管理可能 + VS Code拡張
  • Excalidraw: 手書きスタイルで「未完成感」— 初期議論に最適
  • AI時代: ChatGPT/ClaudeがMermaid/D2コードを即座に生成

デメリット

  • コードベース: 複雑なレイアウト制御が困難(自動配置に依存)
  • Mermaid: 大規模ダイアグラムで可読性低下
  • GUIベース: バイナリファイルはGit diff不可(Lucidchart, Figmaなど)
  • SVG直接記述: 作成コストが高く保守が困難
  • draw.io XML: 手動編集時に壊れやすい
  • Excalidraw: 公式ドキュメントにはカジュアルすぎる

ユースケース

技術ブログ / ドキュメント(Mermaid → GitHub README) ADR(Architecture Decision Record)添付(D2, Mermaid) 構成図公式ドキュメント(draw.io → SVGエクスポート) チームブレインストーミング / 初期設計(Excalidraw) Webアプリ内インタラクティブ図(SVG/HTML+CSS) CI/CD自動生成(Mermaid CLI, D2 CLI → PNG/SVG)