mcpField
P
pro-deck-builder

pro-deck-builder

github.com/thatrebeccaraeドキュメント187129 回インストール24 週間前に更新
リポジトリ

pro-deck-builder について

pro-deck-builder は、PowerPoint の作成と編集を支援する Claude スキルです。デザイン選択に加え、タイポグラフィ、配色、レイアウト、グラフ、テキスト調整の指針を提供します。

主な機能

  1. 01PptxGenJS による PowerPoint 作成
  2. 02既存プレゼンテーションの編集ガイド
  3. 03ライト/ダークのデザイン体系
  4. 04フォントとパレットの選択
  5. 05グラフ書式とテキスト調整ルール

活用シーン

  1. 01SaaS風プレゼンテーションの新規作成
  2. 02既存のプレゼンテーションやテンプレートの編集
  3. 03レポートやデータ中心のスライド作成
  4. 04内容抽出結果やスライドサムネイルの確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/thatrebeccarae/claude-marketing --skill pro-deck-builder

インストール後、Claude Code で/pro-deck-builderを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

EXAMPLES.md
LICENSE
REFERENCE.md

詳細

プレゼンテーションデザイナー

PowerPoint に VC 支援 SaaS のようなデザイン品質を。Linear、Attio、Vercel、Raycast のようなスタイルを目指し、企業向けのクリップアートは使いません。

インストール

git clone https://github.com/thatrebeccarae/claude-marketing.git && cp -r claude-marketing/skills/pro-deck-builder ~/.claude/skills/

クイックリファレンス

タスク方法
ゼロから作成REFERENCE.md を読み、PptxGenJS を使用します
既存のものを編集/テンプレートを使用editing.md を読みます
コンテンツの読み取り/抽出python -m markitdown presentation.pptx
ビジュアルの概要python scripts/thumbnail.py presentation.pptx

開始前の必須手順

ステップ 1:ユーザーに確認する

コードを書く前に、次の点を確認します。

  1. ライトモードとダークモードのどちらにしますか? ダークはプレミアム感のある基調講演向け、ライトはレポートやデータ中心のスライド向けです。
  2. カラーパレットの希望はありますか? 以下のパレット表を見せるか、ブランドカラーがあるか尋ねます。
  3. ロゴはありますか? 使用するロゴファイル(PNG/SVG のパス)があるか尋ねます。
ステップ 2:フォントを確認する

インストール済みのフォントを確認します。プレミアムフォントを使うと、仕上がりが大きく変わります。

# macOS — list all installed font families
fc-list : family | sort -u

# Search for premium fonts first
fc-list : family | grep -iE "inter|dm.sans|poppins|avenir|futura|geist|sf.pro|sf.mono|jetbrains|fira.code|montserrat|playfair|source.sans"

# Check macOS Font Book directories directly
ls ~/Library/Fonts/ /Library/Fonts/ /System/Library/Fonts/Supplemental/ 2>/dev/null

フォント選択の優先順位:

  1. Inter — SaaS UI の標準フォントです(インストールされていれば、すべてに使用します)
  2. DM Sans — ジオメトリックで、スタートアップ向けです
  3. Poppins — 丸みがあり、親しみやすいフォントです
  4. Avenir / Avenir Next — macOS に付属する、Apple に近い洗練されたフォントです
  5. Calibri — 安全な代替フォントで、常に利用できます

データ/等幅フォント: JetBrains Mono > Fira Code > SF Mono > Consolas


デザイン言語:VC 支援 SaaS

美的原則
  1. レイヤーによる奥行き — 背景の上に浮かぶようなサーフェスにします。カードやパネルには、単色の平坦なボックスではなく、影や細い境界線でさりげない立体感を与えます。
  2. 大胆なタイポグラフィ、装飾は最小限に — タイポグラフィの階層で表現します。アクセントライン、装飾的な図形、クリップアートは使用しません。
  3. 色は控えめに — アクセントカラーは 1 色だけを控えめに(10%)使用します。それ以外はほぼニュートラルカラーにします。色は装飾ではなく、情報を伝えるために使います。
  4. ゆとりのある余白 — 余白は自信を表します。スライドがスカスカに感じられる場合は、要素を追加するのではなく、コンテンツを大きくします。
  5. すべての要素に役割を持たせる — 何かを追加する前に、それが何を伝えるのかを考えます。取り除いても何も変わらないなら、削除します。
