pptx-generator について
pptx-generatorは、JSON仕様からプレゼンテーションを作成したり、既存のPPTXテンプレートを編集したりするDenoベースのスキルです。テキスト置換、スライドの選択と結合、テンプレートのテキスト抽出やプレビューに対応します。
主な機能
- 01JSON仕様からPPTXを生成
- 02既存テンプレート内のテキストを置換
- 03テンプレートのスライドを選択・結合
- 04テンプレートのテキスト一覧を抽出
- 05スライド情報とプレビューを生成
活用シーン
- 01データに基づくプレゼンテーションの作成
- 02ブランドテンプレートへのレポート内容の反映
- 03承認済みスライドを組み合わせた資料の作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jwynia/ agent-skills --skill pptx-generatorインストール後、Claude Code で/pptx-generatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/slide-spec-schema.jsonreferences/pptxgenjs-api.mdtemplate-workflow.mdscripts/analyze-template.tsgenerate-from-template.tsgenerate-scratch.tsgenerate-thumbnails.ts詳細
PPTX ジェネレーター
このスキルを使用する場面
次のような場合にこのスキルを使用します:
- データや仕様からプログラムでプレゼンテーションを作成する場合
- 企業のスタイルを維持しながら、ブランドテンプレートに動的なコンテンツを追加する場合
- 分析のために、既存の PPTX ファイルからテキストや構造を抽出する場合
- 承認済みテンプレートのライブラリからスライドを組み合わせる場合
- プレゼンテーション生成のワークフローを自動化する場合
次のような場合には、このスキルを使用しないでください:
- プレゼンテーションを開いて表示したい場合(PowerPoint またはビューアーを使用してください)
- 複雑なアニメーションや画面切り替えが必要な場合(サポートは限定的です)
- 古い .ppt 形式を扱う場合(PPTX のみ対応)
前提条件
- Deno がインストールされていること(https://deno.land/)
- テンプレートを使用する操作では、入力 PPTX ファイルがあること
- ゼロから生成する場合は、JSON 仕様があること
クイックスタート
2 つの操作モード
-
テンプレートモード:既存のブランドテンプレートを変更します
- 分析して置換:
{{PLACEHOLDERS}}を見つけ、コンテンツに置き換えます - スライドライブラリ:テンプレートライブラリからスライドを選択して組み合わせます
- 分析して置換:
-
ゼロから作成するモード:JSON 仕様を使用して、プレゼンテーションを一から作成します
手順
モード 1:テンプレートベースの生成
ステップ 1a:テンプレートを分析する
置換可能な項目を把握するために、テキストの一覧を抽出します:
deno run --allow-read scripts/analyze-template.ts corporate-template.pptx > inventory.json
出力(inventory.json):
{
"filename": "corporate-template.pptx",
"slideCount": 10,
"textElements": [
{
"slideNumber": 1,
"shapeId": "shape-2",
"shapeName": "Title 1",
"placeholderType": "ctrTitle",
"position": { "x": 1.5, "y": 2.0, "w": 7.0, "h": 1.2 },
"paragraphs": [
{ "text": "{{TITLE}}", "fontSize": 44, "bold": true }
]
}
]
}
ステップ 1b:置換仕様を作成する
replacements.json を作成します:
{
"textReplacements": [
{ "tag": "{{TITLE}}", "value": "Q4 2024 Results" },
{ "tag": "{{SUBTITLE}}", "value": "Financial Overview" },
{ "tag": "{{DATE}}", "value": "December 2024" },
{ "tag": "{{AUTHOR}}", "value": "Finance Team", "slideNumbers": [1] }
]
}
ステップ 1c:出力を生成する
deno run --allow-read --allow-write scripts/generate-from-template.ts \
corporate-template.pptx replacements.json output.pptx
モード 1(別の方法):スライドライブラリ
ステップ 2a:テンプレートのスライドをプレビューする
利用可能なスライドの情報を取得します:
deno run --allow-read scripts/generate-thumbnails.ts slide-library.pptx
視覚的にプレビューするには、サムネイルを抽出します:
deno run --allow-read --allow-write scripts/generate-thumbnails.ts \
slide-library.pptx --extract-thumb --output-dir ./previews
ステップ 2b:スライドを選択して組み合わせる
selections.json を作成します:
{
"slideSelections": [
{ "slideNumber": 1 },
{ "slideNumber": 5 },
{ "slideNumber": 12 },
{ "slideNumber": 3 }
],
"textReplacements": [
{ "tag": "{{TITLE}}", "value": "Custom Presentation" }
]
}
ステップ 2c:組み合わせたプレゼンテーションを生成する
deno run --allow-read --allow-write scripts/generate-from-template.ts \
slide-library.pptx selections.json custom-deck.pptx
モード 2:ゼロからの生成
ステップ 3a:仕様を作成する
spec.json を作成します:
{
"title": "Product Launch 2025",
"author": "Marketing Team",
"slides": [
{
"background": { "color": "003366" },
"elements": [
{
"type": "text",
"x": 1, "y": 2.5, "w": 8, "h": 1.5,
"options": {
"text": "Product Launch 2025",
"fontSize": 44,
"bold": true,
"color": "FFFFFF",
"align": "center"
}
},
{
"type": "text",
"x": 1, "y": 4, "w": 8, "h": 0.5,
"options": {
"text": "Revolutionizing the Industry",
"fontSize": 24,
"color": "CCCCCC",
"align": "center"
}
}
]
},
{
"elements": [
{
"type": "text",
"x": 0.5, "y": 0.5, "w": 9, "h": 0.7,
"options": {
"text": "Key Features",
"fontSize": 32,
"bold": true,
"color": "003366"
}
},
{
"type": "table",
"x": 0.5, "y": 1.5, "w": 9, "h": 3,
"options": {
"rows": [
["Feature", "Description", "Benefit"],
["Speed", "2x faster processing", "Save time"],
["Quality", "HD output", "Better results"],
["Integration", "Works with existing tools", "Easy adoption"]
],
"border": { "pt": 1, "color": "CCCCCC" }
}
}
]
}
]
}
ステップ 3b:プレゼンテーションを生成する
deno run --allow-read --allow-write scripts/generate-scratch.ts spec.json output.pptx
例
例 1:企業の四半期レポート
シナリオ:ブランドテンプレートから四半期レポートを生成します。
手順:
# 1. Analyze template for replaceable content
deno run --allow-read scripts/analyze-template.ts quarterly-template.pptx --pretty
# 2. Create replacements.json with Q4 data
# 3. Generate report
deno run --allow-read --allow-write scripts/generate-from-template.ts \
quarterly-template.pptx replacements.json Q4-2024-Report.pptx
例 2:スライドライブラリからカスタムのピッチデッキを作成
シナリオ:特定のクライアントへの提案に合わせて、承認済みのスライドを組み合わせます。
手順:
# 1. View available slides
deno run --allow-read scripts/generate-thumbnails.ts pitch-library.pptx
# 2. Create selections.json picking slides 1, 3, 7, 12, 15
# 3. Generate custom deck
deno run --allow-read --allow-write scripts/generate-from-template.ts \
pitch-library.pptx selections.json acme-pitch.pptx
例 3:データ駆動型プレゼンテーション
シナリオ:JSON データ(例:API のレスポンス)からプレゼンテーションを生成します。
手順:
# 1. Transform your data into spec.json format
# 2. Generate presentation
deno run --allow-read --allow-write scripts/generate-scratch.ts data-spec.json report.pptx
スクリプトリファレンス
| スクリプト | 目的 | 権限 |
|---|---|---|
analyze-template.ts | PPTX からテキストの一覧を抽出する | --allow-read |
generate-thumbnails.ts | スライド情報を取得し、プレビューを抽出する | --allow-read --allow-write |
generate-from-template.ts | テンプレートを変更する(置換/組み合わせ) | --allow-read --allow-write |
generate-scratch.ts | JSON 仕様から PPTX を作成する | --allow-read --allow-write |
要素の種類(ゼロから作成するモード)
| 種類 | 説明 | 主なオプション |
|---|---|---|
text | テキストボックス | text, fontSize, bold, color, align |
image | ファイルまたは base64 からの画像 | path, data, sizing |
table | データテーブル | rows, colW, border, fill |
shape | 幾何学図形 | type, fill, line, text |
chart | チャートとグラフ | type, data, title, showLegend |
よくある問題と解決策
問題:テキストが置換されない
症状:出力された PPTX に {{PLACEHOLDER}} タグが残っています。
解決策:
analyze-template.tsを実行して、タグの正確なテキストを確認します- タグが複数の XML ランに分割されている可能性があります。タグが 1 つのテキストラン内に収まるようにテンプレートを確認します
- replacements の
slideNumbersフィルターを確認します
問題:スライドの順序が正しくない
症状:スライドを組み合わせた後、順序が正しくありません。
解決策:
- スライドは
slideSelectionsで指定された順序で追加されます - スライド番号が元のテンプレートと一致していることを確認します(1 始まり)
問題:画像が表示されない
症状:出力に画像要素が表示されません。
解決方法:
- 絶対パス、または spec.json の場所を基準とした相対パスを使用します
- 画像ファイルが存在し、読み取り可能であることを確認します
- 対応形式を確認します:PNG、JPEG、GIF
OOXML のプレースホルダー継承(上級)
PowerPoint の OOXML 形式でプレースホルダーがどのように処理されるかを理解することは、テンプレートの開発に不可欠です。
継承チェーン
PowerPoint は階層的な継承モデルを使用します。
Theme → Slide Master → Slide Layout → Slide
- テーマ:色、フォント、効果を定義します
- スライドマスター:プレースホルダーの既定の位置と書式(箇条書きを含む)を定義します
- スライドレイアウト:特定のレイアウトタイプ(タイトルスライド、コンテンツなど)に対してマスターの設定を上書きします
- スライド:実際のコンテンツを含み、レイアウトから書式を継承します
主な原則
-
テキストコンテンツは継承されません:スライドには独自のテキストコンテンツが必要です。レイアウト内の
{{placeholder}}テキストは、そのレイアウトを使用するスライドに自動的には表示されません。 -
テキストの書式は継承できます:スライドの図形に空の
<a:lstStyle/>がある場合、レイアウトの<a:lstStyle>から書式(色、サイズ、箇条書き)を継承します。 -
プレースホルダーのリンク:スライドは
<p:ph type="..." idx="..."/>を介してレイアウトにリンクします。type(例:「title」、「body」、「ctrTitle」)とidxは一致している必要があります。 -
箇条書きの抑制:通常はマスターの bodyStyle から箇条書きを継承するプレースホルダーで箇条書きを表示しないようにするには、レイアウトの lstStyle に
<a:buNone/>を追加します。
継承可能な書式の定義
レイアウトのプレースホルダーでは、色を <a:rPr>(ラン固有)ではなく <a:lstStyle>(継承可能)に定義します。
<p:txBody>
<a:lstStyle>
<a:lvl1pPr algn="ctr">
<a:buNone/>
<a:defRPr sz="4400" b="1">
<a:solidFill><a:srgbClr val="FFFFFF"/></a:solidFill>
</a:defRPr>
</a:lvl1pPr>
</a:lstStyle>
<a:p>
<a:r><a:rPr lang="en-US"/><a:t>{{placeholder}}</a:t></a:r>
</a:p>
</p:txBody>
スライド図形の構造
スライドがレイアウトから正しく継承するには、次のようにします。
<p:sp>
<p:nvSpPr>
<p:cNvPr id="2" name="title 2"/>
<p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr>
<p:nvPr>
<p:ph type="ctrTitle"/>
</p:nvPr>
</p:nvSpPr>
<p:spPr/>
<p:txBody>
<a:bodyPr/>
<a:lstStyle/>
<a:p>
<a:r>
<a:rPr lang="en-US"/>
<a:t>{{placeholder}}</a:t>
</a:r>
</a:p>
</p:txBody>
</p:sp>
よくある問題
| 問題 | 原因 | 解決方法 |
|---|---|---|
| テキストが白ではなく黒で表示される | 色が <a:lstStyle> ではなく <a:rPr> に定義されている | 色をレイアウトの <a:lstStyle> 内にある <a:defRPr> に移動します |
| 不要な箇条書きが表示される | マスターの bodyStyle に箇条書きがあり、レイアウトで上書きされていない | レイアウトの <a:lvl1pPr> に <a:buNone/> を追加します |
| プレースホルダーのテキストが表示されない | テキストがレイアウトにのみあり、スライドにない | スライドの <p:txBody> にテキストコンテンツを含めます |
| 書式が適用されない | スライドに明示的な書式が設定されている | 空の <a:lstStyle/> と <a:rPr lang="en-US"/> を使用します |
参考:プレースホルダーのタイプ
| タイプ | 用途 |
|---|---|
ctrTitle | 中央揃えのタイトル(タイトルスライド) |
title | 標準タイトル |
subTitle | サブタイトル |
body | コンテンツ領域(複数使用する場合は idx を指定) |
pic | 画像プレースホルダー |
dt | 日付/時刻 |
ftr | フッター |
sldNum | スライド番号 |
制限事項
- スライドのレンダリングなし:スライドを画像に直接レンダリングできません(レンダリングには LibreOffice を使用してください)
- アニメーションのサポートは限定的:スクラッチモードでは基本的なアニメーションのみ対応します
- スライドマスターの編集なし:テンプレートモードではマスターを保持しますが、変更はしません
- PPTX のみ:旧式の .ppt 形式には対応していません
- テキストランの分割:テンプレート内の複雑な書式では、タグが複数の XML 要素に分割される場合があります
関連スキル
- pdf-generator:プレゼンテーションの代わりに PDF ドキュメントを作成します
- docx-generator:Word ドキュメントを作成します
- xlsx-generator:Excel スプレッドシートを作成します