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のファイル作成は、公式ヘルプで「Free、Pro、Max、Team、Enterpriseの全ユーザーがWeb・Claude Desktop・Claude Mobileで利用できる」と明記されています。デザイン寄りのデッキならClaude DesignもPPTXへの書き出しに対応しています(詳細はClaude Design(Anthropic)とは?使い方・料金・できることと2026年9月の変更点)。
Claude for PowerPointの対応環境(2016/2019・iPad・Androidは対象外)
アドイン版の要件は公式ドキュメントに移っています。動くのは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年版】を参照してください。
Claude Codeへの公式pptxスキルの導入手順
Anthropicは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での導入手順にまとめています。
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を紹介する記事は今も多くあります。しかしこのリポジトリは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で “This library strictly produces Presentations. There is no item on the development roadmap to ingest existing documents.” と回答しており、公式Wikiの未実装機能一覧にも既存プレゼン・テンプレートのインポートが載っています。「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、PptxGenJSはnpmパッケージ同梱のLICENSEがいずれもMITです。公式pptxスキルはSKILL.mdに license: Proprietary とあり、同梱のLICENSE.txtは、サービス外へのコピーの持ち出しと保持、派生物の作成、第三者への配布を禁じています。READMEも、ドキュメント系4スキルは「ソースは公開しているがオープンソースではない」と明記しています。社内向けに改造したい場合は、公式スキルを複製して手を入れるのではなく、自社用のスキルを一から書きます。書き方はClaude Skillsとは?SKILL.mdの書き方とclaude.ai・Claude Code・APIでの使い方【2026年10月】で解説しています。
生成した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ツールを参照してください。
PPTX自動生成を採用すべきでない場面
1回しか作らない資料で、生成環境の準備やレイアウト調整に直接作るより長い時間がかかるなら、手作業を選びます。同じ体裁で繰り返し作る資料ほど、初期設定の手間を回収しやすくなります。
外部から受け取ったテンプレートを読み込ませる運用も避けます。Claude for PowerPointの公式ドキュメントが、外部ファイルの隠し指示でデータ抜き取りや破壊的な操作をさせられる危険を明記しています。取引先指定の体裁が必要なら、自社で作り直したテンプレートを使います。
フォントの厳密なブランド準拠が要件の場合も注意が要ります。PptxGenJSはフォントを埋め込まないため、閲覧端末に無い書体は別の書体で表示されます。指定フォントが閲覧端末にない場合は、端末への導入か、埋め込みが許可されたフォントのPowerPointでの埋め込みを検討します。python-pptxでテンプレートを流用するだけでは、閲覧端末でのフォント再現は保証されません。社内で資料生成の仕組みをどこまでAIに任せるか決めかねている場合は、生成AI導入支援で対象業務の切り分けから相談できます。
よくある質問
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' を指定します。