jpskill.com
📄 ドキュメント コミュニティ

ppt-editing-skill

既存のPowerPointファイルやテンプレートをXML形式で安全に編集し、レイアウト分析やコンテンツ配置、スライドの追加・削除などを効率的に行い、高品質なPPTXファイルを作成するSkill。

📜 元の英語説明(参考)

Edit existing PowerPoint files or templates with XML-safe workflows. Use for template-based deck updates: analyze layouts, map content to slides, duplicate/reorder/delete slides safely, edit slide XML in parallel, clean orphaned assets, and repack validated PPTX output.

🇯🇵 日本人クリエイター向け解説

一言でいうと

既存のPowerPointファイルやテンプレートをXML形式で安全に編集し、レイアウト分析やコンテンツ配置、スライドの追加・削除などを効率的に行い、高品質なPPTXファイルを作成するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o ppt-editing-skill.zip https://jpskill.com/download/19705.zip && unzip -o ppt-editing-skill.zip && rm ppt-editing-skill.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/19705.zip -OutFile "$d\ppt-editing-skill.zip"; Expand-Archive "$d\ppt-editing-skill.zip" -DestinationPath $d -Force; ri "$d\ppt-editing-skill.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して ppt-editing-skill.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → ppt-editing-skill フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

プレゼンテーションの編集

テンプレートベースのワークフロー

