---
name: paragraph-pptx-gen
description: PptxGenJS でパラグラフテンプレートのスライドをゼロから生成するスキル。「パラグラフスライド生成」「pptxgenjs スライド」「paragraph-pptx-gen」「スライド生成」「プレゼン生成」「pptx作成」のキーワードで使用。
---

# paragraph-pptx-gen: PptxGenJS パラグラフスライド生成

パラグラフテンプレートのデザイン（3層構造: 話題→メッセージ→補足）を PptxGenJS でゼロから生成するスキル。
テンプレートファイル不要・XML編集不要。JSON入力からpptxを直接生成する。

## 前提

- Node.js がインストール済み
- `pptxgenjs` が `npm install -g pptxgenjs` でグローバル利用可能
- 検証に `markitdown` と `soffice`（LibreOffice）を使用

## テンプレートデザイン仕様

### 3層構造

```
┌──────────────────────────────────────────────┐
│ 話題ヘッダー (21pt 游ゴシック Medium)     [番号]│
│──────────────────────────── (水平線)         │
│                                              │
│ メッセージ (27pt Bold 游ゴシック)             │
│                                              │
│ ● 補足 lvl1 (21pt Bold 游ゴシック)           │
│   ● 小段落 lvl2 (18pt 游ゴシック Medium)     │
│     ● lvl3 (15pt)                            │
│       ● lvl4 (13.5pt)                        │
└──────────────────────────────────────────────┘
```

### レイアウト種別

| type | 用途 | 判断基準 |
|------|------|---------|
| `paragraph` | 通常の箇条書きスライド | デフォルト |
| `card3` | 3列カード比較 | 3項目の並列比較・対比 |
| `card4` | 2x2カード比較 | 4項目の並列比較・分類 |

### 使い分けの原則

- **paragraph**: 説明・解説・根拠提示 → ほとんどのスライド
- **card3/card4**: 国際比較、手法比較、分類整理 → 比較項目が明確なとき

## ワークフロー

### Step 1: 構成案を決める

ユーザーと相談して、スライド構成を決定する。各スライドについて:
- 話題（= 問い）
- メッセージ（= 答え）
- 補足（= 根拠・詳細）
- レイアウト種別

### Step 2: slides.json を生成

以下のフォーマットで `/tmp/slides.json` を生成する:

```json
{
  "title": "プレゼンのタイトル",
  "subtitle": "サブタイトル（省略可）",
  "titleNotes": "タイトルスライドのスピーカーノート",
  "slides": [
    {
      "type": "paragraph",
      "topic": "話題ヘッダー",
      "message": "伝えるべきメッセージ",
      "bullets": [
        "lvl1 箇条書き（Bold見出し）",
        { "text": "lvl2 小段落（詳細説明）", "level": 2 },
        { "text": "lvl3 さらに詳細", "level": 3 },
        "別のlvl1見出し",
        { "text": "その詳細", "level": 2 }
      ],
      "notes": "スピーカーノート（3-5文）"
    },
    {
      "type": "card3",
      "topic": "話題ヘッダー",
      "message": "メッセージ",
      "cards": [
        {
          "label": "カードのラベル",
          "heading": "カード見出し",
          "details": ["詳細1", "詳細2"]
        }
      ],
      "notes": "スピーカーノート"
    }
  ]
}
```

### bullets の書き方ルール

- 文字列 → lvl1（21pt Bold、段落見出し）
- `{ "text": "...", "level": 2 }` → lvl2（18pt、補足詳細）
- lvl1 は「小見出し」として使う。具体的な説明は lvl2 以降
- 1スライドあたり lvl1 は 3-4 個が目安

### スピーカーノートの書き方

- 3-5文で構成
- 話題を言い換え → メッセージを明言 → 重要ポイント1-2個 → 次スライドへの繋ぎ

### Step 3: pptx 生成

```bash
node ~/.gemini/antigravity/skills/paragraph-pptx-gen/scripts/generate.js \
  --input /tmp/slides.json \
  --output /path/to/output.pptx
```

### Step 4: 検証

```bash
# テキスト検証
python3 -m markitdown /path/to/output.pptx

# 視覚検証（PDF変換 → 画像化）
python3 ~/.gemini/antigravity/skills/pptx/scripts/office/soffice.py \
  --headless --convert-to pdf /path/to/output.pptx
pdftoppm -jpeg -r 150 /path/to/output.pdf slide
```

### Step 5: 修正と再生成

問題があれば slides.json を修正して再度 Step 3-4 を繰り返す。

## 注意事項

- 游ゴシック / 游ゴシック Medium が未インストールの環境では代替フォントにフォールバックする
- autoFit を有効にしているため、テキスト量が多い場合は自動でフォントサイズが縮小される
- カードの details は簡潔に（1カードあたり2-4項目が理想）
