Claude CodeでPPTXを自動生成する方法|公式pptxスキルとpython-pptx・PptxGenJSの選び方
Claudeでパワポを作る手段は、いま3つに分かれています。PowerPointアドインの「Claude in PowerPoint」、Claude Codeに公式のpptxスキルを入れる方法、そして自分でpython-pptxやPptxGenJSのスクリプトを書かせる方法です。分かれ道になるのは「会社のテンプレート(.pptx)を使うかどうか」で、ここを間違えるとライブラリの仕様上どうやってもテンプレートが反映できません。本記事は、公式ドキュメントとライブラリの実装仕様をもとに、選定基準・導入コマンド・つまずきポイントを開発者向けに整理します。
まとめ
- 会社テンプレート(.pptx)を使うならPptxGenJSは選べない。作者が公式に「このライブラリはプレゼンテーションの生成に特化しており、既存ドキュメントの取り込みはロードマップにない」と回答している(PptxGenJS Issue #712)。
- テンプレート流用はpython-pptx(1.0.2)。
Presentation('template.pptx')で既存ファイルを開き、そのslide_layoutsを使ってadd_slide()できる。 - Claude Codeなら公式pptxスキルを入れるのが最短。
/plugin marketplace add anthropics/skills→/plugin install document-skills@anthropic-agent-skillsで導入する。テンプレートがあれば新規作成でもOOXMLのunpack/repack経路、テンプレートが無いときだけPptxGenJSでコード生成する。 - コードを書かない運用なら Claude in PowerPoint。Pro・Max・Team・Enterpriseで利用でき、スライドマスター・レイアウト・フォント・配色を読み取ってブランド準拠のスライドを生成する。Freeプラン、PowerPoint 2016/2019、iPad・Androidは対象外。
- 生成物は必ず目視検証する。公式スキル自体が、LibreOfficeでPDF化→画像化して文字のはみ出しや重なりを確認する手順を組み込んでいる。
ClaudeでPPTXを作る3つのルートと選定基準
同じ「Claudeでパワポ」でも、実行場所とテンプレートの扱いが違います。先に選定基準を確定させてから手を動かすのが早道です。
| ルート | 実行場所 | 既存テンプレート | 向く用途 | 必要プラン |
|---|---|---|---|---|
| Claude in PowerPoint | PowerPointアドイン | 読み取り可(マスター・配色) | 単発の資料作成 | Pro / Max / Team / Enterprise |
| Claude Code+公式pptxスキル | ターミナル | unpack/repackで編集可 | 反復生成・自動化 | Claude Code利用プラン |
| 自前スクリプト(python-pptx) | 任意(CI含む) | 開いて再利用可 | 定期レポート・バッチ | 不問(APIまたは手書き) |
| 自前スクリプト(PptxGenJS 4.0.1) | Node / ブラウザ | 不可(コードで再現) | ゼロから作る新規デッキ | 不問 |
Claude in PowerPointの動作要件(2016/2019は対象外)
アドイン版は公式サポート記事が要件を明示しています。Web版PowerPointに加え、WindowsはMicrosoft 365サブスクリプション(ビルド16.0.13127.20296以上)、Macはバージョン16.46以上が必要です。買い切りのPowerPoint 2016/2019、iPad版、Android版では動きません。これらの環境ではアドイン自体が表示されません。
機能面では、Claudeがスライドマスター・レイアウト・フォント・カラースキームを読み取り、テンプレートに沿ったスライドを生成します。箇条書きをPowerPointネイティブの編集可能な図表へ変換する機能つきです。ただし公式は、外部から入手したテンプレートやファイルの使用をプロンプトインジェクションのリスクとして非推奨としています。取引先から送られてきたテンプレートをそのまま食わせる運用は避けるべきです。
Claude Codeを選ぶ条件
「毎週の定例資料を同じ体裁で作り直す」「議事録やCSVからデッキを量産する」ような反復作業は、アドインよりClaude Codeが向きます。生成ロジックがスクリプトとしてリポジトリに残るため、レビューもバージョン管理もできるからです。Claude Code自体の基本はClaude Codeとは?できること・使い方・料金とコード解析の実力【2026年版】にまとめています。
Claude Codeへの公式pptxスキル導入手順
Anthropicはanthropics/skillsでAgent Skillsを公開しており、DOCX・PDF・PPTX・XLSXのドキュメント系スキルが含まれます。Claude Codeからはプラグインマーケットプレイスとして登録します。
/plugin marketplace add anthropics/skills
/plugin install document-skills@anthropic-agent-skills
導入後は「この構成案からPPTXを作って」「このデッキの本文を抽出して」と依頼するだけで、スキルが自動的に読み込まれます。スキルの発動条件はSKILL.mdに “Use this skill any time a .pptx file is involved in any way — as input, output, or both” と定義されており、入力・出力のどちらでも.pptxが絡めば起動します。
注意点として、ドキュメント系スキルのライセンスはApache 2.0ではなくソース公開(source-available)であってオープンソースではありません。SKILL.mdのライセンス表記は Proprietary で、同梱のLICENSE.txtはAnthropicのServices外での複製・派生物の作成を明示的に禁止しています。社内フォークや改変しての再配布はできないため、利用前に原文を読んでください。リポジトリ自体も、実装はデモ・教育目的の例示であり、重要な業務で頼る前に十分テストするよう明記しています。
スキルが内部で使う3つのワークフロー
公式pptxスキルは、要求に応じて処理系を切り替えます。ここを理解しておくと、生成が崩れたときにどこを直せばいいかが分かります。
- 読み取り:
python -m markitdown presentation.pptxでテキストを抽出し、scripts/thumbnail.pyでスライドのサムネイルを生成して全体像を掴む。 - テンプレートありの編集・新規作成:
scripts/office/unpack.pyで.pptxをOOXMLのXMLに展開し、スライドを操作してから再パックする。既存デッキの修正だけでなく、テンプレートを土台に新しいデッキを起こす場合もこの経路になる。 - ゼロからの新規作成:テンプレートが無い場合に限りPptxGenJSでコード生成する。
スキルはmarkitdown[pptx]・Pillow・pptxgenjsに加え、PDF変換のLibreOffice(soffice)とPDFの画像化に使うPoppler(pdftoppm)を前提にします。LibreOfficeが入っていない環境では、後述の目視検証ステップが丸ごと落ちます。スキルはLibreOfficeを scripts/office/soffice.py というラッパー経由で呼ぶため、導入時に soffice へパスが通っているかを確認しておいてください。
python-pptxとPptxGenJSの分岐点|既存pptxを読めるかどうか
両者は「PPTXを作るライブラリ」として並べて比較されますが、既存ファイルの扱いという一点で用途が完全に分かれます。ここを取り違えると、実装が終わってからテンプレートを適用できないと判明します。
PptxGenJSは既存pptxを読み込めない(作者の公式回答)
PptxGenJS(npm最新4.0.1)に既存プレゼンの取り込み機能はありません。作者gitbrent氏はIssue #712で “This library strictly produces Presentations. There is no item on the development roadmap to ingest existing documents.” と回答しています。つまり「会社のテンプレート.pptxを読み込んで、そこにスライドを足す」ことは仕様上できません。
テンプレートの体裁を守りたい場合は、defineSlideMaster() でマスターをコード側に再現するしかありません。背景色・プレースホルダ位置・ロゴ画像をコードで定義し直す作業になるため、複雑なコーポレートテンプレートほど移植コストが跳ね上がります。「pptxgenjs テンプレート」で探してたどり着く答えは、残念ながら「読み込む方法は無く、書き起こすしかない」です。
python-pptxはテンプレートを開いてレイアウトを再利用できる
python-pptx(PyPI最新1.0.2、2024年8月7日リリース、Python 3.8以上)は、既存の.pptxをそのまま開けます。テンプレートのスライドレイアウトを指定して新規スライドを追加し、別名で保存する流れです。
from pptx import Presentation
from pptx.util import Inches
# 会社テンプレートをそのまま開く(レイアウト・配色・フォントを継承)
prs = Presentation('corporate_template.pptx')
# テンプレートを使わない場合はここで明示的に16:9を指定する
# prs.slide_width, prs.slide_height = Inches(13.333), Inches(7.5)
# テンプレート側のレイアウトを再利用する(index はテンプレート依存)
layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(layout)
slide.shapes.title.text = '2026年上期 実績サマリー'
body = slide.placeholders[1].text_frame
body.text = '売上: 前年同期比 118%'
p = body.add_paragraph()
p.text = '解約率: 1.2%(前年 1.9%)'
p.level = 1
# 元ファイルを壊さないよう別名で保存する
prs.save('report_2026H1.pptx')
slide_layouts のインデックスはテンプレートごとに異なります。Claude Codeに任せる場合も、まず for i, l in enumerate(prs.slide_layouts): print(i, l.name) でレイアウト名を列挙させ、その出力を見てから本番コードを書かせると事故りません。プレースホルダの idx も同じくテンプレート依存で、企業テンプレートでは placeholders[1] が存在せず KeyError になるのが典型的な最初のつまずきです。for ph in slide.placeholders: print(ph.placeholder_format.idx, ph.name) も併せて列挙させてください。
もう一つの落とし穴が画面比です。Presentation() を引数なしで呼ぶと、パッケージ同梱のデフォルトテンプレート(4:3)が使われます。16:9で出したいのに4:3になるのはこれが原因で、テンプレートを渡すか prs.slide_width = Inches(13.333) と prs.slide_height = Inches(7.5) を明示する必要があります。
PptxGenJSでゼロから作るときの必須ルール
テンプレートが不要な新規デッキなら、公式スキルもPptxGenJSを使います。ただし公式スキルのpptxgenjs.mdには「守らないとファイルが壊れる」ルールがあり、Claudeが書いたコードでも見落としは起こりがちです。レビュー時のチェック項目として使えます。
LAYOUT_16x9(10インチ×5.625インチ)はPptxGenJSの既定レイアウト。座標系がこの寸法基準になるため、pres.layout = 'LAYOUT_16x9'と明示しておく。- 色指定のhexに
#を付けない(color: "FF0000"が正)。8桁hexで不透明度を表現せず、opacityプロパティを使う(8桁hexはファイル破損の原因)。 addShape・addTextなどの要素追加呼び出しの間で、オプションオブジェクト(影の指定など)を使い回さない。PptxGenJSが値をEMUに変換してオブジェクトをその場で書き換えるため、2つ目のシェイプが壊れる。const makeShadow = () => ({ ... })のように毎回新しいオブジェクトを生成する。- 文字間隔は
letterSpacingではなくcharSpacing(前者は黙って無視される)。箇条書きはbullet: trueを使い、中黒などのUnicode記号を自前で書かない(記号が二重に付く)。
生成後の品質チェック自動化|markitdownとLibreOffice・Poppler
AIが作ったスライドは、テキストがプレースホルダからはみ出す、図形が重なる、コントラストが足りないといった見た目の破綻がコード上は検出できない形で起きます。公式スキルがQA手順を持っているのはこのためで、同じ手順を自前スクリプトにも移植できます。
- 内容の検証:
markitdownでテキストを抽出し、入力した構成案と突き合わせる(項目の欠落・重複の検出)。 - 見た目の検証:LibreOfficeでPDFに変換し、PopplerでJPEG化してから、文字のはみ出し・要素の重なり・コントラスト・整列を画像として確認する。
Claude Codeに任せるなら、この2ステップを1コマンドにまとめて実行させ、画像を読ませて指摘させるところまでを1サイクルにします。反復タスクの型としては、コードレビュー系コマンドの運用と同じ発想です(参考:Claude Code 2.1.63の/simplifyと/batchが開発現場にもたらす実務インパクト)。
PPTX自動生成を採用すべきでない場面
すべての資料作成をAIに寄せるのは失敗します。次の条件に当てはまるなら、自動生成は導入しないほうが速く、安全です。
1回しか作らない資料は手作業が勝ちます。テンプレートのレイアウトインデックスを調べ、プロンプトを詰め、崩れを直す時間を合計すると、PowerPointで直接作るより長くかかります。自動化が効くのは、同じ体裁で繰り返し作る資料だけです。
外部から受け取ったテンプレートを読み込ませる運用も避けます。公式サポートがプロンプトインジェクションのリスクを理由に非推奨としており、スライドマスター内のテキストに仕込まれた指示をモデルが拾う余地があるためです。取引先指定の体裁が必要なら、自社で作り直したテンプレートを使います。
ロゴやフォントの厳密なブランド準拠が要件の場合も要注意です。PptxGenJSはフォントを埋め込めないため、閲覧端末にフォントが無ければ別の書体で表示されます。指定フォントが社内標準でない場合、python-pptxでテンプレートを流用する方式に寄せるのが確実です。
なお、旧版の本記事は特定モデル(Opus 4.6世代)の機能を前提に書いていましたが、ここで扱う手順はモデルの版に依存しません。スキルとライブラリ側の仕様で決まる部分がほとんどで、モデルが新しくなっても選定基準は変わりません。利用可能な最新モデルとプランごとの上限は公式ページで確認してください。
よくある質問
Claude(claude.ai)単体でもパワポは作れますか
作れます。コード実行とファイル作成の機能によって.pptxファイルを直接生成でき、生成物をダウンロードできます。ただし実行回数はプランごとの使用量上限に依存するため(上限は公式ページで確認してください)、同じ体裁の資料を繰り返し作るならClaude Codeやアドイン側に寄せるほうが現実的です。
Claude in PowerPointは無料プランで使えますか
使えません。対応プランはPro・Max・Team・Enterpriseです。加えて、PowerPoint 2016/2019といった買い切り版、iPad版、Android版も対象外で、Web版PowerPointかMicrosoft 365のデスクトップ版(Windowsはビルド16.0.13127.20296以上、Macは16.46以上)が必要です。
PptxGenJSで会社のテンプレートを読み込むことはできますか
できません。作者がIssue #712で、既存ドキュメントの取り込みは開発ロードマップに無いと明言しています。defineSlideMaster() でマスターをコードとして書き起こすか、テンプレートを読めるpython-pptx、あるいは公式pptxスキルのunpack/repack方式に切り替えてください。
python-pptxとPptxGenJSはどちらを選ぶべきですか
判断軸はテンプレートの有無と実行環境の2つだけです。既存の.pptxテンプレートを流用するならpython-pptx(1.0.2)、テンプレート無しでゼロから作る・Node/ブラウザで動かすならPptxGenJS(4.0.1)。パフォーマンスや機能量ではなく、この分岐で決まります。
生成したPPTXが16:9になりません
python-pptxで Presentation() を引数なしで呼ぶと、同梱のデフォルトテンプレート(4:3)が使われるためです。16:9のテンプレートを引数で渡すか、slide_width と slide_height を明示的に設定してください。PptxGenJS側では LAYOUT_16x9 を指定します。