
aws-diagram-mcp-serverで生成した構成図を編集可能なdraw.ioやPowerPointに変換してみた
こんにちは、カスタマーサクセス部のやまとです。
はじめに
皆さんは、AWS構成図をAIで自動生成できるMCPサーバー「aws-diagram-mcp-server」をご存知でしょうか?
このMCPサーバーは、AIエージェントからAWS構成図を手軽に生成できる便利なツールですが、出力形式がPNGに限定されるため、生成後に「ここのサービス名を変えたい」「矢印の向きを修正したい」といった編集ができません。
そこで今回は、生成されたPNG構成図をClaude Codeで解析し、draw.ioやPowerPointの編集可能なオブジェクトとして再構築できるかを検証してみました。
本検証の目標は、PNG画像から編集可能な形式への変換が実現可能かどうかを確かめることとします。
想定フロー
aws-diagram-mcp-serverとは
AWSが提供するMCPサーバーで、Pythonのdiagramsパッケージを使ったAWS構成図をAIエージェントから生成できます。
主な特徴は以下の通りです。
- AWS、Kubernetes、オンプレミスなど7種類以上のダイアグラムに対応
list_icons→get_diagram_examples→generate_diagramの3ステップで生成- Claude Codeなど、MCPに対応したAIコーディングツールから利用可能
- 出力形式はPNGのみ
なお、現在は非推奨となっており、後継のagent-pluginsのdeploy-on-awsプラグインへの移行が推奨されています。
ただし、2026年4月5日時点でdeploy-on-awsプラグインの構成図生成機能を検証したところ、deployスキルはデプロイ・コスト見積・IaC生成が中心であり、構成図を画像として生成するツールは確認できませんでした。構成図の画像生成が必要な場合は、引き続きaws-diagram-mcp-serverを使う必要があります。
実際にやってみた
動作確認環境
| 項目 | バージョン |
|---|---|
| Claude Code | 2.1.92 |
| Model | Claude Opus 4.6 |
| Python | 3.12.8 |
| python-pptx | 1.0.2 |
| OS | macOS 26.3.1 |
| 検証日 | 2026-04-05 |
共通プロセス
全ての変換は以下のフローで行います。
今回はツールの査定も目指しているので、検証できるよう構成図の構造を一度JSON定義に落とし込むことに工夫しました。これにより、1つのJSON定義から複数の出力形式に変換できます。
JSON定義の例(three_tier_architecture.json)
{
"name": "Three-Tier Web Architecture",
"groups": [
{
"id": "g_aws", "label": "AWS Cloud",
"x": 180, "y": 10, "width": 1100, "height": 640,
"children": ["g_presentation", "g_application", "g_data"],
"style": "strokeColor=#232F3E;fillColor=none;"
},
{
"id": "g_application", "label": "Application Tier",
"x": 30, "y": 60, "width": 500, "height": 330,
"children": ["n_alb", "g_asg"],
"style": "strokeColor=#ED7100;fillColor=none;"
}
// ... 他グループ省略
],
"nodes": [
{
"id": "n_alb", "label": "ALB\nLoad Balancer",
"x": 60, "y": 110, "width": 48, "height": 48,
"icon": "elb",
"style": "...shape=mxgraph.aws4.application_load_balancer;"
}
// ... 他ノード省略
],
"edges": [
{"id": "e1", "from": "n_users", "to": "n_route53", "label": "HTTPS", "style": "strokeColor=#232F3E;"},
{"id": "e5", "from": "n_alb", "to": "n_app1", "label": "HTTP", "style": "strokeColor=#ED7100;"}
// ... 他エッジ省略
]
}
aws-diagram-mcp-serverで生成した画像
今回、Claude Codeに例として以下のような構成図を依頼し、生成しました。
A: サーバーレスWebサービス

B: 三層アーキテクチャ

