| name | pptx-builder |
| description | python-pptx を使用して .pptx ファイルを自動生成する。スタイルガイド・スライド構成・ コンテンツを統合し、プロフェッショナルな PowerPoint プレゼンテーションを出力する。 Use when 「PPTXを生成して」「PowerPointを作って」「.pptxを出力して」 「スライドをビルドして」「パワポを作って」「pptxに変換して」。
|
PPTX Auto Builder — Phase 7: .pptx 自動生成
プレゼンテーション作成ワークフローの最終出力スキル。すべての成果物を .pptx に統合する。
概要
PPTX Auto Builder は、PrezenX ワークフローの最終フェーズとして、
これまでに作成されたコンテンツ・スタイルガイド・ビジュアル指示を統合し、
python-pptx によって実際の PowerPoint ファイルを自動生成するスキルである。
起動条件
style-guide.md が存在すること(Brand Style Enforcer の出力)
slide-outline.md または presentation-context.md が存在すること
- ユーザーが .pptx 出力を明示的に要求したとき
- HTML プレゼンテーションから PPTX への変換が必要なとき
前提条件
- Python 3.10+ がインストール済み
python-pptx パッケージが利用可能であること
- Mermaid 図を含む場合は
mermaid-cli (mmdc) が必要(なければテキスト代替)
生成ワークフロー
1. style-guide.md → カラー/フォント設定を読み込み
2. slide-outline.md → スライド構成を読み込み
3. presentation-context.md / executive-summary.md → 内容を統合
4. data-insights.md → データビジュアライゼーション指示を取得
5. infographic-specs.md / scientific-visuals.md → 図解指示を取得
6. python-pptx スクリプトを生成
7. スクリプトを実行
8. presentation.pptx を出力
スライドレイアウト定義
利用可能レイアウト
| レイアウト名 | 構成 | 用途 |
|---|
| Title Slide | タイトル + サブタイトル + 日付 | 表紙 |
| Section Header | セクション名 + 簡潔な説明 | セクション区切り |
| Content | タイトル + テキスト/箇条書き | 一般コンテンツ |
| Two Column | 左テキスト + 右図解 | 比較・対照 |
| Image Full | フルブリード画像 + オーバーレイテキスト | インパクト重視 |
| Data | タイトル + グラフ/表 | データ提示 |
| Quote | 引用 + 出典 | 権威付け・印象付け |
| Summary | キーポイント一覧 | まとめ |
| Call to Action | 次のステップ + 連絡先 | 最終スライド |
python-pptx コードパターン
1. プレゼンテーション初期化
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
2. タイトルスライド生成
slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "プレゼンテーションタイトル"
subtitle.text = "サブタイトル — 日付"
for paragraph in title.text_frame.paragraphs:
paragraph.font.size = Pt(36)
paragraph.font.color.rgb = RGBColor(0x00, 0x78, 0xD4)
3. コンテンツスライド生成
slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
body = slide.placeholders[1]
title.text = "スライドタイトル"
tf = body.text_frame
tf.text = "最初の箇条書き項目"
p = tf.add_paragraph()
p.text = "2番目の箇条書き項目"
p.level = 0
4. 表の自動生成
rows, cols = 4, 3
left, top = Inches(1), Inches(2)
width, height = Inches(8), Inches(4)
table = slide.shapes.add_table(rows, cols, left, top, width, height).table
for col_idx in range(cols):
cell = table.cell(0, col_idx)
cell.text = f"ヘッダー {col_idx + 1}"
for paragraph in cell.text_frame.paragraphs:
paragraph.font.bold = True
paragraph.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF)
5. 画像の配置
img_path = "figures/diagram.png"
left, top = Inches(1), Inches(2)
width = Inches(5)
slide.shapes.add_picture(img_path, left, top, width=width)
6. スピーカーノート埋め込み
notes_slide = slide.notes_slide
notes_tf = notes_slide.notes_text_frame
notes_tf.text = "このスライドでは〜を説明する。ポイントは3つ。"
7. ファイル出力
prs.save("presentation.pptx")
Mermaid 図の変換と埋め込み
mmdc が利用可能な場合
mmdc -i diagram.mmd -o diagram.png -w 1920 -H 1080 --backgroundColor transparent
mmdc が利用不可の場合(フォールバック)
- Mermaid コードをテキストボックスとして埋め込み
- ユーザーに手動変換を案内
- 代替として表形式やフローチャートのテキスト表現を使用
成果物
| ファイル | 内容 |
|---|
presentation.pptx | 生成された PowerPoint ファイル |
generate_pptx.py | 生成に使用した python-pptx スクリプト |
Validation Loop(検証ループ)
検証手順
- 入力ファイル確認: 必要な
.md ファイルがすべて存在するか
- 依存関係確認: python-pptx がインストール済みか
- スクリプト生成: python-pptx コードを生成
- 構文チェック: 生成スクリプトの Python 構文を検証
- 実行: スクリプトを実行し
.pptx を生成
- 出力検証: ファイルが正常に生成され、破損していないか確認
- スライド数確認: 想定スライド数と一致するか
Failure Recovery(失敗時リカバリ)
| 失敗パターン | リカバリ手順 |
|---|
| python-pptx 未インストール | pip install python-pptx を実行し再試行 |
| 日本語フォント不在 | システムフォント一覧を確認し、利用可能なフォントにフォールバック |
| 画像ファイル不在 | プレースホルダー画像で生成し、不在ファイルリストを出力 |
| Mermaid 変換失敗 | テキスト代替で埋め込み、手動変換手順を案内 |
| メモリ不足(大量画像) | 画像を圧縮して再試行。それでも失敗なら分割生成 |
| スクリプト実行エラー | エラー箇所を特定し、該当スライドをスキップして残りを生成 |
| .pptx 破損 | スクリプトを修正し再生成。破損原因をログ出力 |
Quality Gates(品質ゲート)
以下のすべてを満たすこと:
Gotchas(落とし穴)
-
python-pptx のフォント制限 — python-pptx はフォントの埋め込みをサポートしない。
日本語フォント(メイリオ等)はスライドを開く環境にインストールされている必要がある。
フォントが不在の場合、OS のデフォルトフォントで代替表示される
-
Mermaid → 画像変換の依存関係 — mermaid-cli (mmdc) は Node.js 依存。
インストールされていない環境では変換できない。
必ず事前に mmdc --version で確認し、不在ならテキスト代替を提供すること
-
画像解像度とファイルサイズのトレードオフ — プロジェクタ向けは最低 1920x1080px が
必要だが、画像を多用すると .pptx が 10MB を超える。
JPEG 品質 85%、PNG は可能なら圧縮して埋め込むこと
-
スライドマスターの制約 — python-pptx でカスタムスライドマスターを
ゼロから作成するのは困難。既存の .pptx テンプレートを読み込んで
そのレイアウトを使用するアプローチを推奨する
-
Chart.js グラフの埋め込み — python-pptx はネイティブチャートをサポートするが
種類が限定的。複雑なグラフは Chart.js → PNG 画像 → PPTX の
パイプラインで対応すること
Memory Persistence(学習記録)
このスキルの実行で得られた知見は以下に記録する:
- 環境固有のフォント利用可否 → Gotchas に追記
- 画像圧縮の最適設定 → Gotchas に追記
- テンプレート
.pptx のカスタマイズ結果 → assets/ に保存
- 生成スクリプトの再利用可能パターン →
scripts/ に保存
- 失敗パターンと解決策 → Failure Recovery テーブルに追記
禁止事項
- 入力ファイルなしで生成しない —
slide-outline.md または
presentation-context.md が存在しない状態で .pptx を生成しない
- style-guide.md を無視しない — 存在する場合は必ずカラー・フォント設定を適用する
- 著作権のある画像を無断埋め込みしない — ライセンス未確認の画像は使用しない
- 機密データをスピーカーノートに含めない — ノートも共有される可能性がある
- 50MB を超えるファイルを生成しない — 大きすぎるファイルはメール添付・共有不可
- 生成スクリプトにハードコードされたパスを含めない — 相対パスを使用する
条件付き参照(存在する場合のみ)
references/python-pptx-api.md → python-pptx API の詳細を確認するとき
references/slide-layout-specs.md → レイアウト詳細仕様を確認するとき
assets/template.pptx → カスタムテンプレートを使用するとき
scripts/generate_pptx.py → 既存の生成スクリプトを再利用するとき
⚠️ 上記ファイルが存在しない場合は、本 SKILL.md 内のコード例とパターンで代替する。