段階的な実行と依存関係
- このスキルのワークフローは順序に従って実行してください。各ステップでライブラリ、コマンドラインツール、ランタイム、フォントを使用する前に、そのステップに必要な依存関係のみを確認し、事前にインストールされていると想定しないでください。
- 利用可能な依存関係は再利用してください。不足しているものがあれば、その依存関係のみを現在のOSと利用可能なパッケージマネージャーを使用してインストールし、検証後に元のステップを再試行してください。依存関係リスト全体を事前にインストールしないでください。
- アクティブなPython環境を使用し(
python -m pip install <package>または対応するpython)、必要に応じてタスクローカルな仮想環境を作成してください。Node.jsライブラリはタスクプロジェクト内にインストールし(npm install <package>)、スクリプトが解決できるようにしてください。システムツールやフォントには、利用可能なOSパッケージマネージャー(例:macOSではHomebrew、Debian/Ubuntuではapt、Windowsではwinget)を使用してください。 - インストールに承認が必要な場合は、ホストの許可フローに従ってください。パッケージマネージャーや必要な権限が利用できない場合、またはインストール/ダウンロードが失敗した場合は、不足している依存関係と影響を受けるステップを報告し、無期限に再試行したり、ステップが成功したと主張しないでください。独立したステップは可能な限り続行してください。
- 元のワークフローと品質チェックを維持してください。フォントはレンダリングに必要な場合のみ確認してください。テキスト、組み込みツール、自己完結型のHTMLのみを使用するステップはパッケージインストールを必要としません。外部ツールへのアクセスや認証は、パッケージマネージャーではなく、ホストを介して処理する必要があります。
パスと実行環境の约定(コマンド実行前に必読)
- Python コマンド:このマシンでは
pythonを使用します(Windows にはpython3は通常ありません)。以下のすべてのコマンドは統一してpythonを使用します。 - スクリプトパス:このスキルのスクリプトは
AppData/skills/pptx/scripts/にあります(プロジェクトルートからの相対パス)。以下および editing.md / pptxgenjs.md 内のスクリプトコマンドは、すべてこのベースディレクトリからの絶対相対パスで記述されているため、プロジェクトルートから直接実行できます。 - 作業ディレクトリ:コマンドは現在の作業ディレクトリがプロジェクトルートであることを前提としています。作業ディレクトリが異なる場合(例:
default_workdirが別のディレクトリに変更されている場合)、AppData/skills/pptxをスキルディレクトリの絶対パスに置き換えてください。 - Node.js:
npm/node(pptxgenjs が必要とする)を実行する前に、プロジェクトのルールに従って Node.js ディレクトリを PATH に追加してください。
PPTX スキル
クイックリファレンス
| タスク | ガイド |
|---|---|
| コンテンツの読み取り/分析 | python -m markitdown presentation.pptx |
| テンプレートからの編集または作成 | editing.md を参照 — QA:validate_layout.py + markitdown |
| ゼロからの作成 | 1. コンテンツ計画 → 2. アセットの事前生成 → 3. pptxgenjs.md を参照 |
| デザインによるオーバーフローの防止 | pptxgenjs.md を参照 |
| デザインシステムの生成 | python AppData/skills/pptx/scripts/design/search.py "<topic>" --design-system |
| 生成後の修正 | python AppData/skills/pptx/scripts/fix_pptx.py output.pptx |
| レイアウトQA(最初に重要) | python AppData/skills/pptx/scripts/validate_layout.py presentation.pptx |
コンテンツの読み取り
# テキスト抽出
python -m markitdown presentation.pptx
# 生XML
python AppData/skills/pptx/scripts/unpack.py presentation.pptx unpacked/
編集ワークフロー
詳細は editing.md を参照してください。
markitdownでテンプレートを分析- 展開 + スタイルレイヤーチェック + テーマ&スタイルの調整計画
- スライド操作 → コンテンツ編集 → クリーンアップ → パッケージ化
- ⚠️ レイアウトQA(必須ゲート):
python AppData/skills/pptx/scripts/validate_layout.py output.pptx --slides <編集したスライド番号> - ⚠️ コンテンツQA(必須):
python -m markitdown output.pptx
ゼロからの作成
詳細は pptxgenjs.md を参照してください。
テンプレートや参照用プレゼンテーションが利用できない場合に使用します。
必須スライド構成(ゼロからの作成時のみ)
プレゼンテーションをゼロから作成する場合、以下の構成に従う必要があります。
- スライド1:表紙ページ
- スライド2:目次(アジェンダ)
- スライド3以降:スライド2に記載された順序通りのコンテンツセクション
- 最終スライド:クロージング/お礼ページ
目次スライドを省略しないでください。目次の前にコンテンツスライドを配置しないでください。
⚠️ 空白スライド禁止
すべてのスライドには、スライド内に少なくとも1つの表示要素(addText、addShape、addImage、addChart、または addTable)が含まれている必要があります。背景色のみでコンテンツ要素がないスライドは生成不良です。
空白スライドの一般的な原因:
- セクション区切り/トランジションスライドへのコンテンツ追加を忘れる
- 生成途中のトークン切り捨てにより一部のスライドが空になる
- スライドレイアウトやマスターがコンテンツを自動入力すると想定している(実際にはそうならない — pptxgenjs は継承されたシェイプのない最小限のレイアウトを作成します)
スライドをセクション区切りとして意図する場合でも、大きなセクション番号、タイトルテキスト、装飾シェイプなどの要素を明示的に追加する必要があります。
⚠️ 必須:生成前計画
コードを記述する前に、以下の計画ステップを完了する必要があります。
⚡ 簡易リクエストのクイックパス: ユーザーが短い/簡単なデッキ(6ページ以下、単一トピック、複雑な図なし)を要求した場合、正式な計画出力をスキップし、標準の 表紙 + 目次 + (N-3) コンテンツ + クロージング 構成を使用して、ステップ3(コード作成)に直接進んでください。クイックパス = 応答本文に詳細な計画を含めず、スクリプトを構築して実行するだけです。
ステップ1:コンテンツデザイン計画の出力
以下の内容をカバーする構造化計画を提示します。
-
全体テーマとスタイル
- カラーパレットの選択(「デザインアイデア」セクションを参照)
- タイポグラフィの組み合わせ
- スライド全体で一貫するビジュアルモチーフ
-
スライドごとの概要
スライド1:表紙 - レイアウトタイプ、主要要素 スライド2:目次 - 順序付きセクションリスト スライド3:[目次のセクション1] - レイアウトタイプ、主要要素、インサイト計画(ビジュアルの場合) ... スライドN:クロージング/ありがとう - レイアウトタイプ、主要要素 ... -
ビジュアル要素インベントリ
- 必要なすべての画像、アイコン、チャート、図をリストアップ
- それぞれを
[組み込み](pptxgenjs のシェイプ/チャート)または[外部](事前生成が必要)としてマーク
計画出力例:
## プレゼンテーション計画
**テーマ:** オーシャングラデーション パレット(065A82, 1C7293, 21295C)
**フォント:** Georgia(見出し)+ Calibri(本文)
**モチーフ:** 左アクセントボーダー付きの角丸カード
### スライド:
1. 表紙スライド - 中央揃えタイトル、グラデーション背景
2. 目次 - 概要 / アーキテクチャ / メトリクス / タイムライン
3. [目次のセクション1] - レイアウトタイプ、主要要素、インサイト計画(ビジュアルの場合)
...
n. ありがとう - クロージングステートメント + 連絡先
⚠️ 計画を出力したら、すぐにステップ2とステップ3に進みます。再計画したり、同じ概要を微妙なバリエーションで言い換えたりしないでください。計画はONCEだけ出力し、その後 pptxgenjs コードの作成を開始します。
ステップ2:外部アセットの事前生成
[外部] とマークされた図については、pptxgenjs コードを作成する前に生成します。
⚠️ 重要:色の一貫性
生成されるすべての図やチャートは、プレゼンテーションと同じカラーパレットを使用する必要があります。選択したテーマに基づき、生成スクリプトの先頭で色を定義します。
オプションA:ネイティブシェイプ/チャートを優先(必須デフォルト)
すべてのアーキテクチャ図、フローチャート、プロセス図、組織図、関係図は、pptxgenjs のネイティブシェイプ(RECTANGLE、OVAL、LINE、コネクタ + addText)で構築する必要があります。パターンと例については、pptxgenjs.md の「ネイティブシェイプによる図の構築」を参照してください。
- テンプレートスライド(プロセス、比較、2カラム、アイコングリッド)が適している場合はそれを使用
- フロー、アーキテクチャ、階層には pptxgenjs ネイティブシェイプ(ボックス/矢印/ライン + テキスト)を使用
- 単純なデータチャート(棒、円、折れ線など)には pptxgenjs チャートを使用
複雑な統計チャート(ヒートマップ、散布図、箱ひげ図)で pptxgenjs チャートが処理できない場合にのみ、matplotlib にフォールバックします。 図がネイティブシェイプには複雑すぎて、かつ多数のクロスリンクを含む場合にのみ、Mermaid にフォールバックします。
オプションB:Matplotlib/Python チャート
PPTテーマに合わせて、最初にカラーパレットを定義します。
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
# ============================================================
# カラーパレット - PPTテーマに合わせる
# ============================================================
# 例:「オーシャングラデーション」テーマ
COLORS = {
'primary': '#065A82',
'secondary': '#1C7293',
'accent': '#21295C',
'background': '#F0F7FA',
'text': '#21295C',
'light': '#E8F4F8',
}
# 複数データ系列のカラーサイクル
COLOR_CYCLE = [COLORS['primary'], COLORS['secondary'], COLORS['accent'], '#4A90A4', '#2D5A6B']
# テーマをグローバルに適用
plt.rcParams.update({
'axes.prop_cycle': plt.cycler(color=COLOR_CYCLE),
'axes.facecolor': 'none',
'axes.edgecolor': COLORS['text'],
'axes.labelcolor': COLORS['text'],
'text.color': COLORS['text'],
'xtick.color': COLORS['text'],
'ytick.color': COLORS['text'],
'figure.facecolor': 'none',
'font.family': 'sans-serif',
'font.size': 12,
})
# ============================================================
# テーマカラーでチャート作成
fig, ax = plt.subplots(figsize=(8, 5), dpi=150)
bars = ax.bar(['Q1', 'Q2', 'Q3', 'Q4'], [25, 40, 35, 50],
color=[COLORS['primary'], COLORS['secondary'], COLORS['primary'], COLORS['secondary']],
edgecolor=COLORS['accent'], linewidth=1.5)
ax.set_title('四半期収益', fontsize=16, fontweight='bold', color=COLORS['text'])
ax.set_ylabel('収益(百万$)', color=COLORS['text'])
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.tight_layout()
width_px, height_px = int(8 * 150), int(5 * 150)
plt.savefig(f'chart_{width_px}x{height_px}.png', dpi=150, transparent=True)
plt.close()
Matplotlib パレットテンプレート:
# ミッドナイト エグゼクティブ
COLORS = {'primary': '#1E2761', 'secondary': '#CADCFC', 'accent': '#FFFFFF', 'text': '#1E2761'}
# フォレスト&モス
COLORS = {'primary': '#2C5F2D', 'secondary': '#97BC62', 'accent': '#F5F5F5', 'text': '#2C5F2D'}
# コーラル エナジー
COLORS = {'primary': '#F96167', 'secondary': '#F9E795', 'accent': '#2F3C7E', 'text': '#2F3C7E'}
# ウォーム テラコッタ
COLORS = {'primary': '#B85042', 'secondary': '#E7E8D1', 'accent': '#A7BEAE', 'text': '#B85042'}
# ティール トラスト
COLORS = {'primary': '#028090', 'secondary': '#00A896', 'accent': '#02C39A', 'text': '#028090'}
用途:
- 複雑な統計チャート(棒、折れ線、円、散布、レーダーなど)
- pptxgenjs がサポートしていないカスタムビジュアライゼーション
- ヒートマップ、散布図、箱ひげ図
⚠️ matplotlib を以下の用途に使用しないでください:
- アーキテクチャ図
- フローチャート / プロセス図
- 組織図 / 階層図
- ネットワークトポロジ図
- コンポーネント間の関係を主に示す図
これらは pptxgenjs のネイティブシェイプで構築し、編集可能なPPTオブジェクトとしてレンダリングされる必要があります(ラスター画像ではありません)。
matplotlib - CJKサポート付きチャート
中国語テキストを含む matplotlib チャート/グラフを作成する場合は、フォントを設定する必要があります。
import os
import platform
import matplotlib.pyplot as plt
import matplotlib
def setup_matplotlib_cjk():
"""CJK文字をサポートするように matplotlib を設定"""
system = platform.system()
if system == "Darwin": # macOS
font_names = ['Arial Unicode MS', 'PingFang SC', 'Heiti SC', 'STHeiti']
elif system == "Windows":
font_names = ['Microsoft YaHei', 'SimHei', 'SimSun']
else: # Linux
font_names = ['Noto Sans CJK SC', 'WenQuanYi Zen Hei', 'Droid Sans Fallback']
# 利用可能なフォントを検索
available_fonts = [f.name for f in matplotlib.font_manager.fontManager.ttflist]
for font_name in font_names:
if font_name in available_fonts:
plt.rcParams['font.sans-serif'] = [font_name] + plt.rcParams['font.sans-serif']
plt.rcParams['axes.unicode_minus'] = False # マイナス記号の表示を修正
return font_name
return None
# チャート作成前にCJKフォントを設定
cjk_font = setup_matplotlib_cjk()
# 中国語ラベル付き棒グラフを作成
categories = ['第一季度', '第二季度', '第三季度', '第四季度']
values = [120, 135, 142, 158]
plt.figure(figsize=(10, 6))
plt.bar(categories, values, color='steelblue')
plt.title('四半期販売データ Quarterly Sales', fontsize=16)
plt.xlabel('四半期 Quarter', fontsize=12)
plt.ylabel('売上 Sales', fontsize=12)
plt.tight_layout()
plt.savefig('chart.png', dpi=150)
plt.close()
オプションC:画像のウェブ検索
以下の場合に関連画像を検索します:
- ストックフォトやイラストが必要な場合
- アイコンやロゴが必要な場合
- コンセプトの参照画像が必要な場合
オプションD:Mermaid 図(最終手段)
図がネイティブシェイプ/レイアウトでクリーンに表現できない場合にのみ使用し、デッキと一貫性を保ちます。
# 必要に応じてインストール:npm install -g @mermaid-js/mermaid-cli
PPTパレットに合わせたテーマ設定ファイルを作成します。
// mermaid-config.json - 「オーシャングラデーション」テーマの例
{
"theme": "base",
"themeVariables": {
"primaryColor": "#065A82",
"primaryTextColor": "#FFFFFF",
"primaryBorderColor": "#21295C",
"secondaryColor": "#1C7293",
"secondaryTextColor": "#FFFFFF",
"secondaryBorderColor": "#065A82",
"tertiaryColor": "#E8F4F8",
"tertiaryTextColor": "#21295C",
"lineColor": "#21295C",
"textColor": "#21295C",
"mainBkg": "#E8F4F8",
"nodeBorder": "#065A82",
"clusterBkg": "#F0F7FA",
"titleColor": "#21295C",
"edgeLabelBackground": "#FFFFFF"
}
}
cat > diagram.mmd << 'EOF'
graph LR
A[クライアント] --> B[APIゲートウェイ]
B --> C[サービスA]
B --> D[サービスB]
EOF
# PPT使用には高解像度エクスポートを推奨
mmdc -i diagram.mmd -o diagram.png -c mermaid-config.json -b white -w 1600 --scale 2
ステップ3:画像命名規則(必須)
生成されるすべての画像は、ファイル名に寸法を含める必要があります。
{name}_{width}x{height}.png
例:
architecture_800x600.png- 幅800px、高さ600pxtimeline_1200x400.png- 幅1200px、高さ400pxchart_600x600.png- 600pxの正方形
画像を保存する際は、常に寸法を含めてください。
# Matplotlib の例
fig, ax = plt.subplots(figsize=(8, 5), dpi=150)
# ... チャートを作成 ...
width_px = int(8 * 150) # 1200
height_px = int(5 * 150) # 750
plt.savefig(f'chart_{width_px}x{height_px}.png', dpi=150, transparent=True)
# 一般的な画像生成コマンド(該当する場合)
# ```
# ...
# filename="diagram_1600x900.png"
# ...
# ```