1. PNG → draw.io
まずは、構成図画像からdraw.ioで作図させます。
変換コマンド例:
python3 png_to_drawio.py convert ../input/three_tier_architecture.json ../output/three_tier_architecture.drawio
png_to_drawio.py(抜粋)
from drawio_builder import Diagram
def json_to_drawio(json_path: str, output_path: str | None = None) -> Path:
"""JSON定義ファイルからdrawioファイルを生成する"""
data = json.loads(Path(json_path).read_text(encoding="utf-8"))
diagram = Diagram(name=data.get("name", "diagram"))
# グループ追加
for g in data.get("groups", []):
diagram.add_group(
group_id=g["id"], label=g["label"],
x=g.get("x", 0), y=g.get("y", 0),
width=g.get("width", 300), height=g.get("height", 200),
children=g.get("children", []), style=g.get("style", ""),
)
# ノード追加
for n in data.get("nodes", []):
diagram.add_node(
node_id=n["id"], label=n["label"],
x=n.get("x", 0), y=n.get("y", 0),
width=n.get("width", 120), height=n.get("height", 60),
shape_type=n.get("shape", "rectangle"), style=n.get("style", ""),
)
# エッジ追加
for e in data.get("edges", []):
diagram.add_edge(
edge_id=e["id"], source_id=e["from"], target_id=e["to"],
label=e.get("label", ""), style=e.get("style", ""),
)
return diagram.save(str(output_path))
結果: 成功
A: サーバーレスWebサービス

B: 三層アーキテクチャ

各ノードがdraw.io標準のシェイプにサービス名ラベル付きで描画されています。グループ(VPC、サブネットなど)もコンテナとして構成されるため、中のノードをドラッグするとグループごと移動できます。
感想:
全体的に期待通りの出力ですが、一部アイコンや文字、矢印が被っている点が気になりました。
しかし、追加のアイコンファイルやライブラリは不要なので、draw.ioで開くだけですぐ編集できます。
2. PNG → PowerPoint
続いてPowerPointに展開させます。
こちらでは、AWS公式アーキテクチャアイコンのPNG画像をダウンロードし、python-pptxのadd_pictureで配置してみました。
変換コマンド:
python3 pptx_builder.py ../input/three_tier_architecture.json ../output/three_tier_architecture.pptx
pptx_builder.py(抜粋)
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.shapes import MSO_SHAPE, MSO_CONNECTOR_TYPE
# AWSアイコンのローカルパス(事前ダウンロードが必要)
AWS_ICON_BASE = Path("<AWS公式アイコンの格納先>")
# サービス名 → アイコンファイルパスのマッピング
ICON_MAP = {
"lambda": ("Arch_Compute", "Arch_AWS-Lambda_64.png"),
"ec2": ("Arch_Compute", "Arch_Amazon-EC2_64.png"),
"rds": ("Arch_Database", "Arch_Amazon-RDS_64.png"),
# ... 約30サービス対応
}
def build_pptx_from_json(json_path: str, output_path: str | None = None) -> Path:
"""JSON定義からAWS公式アイコン付きPowerPointを生成する"""
data = json.loads(Path(json_path).read_text(encoding="utf-8"))
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])
# グループ描画(AWSカラーの角丸矩形)
for g in data.get("groups", []):
shape = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, ...)
# グループラベルからAWSカラーを自動推定
fill_color, border_color = _detect_group_color(g)
# ノード描画(AWS公式アイコン + ラベル)
for n in data.get("nodes", []):
icon_path = _resolve_icon_path(n.get("icon", ""))
if icon_path:
slide.shapes.add_picture(str(icon_path), left, top, icon_size, icon_size)
# ラベルテキストボックス(アイコン下部)
lbl = slide.shapes.add_textbox(label_left, label_top, label_w, label_h)
# エッジ描画(エルボーコネクタ + 透明アンカー)
for e in data.get("edges", []):
connector = slide.shapes.add_connector(
MSO_CONNECTOR_TYPE.ELBOW, ...)
connector.begin_connect(src_anchor, 0)
connector.end_connect(tgt_anchor, 0)
結果: 成功
A: サーバーレスWebサービス