既存のプレゼンテーションをテンプレートとして使用する場合:

  1. コピーと分析:

    cp /path/to/user-provided.pptx template.pptx
    python -m markitdown template.pptx > template.md

    template.md をレビューして、プレースホルダーテキストとスライド構造を確認します。

  2. スライドマッピングの計画: 各コンテンツセクションについて、テンプレートスライドを選択します。

    ⚠️ 多様なレイアウトを使用する — 単調なプレゼンテーションはよくある失敗パターンです。基本的なタイトル+箇条書きのスライドに固定しないでください。積極的に以下のものを探してください:

    • 複数列レイアウト(2列、3列)
    • 画像+テキストの組み合わせ
    • テキストオーバーレイ付きの全面画像
    • 引用またはコールアウトスライド
    • セクション区切り
    • 統計/数字のコールアウト
    • アイコングリッドまたはアイコン+テキストの行

    避けるべきこと: すべてのスライドで同じテキスト中心のレイアウトを繰り返すこと。

    コンテンツタイプをレイアウトスタイルに合わせます(例:主要なポイント → 箇条書きスライド、チーム情報 → 複数列、お客様の声 → 引用スライド)。

  3. 展開 (Unpack)

  4. プレゼンテーションの構築(サブエージェントではなく、ご自身で行ってください):

    • 不要なスライドを削除します(<p:sldIdLst> から削除)
    • 再利用したいスライドを複製します(add_slide.py
    • <p:sldIdLst> 内のスライドの順序を変更します
    • ステップ5の前に、すべての構造変更を完了してください
  5. コンテンツの編集: 各 slide{N}.xml のテキストを更新します。 利用可能な場合は、ここでサブエージェントを使用してください — スライドは個別のXMLファイルなので、サブエージェントは並行して編集できます。

  6. クリーンアップ (Clean)

  7. パック (Pack)

出力構造

ユーザー提供ファイルを現在のディレクトリの template.pptx にコピーします。これにより、オリジナルが保持され、すべてのダウンストリームスクリプトで予測可能な名前が提供されます。

cp /path/to/user-provided.pptx template.pptx
./
├── template.pptx               # ユーザー提供ファイルのコピー(決して変更されない)
├── template.md                 # markitdownによる抽出
├── unpacked/                   # 編集可能なXMLツリー
└── edited.pptx                 # 最終的に再パックされたデッキ

最低限の期待される成果物:edited.pptx


スクリプト

スクリプト 目的
unpack.py PPTXを抽出し、整形して出力します
add_slide.py スライドを複製するか、レイアウトから作成します
clean.py 孤立したファイルを削除します
pack.py 検証付きで再パックします

<p:sldIdLst> にないスライド、参照されていないメディア、孤立したリレーションシップを削除します。

常に最初に /tmp/ に書き込み、その後最終パスにコピーしてください。Pythonの zipfile モジュールは内部で seek を使用しますが、一部のボリュームマウント(例:Dockerのバインドマウント)では失敗します。ローカルの一時パスに書き込むことでこれを回避できます。

XMLを検証、修復、凝縮し、スマートクォーテーションを再エンコードします。


スライド操作

スライドの順序は ppt/presentation.xml<p:sldIdLst> にあります。

並べ替え: <p:sldId> 要素を再配置します。

削除: <p:sldId> を削除し、clean.py を実行します。

追加: add_slide.py を使用します。スライドファイルを手動でコピーしないでください — スクリプトが、手動コピーでは見落とされがちなノート参照、Content_Types.xml、およびリレーションシップIDを処理します。


コンテンツの編集

サブエージェント: 利用可能な場合は、ここで(ステップ4完了後に)使用してください。各スライドは個別のXMLファイルなので、サブエージェントは並行して編集できます。サブエージェントへのプロンプトには、以下を含めてください:

  • 編集するスライドファイルのパス
  • 「すべての変更にEditツールを使用してください」
  • 以下の書式設定ルールとよくある落とし穴

各スライドについて:

  1. スライドのXMLを読み取ります
  2. すべてのプレースホルダーコンテンツ(テキスト、画像、グラフ、アイコン、キャプション)を特定します
  3. 各プレースホルダーを最終コンテンツに置き換えます

sed や Python スクリプトではなく、Editツールを使用してください。 Editツールは、何をどこに置き換えるかについて具体性を強制し、信頼性を向上させます。

書式設定ルール

  • すべてのヘッダー、サブヘッダー、インラインラベルを太字にする: <a:rPr>b="1" を使用します。これには以下が含まれます:
    • スライドタイトル
    • スライド内のセクションヘッダー
    • 行の先頭にあるインラインラベル(例:「Status:」、「Description:」)
  • ユニコードの箇条書き(•)は絶対に使用しない: <a:buChar> または <a:buAutoNum> を使用して適切なリスト書式設定を行います
  • 箇条書きの一貫性: 箇条書きはレイアウトから継承させます。<a:buChar> または <a:buNone> のみを指定してください。

よくある落とし穴

テンプレートの適応

ソースコンテンツの項目数がテンプレートよりも少ない場合:

  • 余分な要素(画像、図形、テキストボックス)を完全に削除する、テキストをクリアするだけではない
  • テキストコンテンツをクリアした後、孤立したビジュアルがないか確認する
  • markitdown を使用してコンテンツQAを実行し、不一致を検出する

テキストを異なる長さのコンテンツに置き換える場合:

  • 短い置き換え: 通常は安全です
  • 長い置き換え: オーバーフローしたり、予期せず折り返したりする可能性があります
  • テキスト変更後、markitdown で確認する
  • テンプレートのデザイン制約に合わせるために、コンテンツを切り詰めるか分割することを検討する

テンプレートのスロット ≠ ソースアイテム: テンプレートに4人のチームメンバーがいるが、ソースに3人のユーザーしかいない場合、4人目のメンバーのグループ全体(画像+テキストボックス)を削除し、テキストだけを削除しないようにします。

複数アイテムのコンテンツ

ソースに複数のアイテム(番号付きリスト、複数のセクション)がある場合、それぞれに個別の <a:p> 要素を作成します — 決して1つの文字列に連結しないでください

❌ 間違い — すべてのアイテムが1つの段落に:

<a:p>
  <a:r><a:rPr .../><a:t>Step 1: Do the first thing. Step 2: Do the second thing.</a:t></a:r>
</a:p>

✅ 正しい — 太字のヘッダーを持つ個別の段落:

<a:p>
  <a:pPr algn="l"><a:lnSpc><a:spcPts val="3919"/></a:lnSpc></a:pPr>
  <a:r><a:rPr lang="en-US" sz="2799" b="1" .../><a:t>Step 1</a:t></a:r>
</a:p>
<a:p>
  <a:pPr algn="l"><a:lnSpc><a:spcPts val="3919"/></a:lnSpc></a:pPr>
  <a:r><a:rPr lang="en-US" sz="2799" .../><a:t>Do the first thing.</a:t></a:r>
</a:p>
<a:p>
  <a:pPr algn="l"><a:lnSpc><a:spcPts val="3919"/></a:lnSpc></a:pPr>
  <a:r><a:rPr lang="en-US" sz="2799" b="1" .../><a:t>Step 2</a:t></a:r>
</a:p>
<!-- continue pattern -->

元の段落から <a:pPr> をコピーして、行間を保持します。ヘッダーには b="1" を使用します。

スマートクォーテーション

unpack/pack によって自動的に処理されます。しかし、EditツールはスマートクォーテーションをASCIIに変換します。

引用符を含む新しいテキストを追加する場合は、XMLエンティティを使用してください:

<a:t>the &#x201C;Agreement&#x201D;</a:t>

| Char

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Editing Presentations

Template-Based Workflow

When using an existing presentation as a template:

  1. Copy and analyze:

    cp /path/to/user-provided.pptx template.pptx
    python -m markitdown template.pptx > template.md

    Review template.md to see placeholder text and slide structure.

  2. Plan slide mapping: For each content section, choose a template slide.

    ⚠️ USE VARIED LAYOUTS — monotonous presentations are a common failure mode. Don't default to basic title + bullet slides. Actively seek out:

    • Multi-column layouts (2-column, 3-column)
    • Image + text combinations
    • Full-bleed images with text overlay
    • Quote or callout slides
    • Section dividers
    • Stat/number callouts
    • Icon grids or icon + text rows

    Avoid: Repeating the same text-heavy layout for every slide.

    Match content type to layout style (e.g., key points → bullet slide, team info → multi-column, testimonials → quote slide).

  3. Unpack

  4. Build presentation (do this yourself, not with subagents):

    • Delete unwanted slides (remove from <p:sldIdLst>)
    • Duplicate slides you want to reuse (add_slide.py)
    • Reorder slides in <p:sldIdLst>
    • Complete all structural changes before step 5
  5. Edit content: Update text in each slide{N}.xml. Use subagents here if available — slides are separate XML files, so subagents can edit in parallel.

  6. Clean

  7. Pack

Output Structure

Copy the user-provided file to template.pptx in cwd. This preserves the original and gives a predictable name for all downstream scripts.

cp /path/to/user-provided.pptx template.pptx
./
├── template.pptx               # Copy of user-provided file (never modified)
├── template.md                 # markitdown extraction
├── unpacked/                   # Editable XML tree
└── edited.pptx                 # Final repacked deck

Minimum expected deliverable: edited.pptx.


Scripts

Script Purpose
unpack.py Extract and pretty-print PPTX
add_slide.py Duplicate slide or create from layout
clean.py Remove orphaned files
pack.py Repack with validation

Removes slides not in <p:sldIdLst>, unreferenced media, orphaned rels.

Always write to /tmp/ first, then copy to the final path. Python's zipfile module uses seek internally, which fails on some volume mounts (e.g. Docker bind mounts). Writing to a local temp path avoids this.

Validates, repairs, condenses XML, re-encodes smart quotes.


Slide Operations

Slide order is in ppt/presentation.xml<p:sldIdLst>.

Reorder: Rearrange <p:sldId> elements.

Delete: Remove <p:sldId>, then run clean.py.

Add: Use add_slide.py. Never manually copy slide files—the script handles notes references, Content_Types.xml, and relationship IDs that manual copying misses.


Editing Content

Subagents: If available, use them here (after completing step 4). Each slide is a separate XML file, so subagents can edit in parallel. In your prompt to subagents, include:

  • The slide file path(s) to edit
  • "Use the Edit tool for all changes"
  • The formatting rules and common pitfalls below

For each slide:

  1. Read the slide's XML
  2. Identify ALL placeholder content—text, images, charts, icons, captions
  3. Replace each placeholder with final content

Use the Edit tool, not sed or Python scripts. The Edit tool forces specificity about what to replace and where, yielding better reliability.

Formatting Rules

  • Bold all headers, subheadings, and inline labels: Use b="1" on <a:rPr>. This includes:
    • Slide titles
    • Section headers within a slide
    • Inline labels like (e.g.: "Status:", "Description:") at the start of a line
  • Never use unicode bullets (•): Use proper list formatting with <a:buChar> or <a:buAutoNum>
  • Bullet consistency: Let bullets inherit from the layout. Only specify <a:buChar> or <a:buNone>.

Common Pitfalls

Template Adaptation

When source content has fewer items than the template:

  • Remove excess elements entirely (images, shapes, text boxes), don't just clear text
  • Check for orphaned visuals after clearing text content
  • Run content QA with markitdown to catch mismatched counts

When replacing text with different length content:

  • Shorter replacements: Usually safe
  • Longer replacements: May overflow or wrap unexpectedly
  • Verify with markitdown after text changes
  • Consider truncating or splitting content to fit the template's design constraints

Template slots ≠ Source items: If template has 4 team members but source has 3 users, delete the 4th member's entire group (image + text boxes), not just the text.

Multi-Item Content

If source has multiple items (numbered lists, multiple sections), create separate <a:p> elements for each — never concatenate into one string.

❌ WRONG — all items in one paragraph:

<a:p>
  <a:r><a:rPr .../><a:t>Step 1: Do the first thing. Step 2: Do the second thing.</a:t></a:r>
</a:p>

✅ CORRECT — separate paragraphs with bold headers:

<a:p>
  <a:pPr algn="l"><a:lnSpc><a:spcPts val="3919"/></a:lnSpc></a:pPr>
  <a:r><a:rPr lang="en-US" sz="2799" b="1" .../><a:t>Step 1</a:t></a:r>
</a:p>
<a:p>
  <a:pPr algn="l"><a:lnSpc><a:spcPts val="3919"/></a:lnSpc></a:pPr>
  <a:r><a:rPr lang="en-US" sz="2799" .../><a:t>Do the first thing.</a:t></a:r>
</a:p>
<a:p>
  <a:pPr algn="l"><a:lnSpc><a:spcPts val="3919"/></a:lnSpc></a:pPr>
  <a:r><a:rPr lang="en-US" sz="2799" b="1" .../><a:t>Step 2</a:t></a:r>
</a:p>
<!-- continue pattern -->

Copy <a:pPr> from the original paragraph to preserve line spacing. Use b="1" on headers.

Smart Quotes

Handled automatically by unpack/pack. But the Edit tool converts smart quotes to ASCII.

When adding new text with quotes, use XML entities:

<a:t>the &#x201C;Agreement&#x201D;</a:t>
Character Name Unicode XML Entity
" Left double quote U+201C &#x201C;
" Right double quote U+201D &#x201D;
' Left single quote U+2018 &#x2018;
' Right single quote U+2019 &#x2019;

Other

  • Whitespace: Use xml:space="preserve" on <a:t> with leading/trailing spaces
  • XML parsing: Use defusedxml.minidom, not xml.etree.ElementTree (corrupts namespaces)