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) # 16:9 ワイドスクリーン
prs.slide_height = Inches(7.5)
2. タイトルスライド生成
slide_layout = prs.slide_layouts[0] # Title Slide
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] # Content
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(品質ゲート)
以下のすべてを満たすこと:
-
presentation.pptxが正常に生成されている - ファイルが破損しておらず、PowerPoint で開ける
- スライド数が
slide-outline.mdの構成と一致 - すべてのスライドにタイトルが設定されている
- スピーカーノートが各スライドに埋め込まれている
- カラーパレットが
style-guide.mdに準拠している - フォントが
style-guide.mdに準拠している - 画像が適切な解像度(最低 1920x1080px)で配置されている
- ファイルサイズが 50MB 以下
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 内のコード例とパターンで代替する。