mcpField
P
pptx-generator

pptx-generator

github.com/jwyniaドキュメント179541 回インストール35 週間前に更新
リポジトリ

pptx-generator について

pptx-generatorは、JSON仕様からプレゼンテーションを作成したり、既存のPPTXテンプレートを編集したりするDenoベースのスキルです。テキスト置換、スライドの選択と結合、テンプレートのテキスト抽出やプレビューに対応します。

主な機能

  1. 01JSON仕様からPPTXを生成
  2. 02既存テンプレート内のテキストを置換
  3. 03テンプレートのスライドを選択・結合
  4. 04テンプレートのテキスト一覧を抽出
  5. 05スライド情報とプレビューを生成

活用シーン

  1. 01データに基づくプレゼンテーションの作成
  2. 02ブランドテンプレートへのレポート内容の反映
  3. 03承認済みスライドを組み合わせた資料の作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jwynia/agent-skills --skill pptx-generator

インストール後、Claude Code で/pptx-generatorを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
slide-spec-schema.json
references/
pptxgenjs-api.md
template-workflow.md
scripts/
analyze-template.ts
generate-from-template.ts
generate-scratch.ts
generate-thumbnails.ts

詳細

PPTX ジェネレーター

このスキルを使用する場面

次のような場合にこのスキルを使用します:

  • データや仕様からプログラムでプレゼンテーションを作成する場合
  • 企業のスタイルを維持しながら、ブランドテンプレートに動的なコンテンツを追加する場合
  • 分析のために、既存の PPTX ファイルからテキストや構造を抽出する場合
  • 承認済みテンプレートのライブラリからスライドを組み合わせる場合
  • プレゼンテーション生成のワークフローを自動化する場合

次のような場合には、このスキルを使用しないでください:

  • プレゼンテーションを開いて表示したい場合(PowerPoint またはビューアーを使用してください)
  • 複雑なアニメーションや画面切り替えが必要な場合(サポートは限定的です)
  • 古い .ppt 形式を扱う場合(PPTX のみ対応)

前提条件

  • Deno がインストールされていること(https://deno.land/)
  • テンプレートを使用する操作では、入力 PPTX ファイルがあること
  • ゼロから生成する場合は、JSON 仕様があること

クイックスタート

2 つの操作モード
  1. テンプレートモード:既存のブランドテンプレートを変更します

    • 分析して置換:{{PLACEHOLDERS}} を見つけ、コンテンツに置き換えます
    • スライドライブラリ:テンプレートライブラリからスライドを選択して組み合わせます
  2. ゼロから作成するモード: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.tsPPTX からテキストの一覧を抽出する--allow-read
generate-thumbnails.tsスライド情報を取得し、プレビューを抽出する--allow-read --allow-write
generate-from-template.tsテンプレートを変更する(置換/組み合わせ)--allow-read --allow-write
generate-scratch.tsJSON 仕様から 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}} タグが残っています。

解決策:

  1. analyze-template.ts を実行して、タグの正確なテキストを確認します
  2. タグが複数の XML ランに分割されている可能性があります。タグが 1 つのテキストラン内に収まるようにテンプレートを確認します
  3. replacements の slideNumbers フィルターを確認します
問題:スライドの順序が正しくない

症状:スライドを組み合わせた後、順序が正しくありません。

解決策:

  • スライドは slideSelections で指定された順序で追加されます
  • スライド番号が元のテンプレートと一致していることを確認します(1 始まり)
問題:画像が表示されない

症状:出力に画像要素が表示されません。

解決方法:

  1. 絶対パス、または spec.json の場所を基準とした相対パスを使用します
  2. 画像ファイルが存在し、読み取り可能であることを確認します
  3. 対応形式を確認します:PNG、JPEG、GIF

OOXML のプレースホルダー継承(上級)

PowerPoint の OOXML 形式でプレースホルダーがどのように処理されるかを理解することは、テンプレートの開発に不可欠です。

継承チェーン

PowerPoint は階層的な継承モデルを使用します。

Theme → Slide Master → Slide Layout → Slide
  • テーマ:色、フォント、効果を定義します
  • スライドマスター:プレースホルダーの既定の位置と書式(箇条書きを含む)を定義します
  • スライドレイアウト:特定のレイアウトタイプ(タイトルスライド、コンテンツなど)に対してマスターの設定を上書きします
  • スライド:実際のコンテンツを含み、レイアウトから書式を継承します
主な原則
  1. テキストコンテンツは継承されません:スライドには独自のテキストコンテンツが必要です。レイアウト内の {{placeholder}} テキストは、そのレイアウトを使用するスライドに自動的には表示されません。

  2. テキストの書式は継承できます:スライドの図形に空の <a:lstStyle/> がある場合、レイアウトの <a:lstStyle> から書式(色、サイズ、箇条書き)を継承します。

  3. プレースホルダーのリンク:スライドは <p:ph type="..." idx="..."/> を介してレイアウトにリンクします。type(例:「title」、「body」、「ctrTitle」)と idx は一致している必要があります。

  4. 箇条書きの抑制:通常はマスターの 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 スプレッドシートを作成します

コメント