---
title: "Claude Codeでパワポ(PPTX)を自動生成する方法｜公式pptxスキルとpython-pptx・PptxGenJSの選び方【2026年10月】"
url: "https://www.issoh.co.jp/tech/details/10994/"
published: 2026-02-16
updated: 2026-10-16
categories: ["Claude"]
publisher: "株式会社一創"
---

# Claude Codeでパワポ(PPTX)を自動生成する方法｜公式pptxスキルとpython-pptx・PptxGenJSの選び方【2026年10月】

Claude Codeでパワポを作るなら、作成・編集・検証の手順がまとまったAnthropic公式のpptxスキルから始められます。ただしスキルの中身は、新規作成ならPptxGenJS、テンプレートありならPPTXをZIP展開してXMLを直接編集する、という2本立てになっています。どちらを通るかは「会社のテンプレート(.pptx)を使うかどうか」で決まり、PptxGenJSは仕様上テンプレートを読み込めません。本記事は、2026年7月に更新された公式スキルの現行仕様、python-pptx 1.0.2とPptxGenJS 4.0.1を実際に動かして確かめた落とし穴、ライセンス、アドイン版Claude for PowerPointの対応環境を開発者向けに整理します。

## まとめ

- **Claude Codeは公式pptxスキルで始める**。`/plugin marketplace add anthropics/skills` → `/plugin install document-skills@anthropic-agent-skills` の2行で入る。2026年7月17日の更新で.potxテンプレートと検証スクリプト `validate.py` に対応した。
- **会社テンプレートを使うならPptxGenJSは選べない**。作者が「既存ドキュメントの取り込みはロードマップに無い」と回答している。テンプレートを開いて使えるのはpython-pptx（1.0.2）か、公式スキルのXML編集経路。
- **PptxGenJSは設定オブジェクトを使い回すとファイルが壊れる**。影の設定を2つの図形で共有すると、2つ目の `blurRad` が38,100から483,870,000（12,700倍）に化けることを実行して確認した。
- **ライセンスはpython-pptxとPptxGenJSがMIT、公式pptxスキルはProprietary**。スキルは改変版の作成やコピーの保持を禁じているため、社内フォークはできない。
- **コードを書かない運用ならClaude for PowerPoint**。Pro・Max・Team・Enterpriseで一般提供され、スライドマスターと配色を読み取って生成する。PowerPoint 2016/2019の買い切り版、iPad版、Android版では動かない。

## ClaudeでPPTXを作るルートとライブラリの選び方

「Claudeでパワポ」と一口に言っても、実行場所とテンプレートの扱いがルートごとに違います。繰り返し同じ体裁で作るならClaude Code、1回きりならアドインかclaude.aiが速い、というのが大枠です。

| ルート                   | 実行場所            | 既存テンプレート    | 向く用途           | プラン              |
| --------------------- | --------------- | ----------- | -------------- | ---------------- |
| Claude for PowerPoint | PowerPointアドイン  | マスター・配色を読む  | 単発の資料・既存デッキの修正 | Pro以上            |
| claude.aiのファイル作成      | Web・デスクトップ・モバイル | 添付して指示      | たたき台の作成        | Freeを含む全プラン      |
| Claude Code＋公式pptxスキル | ターミナル           | XML編集で利用可   | 反復生成・リポジトリ管理   | Claude Code対応プラン |
| 自前スクリプト（python-pptx）  | 任意（CI含む）        | 開いてレイアウト再利用 | 定期レポート・一括生成    | 不問               |
| 自前スクリプト（PptxGenJS）    | Node・ブラウザ       | 不可          | ゼロから作る新規デッキ    | 不問               |