B: 三層アーキテクチャ

感想:
AWS公式アイコンが画像として配置され、デザイン的には視認性が高いです。コネクタがシェイプに接続されているため、ノードを移動すると接続線も追従します。
ただし、前述の通り、事前にAWS公式アイコンをローカルにダウンロードしておく必要があります。
また、draw.io以上に矢印や文字と図形が被っている点に課題が残りました。
これらの点がネックです。
そこで、生成結果からレイアウト改善を試みてJSON定義の座標間隔やグループパディングを調整しました。しかし根本的な改善には至りませんでした。原因はpython-pptxのエルボーコネクタであり、コネクタは「2点間の最短L字ルート」で描画されるため、間にグループ枠やノードがあっても迂回できません。
これはpython-pptxの仕様上の制約のため、JSON座標の調整では解決できませんでした。
一方でdraw.ioは、エッジルーティングエンジンを内蔵しているため、同じJSON定義から変換してもコネクタが自動的に迂回されます。
3. PNG → Google Slides
併せて、GWS CLI経由でGoogle Slides APIを使った変換も試みました。
参考: Google Workspace CLI (gws) がローンチ!Claude Codeと一緒に試してみた
slides_builder.py(抜粋)
import subprocess
def _run_gws(args: list[str], json_body: dict | None = None) -> dict:
"""GWS CLIを実行する"""
cmd = ["gws"] + args
if json_body:
cmd += ["--json", json.dumps(json_body)]
result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
if result.returncode != 0:
raise RuntimeError(f"gws error: {result.stderr}")
return json.loads(result.stdout) if result.stdout.strip() else {}
def build_slides_from_json(json_path: str) -> str:
"""JSON定義からGoogle Slidesに構成図を生成する"""
# プレゼンテーション作成
pres = _run_gws(["slides", "presentations", "create"],
json_body={"title": pres_title})
# ノード配置(AWSカラーシェイプ + サービス名)
# 組織ポリシーでpublishOutが禁止のため、Slides APIのcreateImageは
# 公開URLが必要だが使用できない。AWSカラーシェイプで構成する。
for n in data.get("nodes", []):
requests.append({"createShape": {
"shapeType": "ROUND_RECTANGLE", ...}})
# バッチ更新で一括配置
_run_gws(["slides", "presentations", "batchUpdate", ...],
json_body={"requests": requests})
結果: 失敗
B: 三層アーキテクチャ

