Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Google Slides の構造を GAS 経由でパースし、YAML マッピングを出力するスキル。 「スライドをパースして」「スライドの構造を解析」「YAMLマッピング作成」等のリクエストで発動。 pptx-converter 互換のセマンティック解析 + プレースホルダー付与。
.claude/skills/minicoohei-gslides-parser/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 27% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 4% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 37% | 0% |
Google Slides プレゼンテーションの構造を GAS 経由でパースし、pptx-converter 互換のマッピング YAML を出力する。
bash# clasp は npx 経由で実行(インストール不要) # Google アカウントでログイン npx -y @google/clasp login # Google Apps Script API を有効化 # https://script.google.com/home/usersettings
bash# 1. GAS プロジェクト初期設定(初回のみ) python skills/gslides-parser/scripts/gslides_parser.py setup # 2. GAS エディタで一度手動実行して権限を付与 npx @google/clasp open --cwd skills/gslides-parser/gas/ # 3. パース実行 python skills/gslides-parser/scripts/gslides_parser.py analyze \ 1ZVAI8Cjts1N44lYXgoCoZXfb0gz7BAx7A1A5-bhapvQ \ -o output/slides/mapping.yaml
| コマンド | 説明 | |---------|------| | setup | GAS プロジェクト初期設定(clasp create + push) | | analyze <id> | プレゼンテーションをパース → YAML 出力 | | json <id> | GAS パース結果の JSON だけ出力 |
| オプション | 説明 | デフォルト | |-----------|------|-----------| | -o, --output | 出力 YAML パス | output/slides/gslides_<id>_<timestamp>.yaml | | --no-gemini | Gemini セマンティック解析を無効化 | false | | --skip-push | clasp push をスキップ | false |
| オプション | 説明 | デフォルト | |-----------|------|-----------| | -o, --output | 出力 JSON パス | stdout | | --skip-push | clasp push をスキップ | false |
yamlsource: "Google Slides: プレゼン名" presentation_id: "1ZVAI8..." presentation_url: "https://docs.google.com/presentation/d/1ZVAI8.../edit" generated_at: "2026-02-10T12:00:00" slide_width_pt: 720 slide_height_pt: 405 slides: - slide_number: 1 object_id: "p6" layout: "TITLE" elements: - id: "g1234abcd" type: text role: title hint: "メインタイトル。" position: { left: 36, top: 150, width: 648, height: 80 } style: { font: "Noto Sans JP", size: 36, bold: true, color: "333333" } value: "タイトルテキスト" placeholder: "{{slide_1_title}}" placeholders: - key: "{{slide_1_title}}" type: text role: title current: "タイトルテキスト"
[ユーザー] → python gslides_parser.py analyze <id>
│
┌───────────┴───────────┐
│ 1. clasp push │ GAS コードを反映
│ (gas/ → GAS) │
└───────────┬───────────┘
│
┌───────────┴───────────┐
│ 2. clasp run │ parsePresentation() 実行
│ parsePresentation │ → JSON 構造を返す
└───────────┬───────────┘
│
┌───────────┴───────────┐
│ 3. gas_to_yaml.py │ セマンティック解析
│ JSON → YAML 変換 │ + プレースホルダー付与
└───────────┬───────────┘
│
┌───────────┴───────────┐
│ 4. YAML 出力 │ pptx-converter 互換
└───────────┘| 要素タイプ | 抽出情報 | |-----------|---------| | Shape (テキスト) | テキスト、スタイル(font/size/bold/color)、プレースホルダー判定、塗りつぶし色 | | Image | ソースURL、コンテンツURL、リンク | | Table | 全セルテキスト、行列数、ヘッダー検出、セルスタイル | | Group | 子要素の再帰的パース | | SheetsChart | スプレッドシートID、チャートID | | Line | 線種、太さ、色 | | WordArt | レンダリングテキスト | | Video | ソース、URL、動画ID |
ヒューリスティックで以下のロールを自動判定:
| エラー | 原因 | 対処法 | |--------|------|--------| | Not logged in | clasp 未ログイン | npx @google/clasp login | | Script API disabled | GAS API 無効 | GAS API 設定 で有効化 | | PERMISSION_DENIED | OAuth スコープ未承認 | GAS エディタで一度手動実行して権限付与 | | Function not found | push 未完了 | npx @google/clasp push --force | | タイムアウト | 大きなプレゼン | GAS エディタから直接実行 |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,739 | 6,479 | -16% | 1 | 1 | 0% | 350 | 1,934 | +453% | 0 | 0 | — |
case-02 | fail→fail | 15,675 | 3,441 | -78% | 1 | 1 | 0% | 2,643 | 1,806 | -32% | 0 | 0 | — |
case-03 | fail→pass | 10,674 | 5,075 | -52% | 1 | 1 | 0% | 1,908 | 2,374 | +24% | 0 | 0 | — |
case-04 | fail→fail | 13,630 | 6,984 | -49% | 1 | 1 | 0% | 2,701 | 1,788 | -34% | 0 | 0 | — |
case-05 | fail→fail | 14,127 | 4,629 | -67% | 1 | 1 | 0% | 2,713 | 1,901 | -30% | 0 | 0 | — |
case-06 | fail→fail | 20,135 | 20,758 | +3% | 1 | 1 | 0% | 3,521 | 5,111 | +45% | 0 | 0 | — |
case-07 | fail→pass | 16,029 | 3,589 | -78% | 1 | 1 | 0% | 2,664 | 2,147 | -19% | 0 | 0 | — |
case-08 | fail→pass | 9,768 | 3,131 | -68% | 1 | 1 | 0% | 1,573 | 1,991 | +27% | 0 | 0 | — |
case-09 | fail→pass | 11,920 | 2,219 | -81% | 1 | 1 | 0% | 1,802 | 1,871 | +4% | 0 | 0 | — |
case-10 | pass→pass | 7,772 | 2,180 | -72% | 1 | 1 | 0% | 1,164 | 1,809 | +55% | 0 | 0 | — |
case-11 | fail→pass | 8,700 | 2,823 | -68% | 1 | 1 | 0% | 1,436 | 1,966 | +37% | 0 | 0 | — |
case-12 | fail→pass | 13,103 | 6,561 | -50% | 1 | 1 | 0% | 2,126 | 2,749 | +29% | 0 | 0 | — |
case-13 | fail→pass | 12,764 | 5,610 | -56% | 1 | 1 | 0% | 1,625 | 2,448 | +51% | 0 | 0 | — |
case-14 | fail→pass | 13,722 | 12,268 | -11% | 1 | 1 | 0% | 2,137 | 3,404 | +59% | 0 | 0 | — |
case-15 | fail→pass | 8,847 | 6,647 | -25% | 1 | 1 | 0% | 1,617 | 2,572 | +59% | 0 | 0 | — |
case-16 | fail→pass | 17,928 | 1,935 | -89% | 1 | 1 | 0% | 1,710 | 1,841 | +8% | 0 | 0 | — |
case-17 | pass→pass | 23,079 | 6,732 | -71% | 1 | 1 | 0% | 2,620 | 2,877 | +10% | 0 | 0 | — |
case-18 | pass→pass | 15,809 | 12,179 | -23% | 1 | 1 | 0% | 3,054 | 3,720 | +22% | 0 | 0 | — |
case-19 | pass→pass | 14,452 | 4,018 | -72% | 1 | 1 | 0% | 2,286 | 2,067 | -10% | 0 | 0 | — |
case-20 | fail→pass | 16,753 | 6,672 | -60% | 1 | 1 | 0% | 2,673 | 2,651 | -1% | 0 | 0 | — |
case-21 | fail→pass | 13,373 | 3,882 | -71% | 1 | 1 | 0% | 2,206 | 2,167 | -2% | 0 | 0 | — |
case-22 | pass→pass | 4,946 | 3,127 | -37% | 1 | 1 | 0% | 841 | 1,873 | +123% | 0 | 0 | — |
case-23 | pass→pass | 16,640 | 3,803 | -77% | 1 | 1 | 0% | 1,755 | 1,972 | +12% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 22 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +52 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.