claude.aiのファイル作成は、[公式ヘルプ](https://support.claude.com/en/articles/12111783-create-and-edit-files-with-claude)で「Free、Pro、Max、Team、Enterpriseの全ユーザーがWeb・Claude Desktop・Claude Mobileで利用できる」と明記されています。デザイン寄りのデッキならClaude DesignもPPTXへの書き出しに対応しています（詳細は[Claude Design（Anthropic）とは？使い方・料金・できることと2026年9月の変更点](/tech/details/11838/)）。

### Claude for PowerPointの対応環境（2016/2019・iPad・Androidは対象外）

アドイン版の要件は[公式ドキュメント](https://claude.com/docs/office-agents/powerpoint)に移っています。動くのはWeb版PowerPoint、Microsoft 365サブスクリプションのWindows版（ビルド16.0.13127.20296以降）、Mac版（16.46以降）の3つです。PowerPoint 2016/2019の永続・ボリュームライセンス版、iPad版、Android版、SharedRuntimeの基準に満たない古いMicrosoft 365ビルドでは動きません。

スライドマスター・レイアウト・フォント・配色を読み取り、箇条書きを編集可能なネイティブのグラフや図に変換できます。Amazon Bedrock・Google Cloud Vertex AI・Azure AI Foundry経由なら、管理者が個別のClaudeアカウントなしで配備できます。一方で公式は、ダウンロードしたテンプレートや取引先のファイルに隠し指示が仕込まれる危険を挙げ、信頼できるファイルだけで使うよう警告しています。

### Claude Codeを選ぶ条件

「毎週の定例資料を同じ体裁で作り直す」「CSVの顧客リストから提案書を量産する」といった反復作業はClaude Codeが向きます。生成スクリプトがリポジトリに残り、レビューと差分管理ができるからです。Claude Code自体の導入は[Claude Codeとは？できること・使い方・料金：コード解析の実力と導入手順【2026年版】](/tech/details/5571/)を参照してください。

## Claude Codeへの公式pptxスキルの導入手順

Anthropicは[anthropics/skills](https://github.com/anthropics/skills)でAgent Skillsを公開しており、PPTX・DOCX・XLSX・PDFのドキュメント系4スキルは `document-skills` というプラグインにまとまっています。Claude Codeのセッション内で次の2行を実行します。

```
/plugin marketplace add anthropics/skills
/plugin install document-skills@anthropic-agent-skills
```

ターミナルからは `claude plugin marketplace add anthropics/skills` と `claude plugin install document-skills@anthropic-agent-skills` でも同じ操作ができます（Claude Code 2.1.299で `claude plugin` サブコマンドの存在を確認）。導入後は「この構成案からPPTXを作って」と頼むだけで発動します。SKILL.mdの発動条件は「.pptxまたは.potxが入力・出力のどちらかで関わるとき」で、「deck」「slides」「presentation」という語にも反応します。リポジトリの全スキルは[anthropic skillsとは？公式19スキルの中身とClaude Code・APIでの導入手順](/tech/details/17908/)にまとめています。

### 2026年7月の更新で変わった処理の流れ

pptxスキルは2026年7月17日のコミット（#1447）で.potxテンプレートに対応し、SKILL.md 1本に手順が集約されました。以前あった `unpack.py` や別ファイルのPptxGenJS解説は無くなり、作業ごとの経路は次の3つです。

| 作業               | スキルが使う方法                | 付属スクリプト                            |
| ---------------- | ----------------------- | ---------------------------------- |
| 新規作成             | PptxGenJSのスクリプトを書く      | validate.py                        |
| 既存デッキ・テンプレートから作成 | ZIP展開→slideN.xmlを編集→再圧縮 | add\_slide.py・clean.py・validate.py |
| 読み取り             | markitdownでテキスト化        | thumbnail.py（一覧画像）                 |

テンプレート経路では、`add_slide.py` でスライドを複製し、不要になったスライドや画像を `clean.py` で掃除してから中身を書き換えます。SKILL.mdは「構造の作業（追加・削除・並べ替え）を先に終えてから本文を編集する」よう指示しています。順番を逆にすると、編集済みの内容ごと複製されたり、書いたばかりのスライドが削除されたりするためです。依存は `pptxgenjs`（npm）、`markitdown[pptx]`・Pillow・defusedxml・lxml（pip）、LibreOfficeの `soffice`、Popplerの `pdftoppm` です。

### PowerPoint MCPサーバーとの違い（Office-PowerPoint-MCP-Serverはアーカイブ済み）

Claude CodeからPowerPointを操作する手段として、python-pptxベースの[Office-PowerPoint-MCP-Server](https://github.com/GongRzhe/Office-PowerPoint-MCP-Server)を紹介する記事は今も多くあります。しかしこのリポジトリは2026年3月3日に所有者がアーカイブしており、最終版はPyPIの2.0.7（2025年12月31日）です。修正が入らないMCPサーバーを新規に組み込む理由はありません。これから始めるなら公式pptxスキルを使い、ツールを足したいときは自前のスキルとして書く方が保守できます。

## python-pptxとPptxGenJSの分岐点｜既存テンプレートを読めるかどうか

2つは「PPTXを作るライブラリ」として並べて比較されがちですが、既存ファイルを開けるかどうかで用途がはっきり分かれます。実装後にテンプレートを適用できないと判明する事故は、ここを確認せずに選んだときに起きます。

### PptxGenJSの既存pptx読み込み制限（作者回答と公式Wiki）

PptxGenJS（npm最新4.0.1、ライセンスMIT）に既存プレゼンの読み込み機能はありません。作者gitbrent氏は[Issue #712](https://github.com/gitbrent/PptxGenJS/issues/712)で _“This library strictly produces Presentations. There is no item on the development roadmap to ingest existing documents.”_ と回答しており、[公式Wikiの未実装機能一覧](https://github.com/gitbrent/PptxGenJS/wiki/Unimplemented-Features)にも既存プレゼン・テンプレートのインポートが載っています。「pptxgenjs テンプレート」の答えは、読み込む方法は無く、`defineSlideMaster()` でマスターをコードに書き起こすしかない、です。

4.0.1の公開は2025年6月26日で、それ以降新しい版は出ていません。背景色・ロゴ・ページ番号位置をコードで再現する作業になるため、複雑なコーポレートテンプレートほど移植の手間が増えます。

### python-pptxでの会社テンプレートの読み込みと再利用

python-pptx（PyPI最新1.0.2、2024年8月7日公開、Python 3.8以上）は、既存の.pptxをそのまま開いてレイアウトを再利用できます。最初にレイアウトとプレースホルダの番号を列挙するのが確実です。

```
from pptx import Presentation

prs = Presentation('corporate_template.pptx')

# レイアウトの番号と名前を列挙（番号はテンプレートごとに違う）
for i, layout in enumerate(prs.slide_layouts):
    print(i, layout.name, [ph.placeholder_format.idx for ph in layout.placeholders])

# 以下はタイトルとidx=1の本文プレースホルダを持つレイアウトの例
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = '2026年上期 実績サマリー'
slide.placeholders[1].text = '売上 前年同期比 118%'

# 元のテンプレートを壊さないよう別名で保存
prs.save('report_2026H1.pptx')
```

引数なしの `Presentation()` は同梱の既定テンプレートを使い、サイズは横10インチ×縦7.5インチの**4:3**です（実行して `9144000 × 6858000` EMUを確認）。16:9にしたいなら16:9のテンプレートを渡すか、`from pptx.util import Inches` を読み込み、`prs.slide_width = Inches(13.333)` と `prs.slide_height = Inches(7.5)` を明示します。既定テンプレートには「Title Slide」から「Vertical Title and Text」まで11種のレイアウトがあり、企業テンプレートでは同じ番号が別のレイアウトを指します。

### CSVから提案書を一括生成するコード

Claude Codeに任せる反復作業の典型が、顧客リストから同じ体裁の資料を量産する処理です。次のコードは、スライドが0枚で、既定の表紙・本文レイアウトを持つ16:9のテンプレートと2行のCSVで実行し、2社分のPPTX（各2枚）が出力されることを確認しました。既存スライドを含むテンプレートでは、その枚数に2枚が追加されます。

```
import csv
from pathlib import Path
from pptx import Presentation

TEMPLATE = 'template.pptx'
OUT = Path('out')
OUT.mkdir(exist_ok=True)

# companyは重複なしとし、ファイル名に使用できない文字を事前に除く
# customers.csv の列: company,industry,date
with open('customers.csv', encoding='utf-8') as f:
    for row in csv.DictReader(f):
        prs = Presentation(TEMPLATE)          # 1社ごとにテンプレートを開き直す
        title = prs.slides.add_slide(prs.slide_layouts[0])
        title.shapes.title.text = f"{row['company']}様 ご提案書"
        title.placeholders[1].text = f"{row['industry']}向け / {row['date']}"
        body = prs.slides.add_slide(prs.slide_layouts[1])
        body.shapes.title.text = '現状の課題'
        body.placeholders[1].text = f"{row['industry']}業界で多い手作業の集計"
        prs.save(OUT / f"proposal_{row['company']}.pptx")
```

テンプレートを1社ごとに開き直すのは、1つの `Presentation` を使い回すと前の会社のスライドが残るためです。レイアウト番号 `0` と `1` は既定テンプレートの「Title Slide」「Title and Content」に当たる番号なので、会社テンプレートでは前の章の列挙結果に合わせて書き換えてください。

## 実行して確かめたPptxGenJS・python-pptxの落とし穴

公式スキルのSKILL.mdには「守らないとファイルが壊れる」注意点が並んでいます。そのうち再現できるものを、2026年10月16日に macOS・Node.js 26.5.0・pptxgenjs 4.0.1・Python 3.12・python-pptx 1.0.2・LibreOffice 26.8.1.1 で実行して確かめました。Claudeが書いたコードのレビュー項目として使えます。

### PptxGenJS：影の設定オブジェクト共有による2つ目の図形の不正値

1つの `shadow` オブジェクトを2つの `addShape()` に渡して保存し、スライドのXMLを開くと結果ははっきりしていました。1つ目の図形は `blurRad="38100"`・`dist="25400"` で正常なのに、2つ目は `blurRad="483870000"`・`dist="322580000"` でした。保存時にEMUへの換算（1ポイント＝12,700EMU）が同じオブジェクトに2回かかった値です。

```
// 既存のPptxGenJSコード内で使う例（presとslideは作成済み）
// NG: 同じオブジェクトを共有すると2つ目が12,700倍になる
const shadow = { type: 'outer', blur: 3, offset: 2, angle: 45, color: '000000', opacity: 0.4 };

// OK: 呼び出しごとに新しいオブジェクトを作る
const makeShadow = () => ({ type: 'outer', blur: 3, offset: 2, angle: 45, color: '000000', opacity: 0.4 });
slide.addShape(pres.shapes.RECTANGLE, { x: 0.5, y: 2, w: 4, h: 2, shadow: makeShadow() });
slide.addShape(pres.shapes.RECTANGLE, { x: 5.2, y: 2, w: 4, h: 2, shadow: makeShadow() });
```

ほかに、レイアウトを指定しないときのスライドは `9144000 × 5143500` EMU（10×5.625インチ）でした。13.3インチ幅のつもりで座標を書くと、図形はスライドの外に置かれ、エラーは出ません。SKILL.mdはこのほか、色に `#` や8桁のhexを使うとファイルが壊れること、`letterSpacing` は無視され `charSpacing` が正しいこと、箇条書きに「•」を直接書くと記号が二重になることを挙げています。

### python-pptx：text\_frame.textへの代入によるrunの書式消失

太字・28ポイントにした文字を `text_frame.text = '新テキスト'` で書き換えると、書式は `bold=None, size=None` に戻りました。`run.text` を書き換えた場合は太字・28ポイントが残ります。テンプレートの体裁を保ちたいなら、文字の差し替えは段落の中のrun単位で行います。

同じ検証で、SVGを `add_picture()` に渡すと `UnidentifiedImageError`、プレースホルダの無いレイアウトで `placeholders[1]` を参照すると `KeyError: 'no placeholder on this slide with idx == 1'` になりました。企業テンプレートのロゴはSVGやEMFのことが多いため、PNGに変換して挿入します。なお、PptxGenJSの `defineSlideMaster()` で作ったマスターは、python-pptxで開くと同じ名前のレイアウトとして見えました。新規作成をPptxGenJSで行い、後からpython-pptxで追記する組み合わせも可能です。

## python-pptx・PptxGenJS・公式pptxスキルのライセンス

社内ツールに組み込む前に確認されることが多い点です。ライブラリ2つはMITで、公式スキルだけ扱いが違います。

| 対象                           | ライセンス       | 商用利用               | 改変・再配布          |
| ---------------------------- | ----------- | ------------------ | --------------- |
| python-pptx 1.0.2            | MIT         | 可                  | 可（著作権表示・許諾文を保持） |
| PptxGenJS 4.0.1              | MIT         | 可                  | 可（著作権表示・許諾文を保持） |
| 公式pptxスキル                    | Proprietary | Anthropicの規約の範囲で利用 | 不可              |
| Office-PowerPoint-MCP-Server | MIT         | 可                  | 可（アーカイブ済み）      |

python-pptxは[リポジトリのLICENSE](https://github.com/scanny/python-pptx/blob/master/LICENSE)、PptxGenJSはnpmパッケージ同梱のLICENSEがいずれもMITです。公式pptxスキルはSKILL.mdに `license: Proprietary` とあり、同梱のLICENSE.txtは、サービス外へのコピーの持ち出しと保持、派生物の作成、第三者への配布を禁じています。READMEも、ドキュメント系4スキルは「ソースは公開しているがオープンソースではない」と明記しています。社内向けに改造したい場合は、公式スキルを複製して手を入れるのではなく、自社用のスキルを一から書きます。書き方は[Claude Skillsとは？SKILL.mdの書き方とclaude.ai・Claude Code・APIでの使い方【2026年10月】](/tech/details/9396/)で解説しています。

## 生成したPPTXの検証｜markitdown・validate.py・LibreOffice

AIが作ったスライドの崩れ（文字のはみ出し・図形の重なり・低コントラスト）は、コードを読んでも見つかりません。公式スキルはQAを必須工程としており、同じ手順を自前スクリプトにも移せます。

- **内容**：`markitdown out.pptx` でテキストを抽出する。markitdown 0.1.8で実行すると、スライドごとに `<!-- Slide number: 1 -->` の区切りとタイトル・本文が出力された。テンプレートの「lorem」「TODO」などの残りをgrepで探す。
- **ファイル**：`validate.py` でスキーマと関係ファイルを検査する。テンプレート由来のデッキは `--original` で元ファイルを渡し、テンプレート自体のエラーと区別する。
- **見た目**：LibreOfficeでPDF化し、Popplerの `pdftoppm` で画像にして1枚ずつ確認する。上記の検証環境では、2枚のデッキのPDF変換に初回起動込みで27秒かかった。

markitdownで本文テキストが取れれば、テキスト要素が含まれることを確認できます。画像を貼り込んだだけのPPTXからはテキストが抽出されません。ただし、図表を含む各要素の編集可能性は、PowerPointで選択して別途確認します。SKILL.mdは、PptxGenJSが書く一部のグラフXML（積み上げグラフの `dataLabelPosition: 'outEnd'` など）はpython-pptxもLibreOfficeも開けるのにPowerPointだけが拒否するとして、`validate.py` の実行を求めています。markitdown自体の使い方は[MarkItDown（マークイットダウン）とは｜各種ファイルをMarkdownに変換するMicrosoft製Pythonツール](/tech/details/4810/)を参照してください。

## PPTX自動生成を採用すべきでない場面

**1回しか作らない資料**で、生成環境の準備やレイアウト調整に直接作るより長い時間がかかるなら、手作業を選びます。同じ体裁で繰り返し作る資料ほど、初期設定の手間を回収しやすくなります。

**外部から受け取ったテンプレート**を読み込ませる運用も避けます。Claude for PowerPointの公式ドキュメントが、外部ファイルの隠し指示でデータ抜き取りや破壊的な操作をさせられる危険を明記しています。取引先指定の体裁が必要なら、自社で作り直したテンプレートを使います。

**フォントの厳密なブランド準拠が要件**の場合も注意が要ります。PptxGenJSはフォントを埋め込まないため、閲覧端末に無い書体は別の書体で表示されます。指定フォントが閲覧端末にない場合は、端末への導入か、埋め込みが許可されたフォントのPowerPointでの埋め込みを検討します。python-pptxでテンプレートを流用するだけでは、閲覧端末でのフォント再現は保証されません。社内で資料生成の仕組みをどこまでAIに任せるか決めかねている場合は、[生成AI導入支援](/service/ai/genai/)で対象業務の切り分けから相談できます。

## よくある質問

### Claude（claude.ai）の無料プランでもパワポは作れますか？

作れます。公式ヘルプは、コード実行とファイル作成をFreeを含む全プランでWeb・デスクトップ・モバイルから使えると明記しています。ただし使用量の上限はプランごとに違うため、同じ体裁の資料を何度も作るならClaude Codeでスクリプト化する方が向いています。

### PptxGenJSで既存のテンプレートを読み込めますか？

読み込めません。作者がIssue #712で既存ドキュメントの取り込みはロードマップに無いと回答し、公式Wikiの未実装機能にも載っています。`defineSlideMaster()` でマスターをコードに書き起こすか、テンプレートを開けるpython-pptx、または公式pptxスキルのXML編集経路に切り替えてください。

### python-pptxは商用利用できますか？

できます。python-pptxのライセンスはMITで、商用製品への組み込みも可能です。再配布するときは著作権表示とライセンス文を残します。PptxGenJSも同じくMITです。

### Claude Codeのpptxスキルとプラグインは何が違いますか？

スキルは作業手順と付属スクリプトのまとまり、プラグインはそれを配布する単位です。公式pptxスキルは `document-skills` プラグインに含まれており、`/plugin install document-skills@anthropic-agent-skills` で入れるとPPTX・DOCX・XLSX・PDFの4スキルがまとめて使えるようになります。

### 生成したPPTXが16:9になりません。どうすればいいですか？

python-pptxで `Presentation()` を引数なしで呼ぶと、同梱の4:3テンプレートが使われるためです。16:9のテンプレートを渡すか、`slide_width` と `slide_height` を明示してください。PptxGenJSは既定が16:9（10×5.625インチ）なので、13.3インチ幅で座標を書いているなら `pres.layout = 'LAYOUT_WIDE'` を指定します。

## 関連記事

- [anthropic skillsとは？公式19スキルの中身とClaude Code・APIでの導入手順](/tech/details/17908/)
- [Claude Skillsとは？SKILL.mdの書き方とclaude.ai・Claude Code・APIでの使い方【2026年10月】](/tech/details/9396/)
- [MarkItDown（マークイットダウン）とは｜各種ファイルをMarkdownに変換するMicrosoft製Pythonツール](/tech/details/4810/)
- [Slidevとは？Markdownでスライドを作る手順とPDF出力・公開までの実装ガイド【2026年版】](/tech/details/17632/)
- [ChatGPT for PowerPointの使い方・料金・GA後の変更点まで実務目線で解説](/tech/details/12246/)

---

出典: [Claude Codeでパワポ(PPTX)を自動生成する方法｜公式pptxスキルとpython-pptx・PptxGenJSの選び方【2026年10月】](<https://www.issoh.co.jp/tech/details/10994/>)（株式会社一創）
