はじめに:既存ツールの課題
AIに出力させたmermaid図を持ったmarkdownをpowerpointにして、図をpowerpoint上で調整したい!!
Markdownやquartoのqmdファイルをプレゼン資料に変換したいとき、選択肢はいくつかあります。
-
Quarto(公式):
quarto renderでPPTXを出力できます - Pandoc: Markdownから各種フォーマットに変換できます
- Marp: MarkdownをPDFやHTMLスライドに変換できます
しかし、実際に試してみると**「あとからPowerPointで編集したい」**というときに困ることがあります。
- 一部のツールはPPTXを出力しますが、図や数式が画像として埋め込まれてしまい、編集できない
- Quartoは高機能ですが、環境構築が重く手軽に使いにくい場面もある
- MermaidダイアグラムはMarkdown上で書けても、PPTX変換時にそのまま通らないことが多い
そこで、Markdown/QMDファイルを「編集可能な」PPTXに変換するPythonライブラリ qmd_to_pptx を作りました。
さらに、MCPサーバーとして起動することで、Claude DesktopなどのAIに「このMarkdownをPowerPointにして」と指示するだけでPPTXを自動生成させることもできます。コードを書かずにAIにスライド生成を任せたい方にも活用できます。
できること(概要)
-
Markdown・QMDファイルをPowerPoint形式(
.pptx)に変換 - 変換後のPPTXはPowerPointで編集可能(テキスト・表・図形はOOXML要素として出力)
- Mermaidダイアグラム 13種類対応(flowchart/sequence/gantt/class/state/ER/timeline etc.)
-
数式(インライン
$...$・ブロック$$...$$)対応 - Quartoと同じテンプレート(reference-doc)を使用可能
- テンプレート互換性チェッカー付き
- MCPサーバーとして起動し、AI(Claude Desktop等)から呼び出し可能
リポジトリ
既存ツールとの差別化ポイント
| ツール | 編集可能なPPTX | Mermaid対応 | 数式対応 | MCP対応 |
|---|---|---|---|---|
| Quarto | ✅(環境構築が重め) | △(画像変換が必要) | ✅ | ❌ |
| Pandoc | △(限定的) | ❌ | △ | ❌ |
| Marp | ❌(HTML/PDF中心) | △ | ✅ | ❌ |
| qmd_to_pptx | ✅ | ✅(13種類) | ✅ | ✅ |
出力例
全機能デモ用のQMDファイル(demo_full.qmd)から以下のような出力が得られます。
テーブル
インライン数式
ブロック数式
フローチャート
シーケンス図
ガントチャート
クラス図
ステート図
ER図
ユーザージャーニー図
円グラフ
象限チャート
要件図
gitグラフ
マインドマップ
タイムライン
インストール
Python 3.11以上と uv が必要です。
uv pip install -e .
基本的な使い方
ライブラリとして使う
from qmd_to_pptx import render
# QMD/Markdownファイルを変換
render("slides.qmd", "output.pptx")
# テンプレートPPTXを指定する場合
render("slides.qmd", "output.pptx", reference_doc="template.pptx")
ファイルパスでなくMarkdownテキスト文字列を直接渡すこともできます。
from qmd_to_pptx import render
markdown_text = """---
title: My Presentation
---
## スライド1
本文テキスト
"""
render(markdown_text, "output.pptx")
render 関数のシグネチャ
| 引数 | 型 | 説明 |
|---|---|---|
input |
str |
QMD/MarkdownファイルパスまたはMarkdownテキスト |
output |
str |
出力PPTXファイルパス |
reference_doc |
str | None |
テンプレートPPTXファイルパス(任意) |
MCPサーバーとして使う
AI(Claude Desktop等)からMarkdown→PPTX変換を呼び出せるMCPサーバーとして起動できます。
サーバー起動
# stdioモード(デフォルト)
qmd-to-pptx-mcp
# HTTPモード
qmd-to-pptx-mcp --transport http --host 0.0.0.0 --port 8000
Claude Desktopへの設定
claude_desktop_config.json に以下を追加します。
{
"mcpServers": {
"qmd_to_pptx": {
"command": "qmd-to-pptx-mcp",
"args": []
}
}
}
プロジェクトディレクトリから uv で直接起動する場合:
{
"mcpServers": {
"qmd_to_pptx": {
"command": "uv",
"args": ["run", "--directory", "/path/to/qmd_to_pptx", "qmd-to-pptx-mcp"]
}
}
}
MCPサーバーが公開するツール
| ツール名 | 説明 |
|---|---|
markdown_to_pptx |
Markdown/QMDテキストをPPTXに変換。content・output・template_id(任意)を受け取る |
list_templates |
登録済みテンプレートの一覧を返す |
QMD構文リファレンス
YAMLフロントマター
---
title: プレゼンタイトル
author: 著者名
date: 2026-03-15
format:
pptx:
incremental: false
reference-doc: template.pptx
---
| フィールド | 説明 |
|---|---|
title |
タイトルスライドに表示されるタイトル |
author |
タイトルスライドに表示される著者名 |
date |
タイトルスライドに表示される日付 |
format.pptx.incremental |
true にすると全リストをアニメーション表示 |
format.pptx.reference-doc |
テンプレートPPTXへのパス |
スライド区切りのルール
| 記法 | 動作 |
|---|---|
## 見出し |
新しいスライドの区切り(最も一般的) |
# 見出し |
セクションヘッダースライド |
--- |
空白のブランクスライド |
対応機能一覧
| 機能 | 記法 |
|---|---|
| スライド区切り |
## 見出し または --- 水平線 |
| セクションスライド |
# 見出し |
| テキスト・段落 | 通常のMarkdown段落 |
| 箇条書き・番号付きリスト |
- / 1.
|
| インクリメンタルリスト |
::: {.incremental} ブロック |
| テーブル |
| col1 | col2 | 形式 |
| コードブロック | トリプルバッククォート |
| インライン数式 | $...$ |
| ブロック数式 | $$...$$ |
| Mermaidダイアグラム |
```mermaid または ```{mermaid} ブロック |
| 2カラムレイアウト |
:::: {.columns} / ::: {.column} ブロック |
| スピーカーノート |
::: {.notes} ブロック |
| テンプレート指定 | YAMLフロントマターの reference-doc
|
Mermaid対応ダイアグラム
以下13種類のMermaidダイアグラムに対応しています。
| ダイアグラム | 対応状況 | 実装方式 |
|---|---|---|
flowchart / graph
|
✅ 対応 | mermaid-parser-py 経由 |
sequenceDiagram |
✅ 対応 | mermaid-parser-py 経由 |
classDiagram |
✅ 対応 | mermaid-parser-py 経由 |
stateDiagram / stateDiagram-v2
|
✅ 対応 | mermaid-parser-py 経由 |
erDiagram |
✅ 対応 | mermaid-parser-py 経由 |
mindmap |
✅ 対応 | mermaid-parser-py 経由 |
pie |
✅ 対応 | カスタムパーサー |
journey |
✅ 対応 | カスタムパーサー |
gantt |
✅ 対応 | カスタムパーサー |
quadrantChart |
✅ 対応 | カスタムパーサー |
requirementDiagram |
✅ 対応 | カスタムパーサー |
gitGraph |
✅ 対応 | カスタムパーサー |
timeline |
✅ 対応 | カスタムパーサー |
注意: Mermaidの仕様は継続的に更新されるため、パーサーが対応していない構文が一部存在する可能性があります。OOXMLの制約により、すべてのノード形状・スタイルが完全に再現されるわけではありません。
テンプレート機能
Quartoと同じ仕組みで、既存のPPTXファイルをテンプレートとして使用できます。
テンプレートの互換性チェック
自分のPPTXテンプレートが qmd_to_pptx に対応しているかどうかを check_template.py で確認できます。
python check_template.py my_template.pptx
チェック対象のスライドレイアウトと必要なプレースホルダーは以下の通りです。
| レイアウト名 | 用途 | 必要なプレースホルダー |
|---|---|---|
| Title Slide | タイトルスライド | 0 (title), 1 (subtitle) |
| Title and Content | 本文スライド(最も一般的) | 0 (title), 1 (content) |
| Section Header | セクション区切り(# 見出し) |
0 (title) |
| Two Content | 2カラムレイアウト | 0 (title), 1 (left), 2 (right) |
| Comparison | 2カラム(図/表混在) | 0 (title), 1 (left), 2 (right) |
| Content with Caption | テキスト+図/表混在 | 0 (title), 1 (content/figure), 2 (caption/text) |
| Blank | ブランクスライド(--- 区切り) |
— |
Two Content・Comparison・Content with Caption が存在しない場合は自動的に Title and Content へフォールバックします。
MCPサーバーでのテンプレート登録
config/templates.yaml にテンプレートを登録しておくと、MCPツール呼び出し時に template_id で指定できます。
templates:
corporate_standard:
path: /path/to/corporate_standard.pptx
description: "社内標準テンプレート"
dark_theme:
path: /path/to/dark_theme.pptx
description: "ダークテーマ"
まとめ
- Markdown/QMDファイルを編集可能なPPTXに変換するPythonライブラリ
qmd_to_pptxを作りました - Mermaidダイアグラム13種類・数式に対応しています
- Quartoと同じテンプレートを使用でき、テンプレート互換性チェッカーも用意しています
- MCPサーバーとして起動することで、AI(Claude Desktop等)から直接呼び出せます
プレゼン資料をMarkdownで書いて、PowerPointで仕上げたい方にぜひ試してみてください。
フィードバック・Issueはリポジトリにてお待ちしています!
この記事の作成過程
今回はChatGPTとの相談ログはありません。GitHub Copilotを活用してリポジトリの設計・実装・ドキュメント整備を進めました。