すべてのオブジェクトが重なってしまい、構成図とは言いがたい結果となりました。
それだけでなく、AWS公式アイコン画像の配置にも制約がありました。Google Slides APIのcreateImageは公開アクセス可能なURLを要求するため、組織ポリシーで外部共有(publishOut)が禁止されている環境では、Google Driveにアップロードしたアイコン画像をSlides APIから参照できません。
Google Slidesで構成図を利用したい場合は、draw.ioやPowerPointの形式で生成したファイルをインポートする方がアイコン付きの構成図を得られます。こういった運用の方が効率的ですね。
比較
| 項目 | draw.io | PowerPoint |
|---|---|---|
| AWSアイコン | ラベル付き汎用シェイプ(備え付け) | 公式PNG画像(要ダウンロード) |
| 追加コスト | 無料 | デスクトップ版はライセンス必要 |
| 事前準備 | なし | AWS公式アイコンのダウンロード |
| グループ操作 | コンテナとしてネスト可能 | シェイプのグループ化 |
| ファイルサイズ | 約2-10KB(XML) | 約30-300KB |
| Git管理 | XMLのためdiff可能 | バイナリのためdiff不可 |
| セッション負荷(体感) | 低(XMLのみ生成) | 高(アイコン画像読み込みあり) |
| コネクタの自動迂回 | あり(draw.io内蔵) | なし(最短L字ルート固定) |
CLAUDE.md
このプロジェクトで使用したCLAUDE.mdを掲載します。
CLAUDE.mdにJSON定義フォーマットやアイコンキー一覧を記載しておくことで、Claude Codeが構成図の構造を一貫した形式で出力できるようになります。
CLAUDE.md
# Diagram Converter プロジェクト
## 概要
構成図のJSON定義から、編集可能なオブジェクト + AWS公式アイコンで
PowerPoint / draw.io / Google Slides に構成図を生成するツール群。
画像貼り付けは禁止。全て個別に編集・移動可能なオブジェクトとして構成する。
## 技術スタック
- Python 3.12
- python-pptx: 編集可能なPowerPointシェイプ + AWS公式アイコン画像配置
- Pillow: 画像処理
- xml.etree: draw.io XML生成
- GWS CLI (gws): Google Slides API操作
## 変換フロー(Claude Code経由)
1. MCPでPNG構成図を生成、または既存PNGを Read で読み取る
2. 画像内の構造(ノード、接続、グループ)を分析する
3. JSON定義ファイルを input/ に生成する
4. JSON定義から 3形式のいずれかに変換する
## JSON定義フォーマット
(ノード、エッジ、グループの定義)
## iconキー一覧
lambda, ec2, fargate, ecs, eks, api_gateway, cloudfront, route53,
elb, vpc, dynamodb, rds, aurora, elasticache, s3, sqs, sns,
eventbridge, step_functions, cognito, iam, waf, kms, bedrock ...
## draw.io用shape
rectangle, cylinder, cloud, diamond, ellipse, hexagon, document,
process, parallelogram, actor
## 規約
- 画像貼り付け禁止。必ず編集可能なオブジェクト + 公式アイコンで生成すること
さいごに
今回の検証では、PNG画像からClaude Codeで構造を解析し、編集可能な形式へ変換するというプロセス自体は実現可能であることが確認できました。
ただし、自動生成の段階ではどの出力形式でもコネクタの重なりや配置の崩れが残るため、完成度の高い構成図を得るには生成後の手動調整が前提となります。
今回の結果から、draw.ioを起点とするワークフローが実用的だと感じました。draw.ioにはPowerPointやPNG形式へのエクスポート機能があるため、draw.ioで構成図を仕上げた後、必要に応じて他の形式に展開できます。Google Slidesに取り込みたい場合も、エクスポートしたPowerPointファイルをインポートする方法が使えます。
今回のゴールは「完璧な構成図の自動生成」ではなく「手動調整のベースになる編集可能なファイルを得ること」です。その観点では、draw.ioが一番バランスが良かったです。
同じようにMCPで生成したPNG構成図の編集に困っている方がいたら、ぜひ試してみてください。
参考資料
- aws-diagram-mcp-server(AWS Labs)
- agent-plugins(AWS Labs)
- AWS アーキテクチャアイコン
- GWS CLI(GitHub)
- Google Workspace CLI (gws) がローンチ!Claude Codeと一緒に試してみた
AWS運用エンジニア(24×365)募集
クラウド運用チームで AWS エンジニアを募集中!クラウドに関する Web システムや基幹システムの運用保守経験をお持ちの方を歓迎します。先輩エンジニアによる丁寧な OJT 研修、AWS 資格取得支援など充実のサポート体制で、AWS未経験からでも安心してAWS運用エンジニアとしてのキャリアをスタートできます。
▼ 詳細・応募はこちら
※ カジュアル面談も実施中!まずは話を聞いてみたいという方も大歓迎です。
AWS運用代行・サーバー監視のご案内
クラスメソッド マネージドサービスは、AWS国内支援実績No.1のクラスメソッドが提供する、クラウド特有の対応やクラウド技術者の不足に課題をお持ちのお客様向けのAWS運用トータル支援サービスです。
監視や運用支援にとどまらず、お客様のクラウド利用を最適化し日々の負担を最小化することで、お客様のビジネス効果の最大化を支援します。
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。