ライトモードとダークモード

ユーザーはデッキ全体で使用するモードを 1 つ選びます。デッキ内でモードを混在させてはいけません。


カラーシステム

ダークモード(デフォルト — プレミアム/基調講演向け)
トークン値用途
bg-primary0A0A0Cスライドの背景(深い宇宙のような黒)
bg-surface17181Aカード、パネル(濃いスレート)
bg-elevated1E1F23浮き上がったサーフェス、ホバー状態
bg-glassFFFFFF at 4% opacity半透明のオーバーレイ
text-primaryFFFFFF見出し、主要コンテンツ
text-secondaryA0A0A0本文、説明
text-muted5A5A5Eキャプション、メタデータ、ラベル
border-subtleFFFFFF at 8% opacityカードの境界線
ライトモード(レポート/データ中心)
トークン値用途
bg-primaryFFFFFFスライドの背景
bg-surfaceF8F9FAカード、パネル
bg-elevatedFFFFFF浮き上がったサーフェス(影を使用)
text-primary111111見出し、主要コンテンツ
text-secondary555555本文、説明
text-muted999999キャプション、メタデータ、ラベル
border-subtleE8E8E8カードの境界線

パレットシステム

各パレットでは、アクセントカラー(10% 使用)を 1 色と、意味を持つステータスカラーを定義します。アクセントカラーが個性を表し、それ以外はすべてニュートラルカラーです。

組み込みパレット
名前アクセントHex最適な用途
エレクトリックブルー鮮やかなアズール0055FFSaaS、テクノロジー、製品
ネオンライム酸味のあるグリーン39FF14開発ツール、パフォーマンス
ホットコーラル温かみのあるエネルギーFF6B6Bマーケティング、クリエイティブ
インディゴ深いパープル6366F1スタートアップ、AI/ML
ティールトラスト落ち着いた信頼感0D9488ヘルスケア、金融
アンバーシグナル温かみのある権威F59E0Bコンサルティング、戦略
ローズ洗練されたピンクF43F5Eデザイン、ブランド、高級感
エメラルド成長を感じさせるグリーン10B981サステナビリティ、成功
シアンエッジシャープなブルーグリーン06B6D4データ、分析
バイオレット創造性を深める色8B5CF6教育、イノベーション
スレートアクセントなし64748Bミニマル、控えめ
ゴールドスタンダード金融向けの高級感D4AF37投資家、取締役会向けの資料
カスタムパレット(ユーザーのブランドカラー)

ユーザーがブランドカラーを指定した場合は、カスタムパレットを作成します。

const palette = {
  accent: "0055FF",      // primary brand color
  accentMuted: "0055FF" + " at 15% opacity", // for tinted backgrounds
  positive: "10B981",    // good, up, success
  warning: "F59E0B",     // attention, caution
  critical: "EF4444",    // bad, down, error
};
色の適用:85/10/5 ルール
  • 85% — 背景+ニュートラルなテキスト(モードの bg+text トークン)
  • 10% — アクセント(主要な数値、チャートの主要色、CTA、アクティブ状態)
  • 5% — セマンティックなステータス(KPI とデータにおけるポジティブ/警告/重大)

タイポグラフィ

フォントの優先順位

フォントの検出を実行し(上記のステップ 2)、次の中から選びます。

優先順位見出し本文データ/等幅雰囲気
1位Inter 700Inter 400JetBrains MonoLinear/Vercel
2位DM Sans 700DM Sans 400Fira Code幾何学的なスタートアップ
3位Avenir Next BoldAvenir 400SF MonoApple に近い雰囲気
4位Poppins 700Poppins 400JetBrains Mono親しみやすくモダン
安全Calibri BoldCalibriConsolas常に利用可能

エディトリアル/金融向けの資料の場合:

