0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIに**編集可能な**プレゼン資料を作らせるためのツールを作った

0
Last updated at Posted at 2026-03-17

はじめに:既存ツールの課題

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)から以下のような出力が得られます。

テーブル

Slide10.jpg

インライン数式

Slide13.jpg

ブロック数式

Slide15.jpg

フローチャート

Slide19.jpg

シーケンス図

Slide20.jpg

ガントチャート

Slide22.jpg

クラス図

Slide23.jpg

ステート図

Slide24.jpg

ER図

Slide27.jpg

ユーザージャーニー図

Slide28.jpg

円グラフ

Slide29.jpg

象限チャート

Slide31.jpg

要件図

Slide32.jpg

gitグラフ

Slide35.jpg

マインドマップ

Slide39.jpg

タイムライン

Slide44.jpg

インストール

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に変換。contentoutputtemplate_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 ContentComparisonContent 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を活用してリポジトリの設計・実装・ドキュメント整備を進めました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?