ppt-editing-skill について
テンプレートを使ってPowerPointプレゼンテーションを編集するスキルです。既存のデッキを改変する人向けに、構成変更、XMLの内容編集、パッケージ化、検証の手順を示します。
主な機能
- 01テンプレート分析とスライド割り当て
- 02スライドの追加・削除・並べ替え
- 03スライドXMLの内容編集
- 04プレゼンテーションの整理とパッケージ化
- 05内容と書式の確認
活用シーン
- 01既存デッキを新しい内容に合わせて編集
- 02テンプレートのスライド順変更や削除
- 03プレースホルダーの置換と出力の検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ minimax-ai/ skills --skill ppt-editing-skillインストール後、Claude Code で/ppt-editing-skillを入力して読み込まれたか確認します。
詳細
プレゼンテーションの編集
テンプレートベースのワークフロー
既存のプレゼンテーションをテンプレートとして使用する場合:
-
コピーして分析する:
cp /path/to/user-provided.pptx template.pptx python -m markitdown template.pptx > template.mdtemplate.mdを確認し、プレースホルダーテキストとスライド構成を把握します。 -
スライドの割り当てを計画する:各コンテンツセクションに、テンプレートのスライドを選びます。
⚠️ レイアウトに変化をつける — 単調なプレゼンテーションはよくある失敗例です。基本的なタイトル+箇条書きのスライドばかりにしないでください。次のようなレイアウトを積極的に検討してください。
- 複数列のレイアウト(2列、3列)
- 画像+テキストの組み合わせ
- テキストを重ねた全面画像
- 引用やコールアウトのスライド
- セクション区切り
- 統計値や数値を強調するコールアウト
- アイコンのグリッド、またはアイコン+テキストの行
避けること: すべてのスライドで、同じテキスト中心のレイアウトを繰り返すこと。
コンテンツの種類に合わせてレイアウトのスタイルを選びます(例:重要なポイント → 箇条書きのスライド、チーム情報 → 複数列のレイアウト、推薦の声 → 引用のスライド)。
-
展開する
-
プレゼンテーションを構築する(サブエージェントではなく、自分で行ってください):
- 不要なスライドを削除する(
<p:sldIdLst>から削除) - 再利用するスライドを複製する(
add_slide.py) <p:sldIdLst>内でスライドの順序を変更する- 手順5の前に、構造の変更をすべて完了する
- 不要なスライドを削除する(
-
コンテンツを編集する:各
slide{N}.xmlのテキストを更新します。 利用可能であれば、ここでサブエージェントを使用してください — スライドは個別の XML ファイルなので、サブエージェントで並行して編集できます。 -
クリーンアップする
-
パッケージ化する
出力構成
ユーザーから提供されたファイルを、作業ディレクトリ内の template.pptx にコピーします。これにより元のファイルが保持され、後続のすべてのスクリプトで予測可能な名前を使用できます。
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
最低限必要な成果物: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 ツールを使用する」
- 以下の書式ルールとよくある落とし穴
各スライドについて:
- スライドの XML を読み取る
- すべてのプレースホルダーコンテンツ(テキスト、画像、グラフ、アイコン、キャプション)を特定する
- 各プレースホルダーを最終コンテンツに置き換える
sed や Python スクリプトではなく、Edit ツールを使用してください。 Edit ツールを使用すると、何をどこで置き換えるかを明確に指定できるため、信頼性が高まります。
書式ルール
- すべてのヘッダー、小見出し、インラインラベルを太字にする:
<a:rPr>にb="1"を使用します。以下が含まれます。- スライドのタイトル
- スライド内のセクションヘッダー
- 行頭のインラインラベル(例:「Status:」、「Description:」)
- Unicode の箇条書き(•)は使用しない:
<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>
行間を維持するため、元の段落から <a:pPr> をコピーします。見出しには b="1" を使用します。
スマートクォート
unpack/pack で自動的に処理されます。ただし、Edit ツールはスマートクォートを ASCII に変換します。
引用符を含む新しいテキストを追加する場合は、XML エンティティを使用します:
<a:t>the “Agreement”</a:t>
| 文字 | 名前 | Unicode | XML エンティティ |
|---|---|---|---|
" | 左二重引用符 | U+201C | “ |
" | 右二重引用符 | U+201D | ” |
' | 左一重引用符 | U+2018 | ‘ |
' | 右一重引用符 | U+2019 | ’ |
その他
- 空白:先頭または末尾に空白がある
<a:t>にはxml:space="preserve"を使用します - XML の解析:
xml.etree.ElementTree(名前空間を破損します)ではなく、defusedxml.minidomを使用します