見出し本文雰囲気
DM Serif DisplayDM Sans洗練されたエディトリアル
Playfair DisplaySource Sans Pro高級感、金融
GeorgiaCalibriクラシックな企業向け
サイズスケール
役割サイズ太さ用途
ヒーロータイトル54-72pt太字(700)タイトルスライドのみ
スライドタイトル32-40pt太字(700)すべてのコンテンツスライド
セクション見出し20-24ptセミボールド(600)スライド内のセクション
本文14-16ptレギュラー(400)段落、箇条書き
キャプション/メタ情報10-12ptレギュラー(400)脚注、出典
大きな KPI 数値48-72pt太字(700)ダッシュボードのコールアウト
KPI ラベル9-10ptセミボールド、すべて大文字、+字間KPI 数値の下
データ/数値11-14pt等幅レギュラー表、データラベル
タイポグラフィのルール
  • 本文とリストは左揃えにし、タイトルと KPI 値のみ中央揃えにします。
  • 1 つの資料で使用するフォントファミリーは最大 2 種類にします(データ用の等幅フォントは 1 種類追加できます)。
  • すべて大文字+charSpacingは、小さなラベル(KPI ラベル、カテゴリタグ)のみに使用します。
  • 行の高さ:本文は 1.3x、タイトルは 1.1x にします。
  • 強調に下線は使わず、太字またはアクセントカラーを使用します。
テキストの調整(はみ出し防止)

文字数を確認せずに固定のフォントサイズを使うと、大きな数値やタイトルは必ずはみ出します。次のルールに従ってください。

大きな KPI 数値 — 文字数に応じてフォントサイズを調整します:

文字数例最大フォントサイズ(カード)最大フォントサイズ(単独)
1–4$4.2M48pt72pt
5–7$5,307K36pt54pt
8–10$5,307,54028pt44pt
11+$12,345,67822pt36pt

ルール:数値は省略形を優先してください。 $5.3M > $5,307,540。精度が重要な表や脚注でのみ、完全な数値を使用してください。

スライドのタイトル — 折り返しが発生する最大文字数:

