はじめに
社内で、IBM BobのPower Point作成スキルが共有されていたので、実際に使ってみました。
JSON形式でコンテンツを定義すると、テンプレートベースでPowerPointを自動生成してくれるツールです。
これを使うことによって、標準化されたテンプレートの型に従ったパワポが作成されます。
実践内容
1. 環境セットアップ
# リポジトリのクローン
git clone git@github.ibm.com:bob-garage/community-skills.git
cd community-skills/skills/draft-powerpoint
# 仮想環境作成
python3 -m venv venv
source venv/bin/activate
# 依存関係インストール
pip install python-pptx lxml
2. テンプレートの確認
# スピーカーノートを抽出して、使える図形を確認
python3 scripts/pptx_workflow.py extract \
assets/IBM_Presentation_Template_v_2_0_AI_ready_POC_0.7.pptx
出力例:
## Slide 1
Editable elements:
- title: Main slide title
- name_and_job_title: Presenter name + job title
- contact_details: Email + phone
3. リクエストファイル作成
ここで、作りたいスライドの内容を決める。
{
"template": "assets/IBM_Presentation_Template_v_2_0_AI_ready_POC_0.7.pptx",
"deck": [
{"slide_no": 1, "id": "title"}
],
"content": {
"title": {
"title": "私の最初のプレゼンテーション",
"name_and_job_title": "川堀 日菜乃\nソフトウェアエンジニア",
"contact_details": "hinano@example.com\n090-1234-5678"
}
}
}
4. PowerPoint生成
python3 scripts/pptx_workflow.py generate - \
--request my_first_request.json \
-o my_first_presentation.pptx

試しに一枚だけですが、ちゃんとテンプレに沿って作成されました。
つまずいたポイントと解決方法
1. SSH接続
最近SSH鍵を消したので、鍵を作り直しました。
エラー:
git@github.ibm.com: Permission denied (publickey).
解決:
# SSHキー生成
ssh-keygen -t ed25519 -C "your_email@ibm.com"
# 公開鍵をコピーしてIBM GitHubに登録
cat ~/.ssh/id_ed25519.pub
# https://github.ibm.com/settings/keys に登録
2. 図形名の間違い
エラー:
{
"status": "error",
"message": "Illegal targets in request",
"illegal": [
{
"illegal_shape": "subtitle"
}
]
}
原因: スライド1に subtitle という図形が存在しない
解決: エラーメッセージの allowed_shapes を確認して、正しい図形名を使用
学んだこと
1. エラーメッセージが親切
エラーが発生すると、使用可能な図形名を教えてくれる:
{
"allowed_shapes": [
{"shape": "title"},
{"shape": "name_and_job_title"},
{"shape": "contact_details"}
]
}
2. スピーカーノートが重要
テンプレートのスピーカーノートに、各図形の使い方が詳しく書かれている。最初に必ず確認すべき。ここ日本語にしたい。
3. テンプレートの書式が保持される
生成されたPowerPointは:
- IBMのブランディングが完全に保持
- フォントや色も維持
- 日本語も問題なく表示
- 通常のPowerPointとして編集可能
と、しっかりと会社用のテンプレートが守られていました。
まとめ
形式に沿ったパワポが生成されて嬉しかった。
今は英語だけなので日本語にしたり、ボブと会話するだけでスライド生成用のリクエストができればより簡単でいいなと思った。