フォントサイズ最大文字数(幅約9")超過する場合
54pt~3044ptに縮小するか、短く書き換えます
44pt~3836ptに縮小するか、短く書き換えます
36pt~4632ptに縮小するか、短く書き換えます
32pt~52はみ出す部分にはサブタイトルを使います

ルール:fontSize を設定する前に文字数を数えてください。 スライドのコンテンツタイトルは、決して2行に折り返さないでください。セクション区切りは折り返してもかまいません。

幅の狭いコンテナー内の本文(インサイトパネル、サイドバー):

狭いパネル(幅 < 4")では、テキストのはみ出しがよく発生します。PptxGenJS はテキストを自動で縮小しません。次のルールに従ってください。

コンテナーの幅最大フォントサイズ1行あたりの最大文字数(約)行間1.25倍での最大行数
4.0"+14pt~55高さ ÷ 0.22"
3.0-3.9"11pt~45高さ ÷ 0.18"
2.0-2.9"10pt~35高さ ÷ 0.16"
< 2.0"9pt~25高さ ÷ 0.15"

ルール:テキストを追加する前に行数を見積もってください。 テキストの文字数を数え、1行あたりの最大文字数で割って行数を求め、コンテナーの高さに収まることを確認します。収まらない場合は、(1) fontSize を小さくする、(2) テキストを短くする、または (3) コンテナーを大きくします。テキストを気付かないうちにはみ出させないでください。はみ出したテキストは切り取られたり、隣接する要素と重なったりします。

// ✅ CORRECT: 2.8" panel → max 10pt, ~35 chars/line
// "Welcome series dominates at 62%..." = 90 chars ≈ 3 lines
// Container h: 1.6" → fits ~10 lines at 10pt. Safe.
s.addText("Short, edited copy.", {
  x: 6.55, y: 1.45, w: 2.7, h: 1.6,
  fontSize: 10, fontFace: theme.font.body,
});

// ❌ WRONG: 2.8" panel with 14pt font and 200+ char paragraph
s.addText("Very long paragraph that will overflow...", {
  x: 6.55, y: 1.45, w: 2.8, h: 1.6,
  fontSize: 14, fontFace: theme.font.body,  // too large for narrow panel
});
グラフの数値書式

グラフの数値は、必ず読みやすい形式にしてください。軸やデータラベルに「1000000」のような未加工の数値を表示することはできません。

重要:valAxisLabelFormatCode で書式設定されるのは軸のみです。showValue: true によるデータラベルは、dataLabelFormatCode で個別に書式設定します。 valAxisLabelFormatCode を設定しても dataLabelFormatCode を設定しない場合、データラベルには「2888000」のような書式設定されていない数値が表示されます。numFmt は有効な PptxGenJS プロパティではありません。必ず dataLabelFormatCode を使用してください。

推奨される方法 — 未加工の値を使った OOXML 条件付き書式: 未加工(スケーリングされていない)の値を使用し、OOXML の条件付き数値書式で表示形式を処理します。これが最も信頼性の高い方法で、桁の異なるデータが混在する場合(例:$2.9M と $3.6K の両方を含むグラフ)にも対応できます。

// ✅ BEST: Raw values + OOXML conditional format
// Under 1K: whole number ($500)
// 1K-999K: X.XXK ($540.18K, $57.72K)
// 1M+: X.XM ($2.9M)
const currFmt = '[>=1000000]"$"#,##0.0,,"M";[>=1000]"$"#,##0.00,"K";"$"#,##0';

values: [2888000, 717734, 425467, 3655],  // raw dollar values
dataLabelFormatCode: currFmt,              // conditional brackets OK here
valAxisLabelFormatCode: '"$"#,##0.0,,"M"', // simple format only (no brackets)
// ✅ ALSO OK: Pre-scale when all values are same magnitude
values: [2888, 718, 425],  // raw values divided by 1000
dataLabelFormatCode: '"$"#,##0"K"',
valAxisLabelFormatCode: '"$"#,##0"K"',
// ❌ WRONG: Raw values with axis-only format
values: [2888000, 718000, 425000],
valAxisLabelFormatCode: "$#,##0,K",  // axis may format but data labels show 2888000
// ❌ WRONG: numFmt (not a valid PptxGenJS property)

OOXML 条件付き書式のリファレンス(未加工の値と併用):

データ範囲書式コード表示例
通貨(自動スケーリング)'[>=1000000]"$"#,##0.0,,"M";[>=1000]"$"#,##0.00,"K";"$"#,##0'$2.9M、$540.18K、$500
数値(自動スケーリング)'[>=1000000]#,##0.0,,"M";[>=1000]#,##0.00,"K";#,##0'2.9M、540.18K、500
パーセンテージ'0%'50%、85%

書式コードの構文: OOXML では、角括弧内の条件を最大 2 つと、デフォルトの書式を指定できます。[condition1]format1;[condition2]format2;defaultFormat の形式です。末尾の , は 1,000 で割ることを示します(つまり、,, は 1M で割ります)。

重要:valAxisLabelFormatCode は OOXML の条件付き書式 [>=1000] に対応していません。 データ範囲に合わせて、軸にはシンプルな書式を使用してください。

軸の範囲valAxisLabelFormatCode表示例
約 999K 以下'"$"#,##0,"K"'$0K、$100K、$500K
約 10M 以上まで'"$"#,##0.0,,"M"'$0.0M、$0.5M、$1.0M
約 999 以下'"$"#,##0'$0、$100、$500

dataLabelFormatCode(角括弧に対応)には条件付きの currFmt を使用し、valAxisLabelFormatCode にはシンプルな書式を使用してください。棒グラフでは、読者が軸をたどらなくても正確な値を確認できるよう、常に dataLabelPosition: "outEnd" とともに showValue: true を設定してください。


間隔

トークン値用途
xs0.125"グループ化された要素内
sm0.25"ラベルと値の間、アイコンとテキストの間
md0.375"カード内のセクション間
lg0.5"カード間、主要なセクション間
xl0.75"コンテンツ領域間
レイアウトグリッド(10" × 5.625")
Margins:       0.5" from all edges
Content area:  9.0" wide × ~4.5" tall
Title zone:    y = 0.3"
Content zone:  y = 1.0" to y = 5.0"
Footer zone:   y = 5.2"
Card gap:      0.25" - 0.3"

ロゴの配置

ロゴを探す
find ~/Desktop ~/Downloads ~/Documents -maxdepth 3 -iname "*logo*" \( -name "*.png" -o -name "*.svg" -o -name "*.jpg" \) 2>/dev/null
配置パターン
スライドの種類位置サイズ備考
タイトルスライド(左上)x:0.5, y:0.4w:1.5, h:0.5控えめなブランドマーク
タイトルスライド(中央)x:4.0, y:0.8w:2.0, h:0.7タイトルテキストの上
コンテンツスライドx:8.5, y:0.2w:1.0, h:0.35右上隅、すべてのスライド
クロージングスライドx:3.5, y:1.5w:3.0, h:1.0中央、ヒーローサイズ
ロゴのルール
  • アスペクト比を維持するため、必ず sizing: { type: "contain", w, h } を使用してください
  • コンテンツスライド:幅は最大 1" とし、コンテンツより目立たないようにしてください
  • タイトル/クロージング:ブランドを印象付けるため、幅は最大 3" にできます
  • ダークモード:利用できる場合は、白または明るい色のロゴを使用してください(ユーザーに確認)
  • スライドマスター:すべてのスライドにロゴを表示する場合は、マスター定義に追加してください

アイコン

パイプライン:react-icons → sharp → PNG → PptxGenJS
npm install -g react-icons react react-dom sharp

Lucide(react-icons/lu)または Feather(react-icons/fi)を推奨します。Linear/Vercel のアイコンのスタイルに合っています。

パッケージインポートスタイル
react-icons/luLucideLinear スタイル、シンプル
react-icons/fiFeather細線、モダン
react-icons/hi2Heroicons v2Apple 風
react-icons/tbTabler一貫した線幅
アイコンのサイズ
コンテキスト表示サイズ色
KPI カードのアイコン0.35" × 0.35"暗い背景ではアクセントカラー、明るい背景では控えめな色
機能行のアイコン0.4" × 0.4"アクセントカラーの円の内側に白色
セクション区切り0.5" × 0.5"アクセントカラー
インラインの箇条書き0.25" × 0.25"text-secondary

再利用可能なコンポーネント

下部のコールアウトボックス(標準化)

多くのスライドでは、強調表示されたコールアウトボックス(推奨事項、重要な洞察、総合的な効果)で締めくくります。これらはすべてのスライドで視覚的に同一にする必要があります。

プロパティ値備考
ボックスの高さ0.6"常に0.6"にします。0.5"、0.7"、0.9"にはしません
テキストの高さ0.5"パディングを含めて0.6"のボックス内に収まります
フォントサイズ11pt常に11ptの太字にします。12ptや13ptにはしません
フォントtheme.font.body太字、左揃え、valign: "middle"
ボックスのx/wx: 0.5, w: 9.0コンテンツ幅全体
テキストのx/wx: 0.7, w: 8.6ボックスの端から0.2"内側
テキストのyオフセットボックスのy + 0.05"テキストを垂直方向の中央に配置
角丸半径0.06"すべてのコールアウトで統一
// Standard bottom callout — copy this pattern exactly
s.addShape(pres.shapes.RECTANGLE, {
  x: 0.5, y: calloutY, w: 9.0, h: 0.6,
  fill: { color: "DCFCE7" },  // or theme.accentMuted, "FEF3C7", etc.
  line: { color: theme.status.positive, width: 0.75 },
  rectRadius: 0.06,
});

s.addText("Callout text here.", {
  x: 0.7, y: calloutY + 0.05, w: 8.6, h: 0.5,
  fontSize: 11, fontFace: theme.font.body, bold: true,
  color: "166534", align: "left", valign: "middle",
});
表とコールアウトのレイアウト(重なりを防止)

表の下にコールアウトを配置する前に、必ず表の最下部の位置を計算します。 PptxGenJSの表は高さを自動的に返さないため、自分で計算する必要があります。

tableBottom = tableY + (rowCount × rowH)
calloutY = tableBottom + 0.15"  // minimum 0.15" gap

**calloutY + 0.6"(コールアウトの高さ)< 5.2"(フッター領域)であることを確認します。**収まらない場合は、rowHまたは表のフォントサイズを小さくします。コールアウトをフッターに重ねてはいけません。

行数(ヘッダーを含む)rowH: 0.32"rowH: 0.36"rowH: 0.42"rowH: 0.48"rowH: 0.55"
6行1.92"2.16"2.52"2.88"3.30"
7行2.24"2.52"2.94"3.36"3.85"
8行2.56"2.88"3.36"3.84"4.40"
11行3.52"3.96"4.62"——

表の開始位置がy: 1.0"で、コールアウトに0.75"(0.15"の間隔 + 0.6"のボックス)が必要な場合、フッターより上に収めるには表の高さを**3.45"**以下にします。これに合わせてrowHを選びます。

スライド間の一貫性ルール

繰り返し使用する要素は、すべてのスライドで同一の寸法にする必要があります。

  1. 下部のコールアウトボックス — すべてのスライドでh、fontSize、パディングを統一します(上記の標準を参照)
  2. グラフのフォントサイズ — 複数のスライドに棒グラフや折れ線グラフがある場合、すべてのグラフでdataLabelFontSize、catAxisLabelFontSize、valAxisLabelFontSizeを統一します
  3. 表のスタイル — ヘッダー行のスタイル(hdr())とセルのスタイル(cell())は、一度だけヘルパーとして定義して再利用します
  4. カードの寸法 — 複数のスライドで統計カードを使う場合は、カードの幅、高さ、角丸半径を統一します
  5. セクションバッジの位置 — インパクトバッジ(例:「$400K-$800K」)には、同じx、y、w、h、fontSizeを使います

ルール:複数のスライドで使う寸法は、スクリプトの先頭で再利用可能な定数として定義します。


スライドの構成

レイアウトに変化をつける — 最も重要なルール

同じレイアウトを3回以上連続で使ってはいけません。次のレイアウトを順番に使い分けます。

種類用途要素
タイトルスライド冒頭/締めくくりメインテキスト、サブタイトル、ロゴ、日付
KPIダッシュボードエグゼクティブサマリー3~5枚のカード、大きな数値
グラフ + 洞察背景情報を伴うデータ60/40の分割
全幅グラフグラフがストーリーの中心となる場合全幅、コールアウトのオーバーレイ
アイコン機能グリッド機能、柱となる要素アイコンとテキストを組み合わせた3~4行
データ表財務情報、比較スタイル付きの行、等幅フォントの数値
セクション区切りセクション間暗色またはアクセントカラーの背景に太字のタイトル
引用お客様の声大きなイタリック体、出典
大きな数値重要な統計を1つだけ示す場合中央に配置した大きな指標
比較変更前/変更後、対比横並びの列
画像 + テキスト製品、事例紹介半分を塗り足し画像にする
締めくくり最後ロゴ、CTA、連絡先

アンチパターン(絶対に行わないでください)

  1. タイトル、サブタイトル、見出しの下に、アクセント用の水平線やバーを絶対に追加しないでください — これが AI らしさを最も強く示します。テキストの下に装飾的な区切りとして配置する細い長方形(高さ:0.03~0.05)は使用しないでください。タイトルスライド、セクションの区切り、締めくくりのスライドなど、どこにも使用しないでください。スライドに視覚的な区切りが必要な場合は、余白または色付きのパネルを使用してください。
  2. 図形にグラデーション塗りつぶしを使わないでください — 単色と控えめな境界線を使用してください
  3. 濃い影を使わないでください — 不透明度は最大 0.1、ぼかしは 6 にしてください
  4. 連続するスライドで同じレイアウトを繰り返さないでください
  5. 本文を中央揃えにしないでください — タイトルと KPI 以外はすべて左揃えにしてください
  6. フォントは最大 2 種類にしてください(+等幅フォント 1 種類)
  7. テキストの壁を作らないでください — スライドごとの本文は最大 6 行にしてください
  8. 装飾的な図形を使わないでください — 無作為な円、三角形、曲線などは使用しないでください
  9. クリップアートを使わないでください — Lucide/Feather アイコンを使用してください
  10. 色付きのカード背景を使わないでください — カードには bg-surface と控えめな境界線を使用してください
  11. Unicode の箇条書きを使わないでください — bullet: true を使用してください
  12. 1 つのデッキ内でライトとダークを混在させないでください
  13. グラフのデータラベルを未設定のままにしないでください — showValue: true を使う場合は、必ず dataLabelFormatCode も設定してください。valAxisLabelFormatCode だけではデータラベルは書式設定されません。最良の結果を得るには、生の値を使った OOXML 条件付き書式を使用してください。
  14. サイズを確認せず、幅の狭いパネルに長いテキストを入れないでください — 幅が 4" 未満のコンテナーに本文を追加する前に、行数を推定し(文字数 ÷ 1 行あたりの文字数)、コンテナーの高さに収まることを確認してください。収まらない場合は、フォントサイズを小さくするか、テキストを短くしてください。
  15. コールアウトボックスのスタイルを統一してください — スライド下部の全幅コールアウトボックスはすべて、スライド間で高さ(0.6")、テキストのフォントサイズ(11pt)、パディングを統一してください。コールアウトのパターンを一度定義し、そのまま正確に複製してください。
  16. コールアウトを表に重ねないでください — 必ず tableBottom = tableY + (rows × rowH) を計算し、コールアウトは少なくとも tableBottom + 0.15" の位置に配置してください。表と重ならないことを確認せずに、コールアウトの y 位置を固定値にしないでください。
  17. グラフのフォントサイズを統一してください — 複数のスライドにグラフがある場合は、dataLabelFontSize、catAxisLabelFontSize、valAxisLabelFontSize の値をすべて統一してください。これらを定数として定義し、再利用してください。

QA(必須)

問題があることを前提にしてください。最初のレンダリングが正しいことはありません。

コンテンツの確認
python -m markitdown output.pptx
python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|placeholder|click to"
ビジュアル QA(サブエージェントを使用)
python scripts/office/soffice.py --headless --convert-to pdf output.pptx
pdftoppm -jpeg -r 150 output.pdf slide

サブエージェントへのプロンプト:

Inspect these slides. Assume issues exist — find them.
Look for:
- TEXT OVERFLOW: Numbers or titles that wrap to a second line inside their container. Also check body text in narrow panels (<4" wide) — long paragraphs at font sizes >11pt will overflow.
- ACCENT LINES: Any thin horizontal bars/lines under titles or headings (must be removed)
- CHART DATA LABELS: Raw unformatted numbers on data labels (e.g., "2888000" instead of "$2,889K"). This is the #1 chart bug — valAxisLabelFormatCode does NOT format data labels.
- CHART AXES: Raw unformatted numbers on axes (should be $500K not 500000)
- Overlapping elements, cramped spacing (<0.3"), insufficient margins (<0.5")
- Low contrast, text-only slides, repeated layouts, placeholder text
- Mode inconsistency (light elements on dark or vice versa)
- Big numbers that should be abbreviated ($5.3M not $5,307,540)
- CALLOUT INCONSISTENCY: Bottom callout boxes with different heights, font sizes, or padding across slides (all must be h:0.6", fontSize:11)
- TABLE-CALLOUT OVERLAP: Callout boxes overlapping tables — calculate tableY + (rows × rowH) and verify callout clears it
- CHART FONT INCONSISTENCY: Different dataLabelFontSize, catAxisLabelFontSize, or valAxisLabelFontSize between charts on different slides

修正 → 再レンダリング → 確認 → 問題がなくなるまで繰り返してください。少なくとも 1 回は修正サイクルを完了してください。


依存関係

npm install -g pptxgenjs                          # Creation
npm install -g react-icons react react-dom sharp  # Icons
pip install "markitdown[pptx]" Pillow             # Reading + QA
# Also: LibreOffice (soffice) + Poppler (pdftoppm) for visual QA

実装

REFERENCE.md を読んで、PptxGenJS API のパターンと、ライトモードとダークモードの両方に対応したスライド構成コード全体を確認してください。

ブランドのコンテキスト(任意)

作業ディレクトリに brand-profile.json がある場合は、デッキを作成する前に読み込んでください。デフォルトの RRBC パレットをブランドの色(プライマリ、セカンダリ、背景)に置き換え、使用可能な場合はブランドフォントを使い(使用できない場合はシステムフォントにフォールバック)、タイトルスライドとヘッダーにブランド名を含めてください。このプロファイルは brand-dna スキルによって生成されます。

コメント