
python-pptxでアニメーション・トランジションを自動設定
- アニメーション一括自動設定の完全自動化を実現するPythonスクリプトを5ステップで解説
- 「100枚スライドへの手動アニメーション設定」という課題を根本から解消する
- Claude Codeへの自然言語指示だけでスクリプトを生成できる
- 月・週・日単位の定期実行で完全無人化を実現する方法も紹介
以下のステップを順番に実行することで、今日から業務自動化を始められます。コピーして使えるコードと、Claude Codeへの指示文をセットで解説します。
スライドのアニメーション設定は手動では時間がかかります。Claude Code を使ってXMLレベルでトランジションを一括設定する方法を解説します。
ステップ1:全スライドにフェードトランジションを一括設定
from pptx import Presentation
from pptx.oxml.ns import qn
from lxml import etree
prs = Presentation("プレゼン.pptx")
for slide in prs.slides:
existing = slide._element.find(qn("p:transition"))
if existing is not None:
slide._element.remove(existing)
FADE_XML = (
' '
)
transition = etree.fromstring(FADE_XML)
slide._element.append(transition)
prs.save("プレゼン_フェード.pptx")
print(f"{len(prs.slides)}スライドにフェードトランジション設定完了")
全スライドにフェードトランジションを一括設定。手動設定(20枚×30秒)がスクリプト実行2秒に。
ステップ2:プッシュ・ワイプなど複数トランジションを使い分け
from pptx import Presentation
from pptx.oxml.ns import qn
from lxml import etree
prs = Presentation("プレゼン.pptx")
NS = "http://schemas.openxmlformats.org/presentationml/2006/main"
TRANSITIONS = {
"fade": ' ',
"push": ' ',
"wipe": ' ',
"zoom": ' ',
}
for i, slide in enumerate(prs.slides):
existing = slide._element.find(qn("p:transition"))
if existing is not None:
slide._element.remove(existing)
if i == 0:
t_type = "zoom"
elif i % 5 == 0:
t_type = "push"
else:
t_type = "fade"
xml_str = TRANSITIONS[t_type].format(ns=NS)
slide._element.append(etree.fromstring(xml_str))
prs.save("プレゼン_トランジション多彩.pptx")
print("スライドタイプ別トランジション設定完了")
タイトルはズーム・区切りはプッシュ・通常はフェードと使い分けを自動設定。メリハリのあるプレゼンに。
ステップ3:既存トランジションを一括除去してクリーンに
from pptx import Presentation
from pptx.oxml.ns import qn
prs = Presentation("バラバラトランジション.pptx")
removed = 0
for slide in prs.slides:
t = slide._element.find(qn("p:transition"))
if t is not None:
slide._element.remove(t)
removed += 1
prs.save("クリーンプレゼン.pptx")
print(f"トランジション除去: {removed}スライド")
バラバラに設定されたトランジションを一括除去。統一感のあるプレゼンに整備。
ステップ4:スライド番号・フッターを全スライドに一括追加
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
prs = Presentation("プレゼン.pptx")
total = len(prs.slides)
for i, slide in enumerate(prs.slides, 1):
# ページ番号
tb = slide.shapes.add_textbox(
Inches(12.5), Inches(7.1), Inches(0.6), Inches(0.28)
)
tf = tb.text_frame
tf.text = f"{i} / {total}"
tf.paragraphs[0].runs[0].font.size = Pt(9)
tf.paragraphs[0].runs[0].font.color.rgb = RGBColor(0x80, 0x80, 0x80)
# フッターライン
line = slide.shapes.add_shape(1, 0, Inches(7.1), prs.slide_width, Emu(36000))
line.fill.solid()
line.fill.fore_color.rgb = RGBColor(0xC4, 0x3E, 0x1C)
line.line.fill.background()
prs.save("プレゼン_フッター付.pptx")
print(f"全{total}スライドにページ番号+フッター追加完了")
全スライドにページ番号とフッターラインを一括追加。手動設定(1枚2分×20枚)がスクリプト実行5秒に。
このシステムが解決する課題
プロ品質のアニメーションをコードで一括設定。この自動化が特に効果的な場面と、解決できる課題を整理します。
- アニメーション設定に時間がかかりすぎて、肝心の内容作成に集中できない
- 複数スライドに同じアニメーションを設定するのが煩雑で一貫性がない
- アニメーションのタイミング(遅延・速度)調整が感覚的で再現性がない
- テンプレートのアニメーション設定を新しいプレゼンに移行する方法がわからない
実務での活用シナリオ
導入前後の効果比較
100枚のスライドにアニメーションを手動設定するのに半日以上かかっていた。設定の一貫性を保つのが難しく、スライドごとに微妙に異なるアニメーションが混在していた。
python-pptxとXML操作でアニメーションを一括設定。フェード・スライドイン・バウンスなどのアニメーション種類・速度・遅延をコードで定義し、全スライドに均一に適用。
導入のポイントと注意事項
- python-pptxはアニメーションの直接API未提供のため、XMLを直接操作する必要がある。Claude Codeに任せれば自動で適切なXMLを生成してくれる
- アニメーションの遅延(delay)は適度に設定(0.3〜0.5秒)し、多用しすぎないことが重要
- 発表練習のためにアニメーションを一時的に無効化したい場合は、PPTXのスライドショー設定で「アニメーションなし」を選択できる
- 同じアニメーション設定を新しいPPTXに移行する場合は、XML部分をコピーする処理をスクリプト化すると毎回の設定が不要になる
よくある質問(FAQ)
まとめ
✅ 全スライドへのトランジション一括設定・除去
✅ スライドタイプ別に異なるトランジションを自動使い分け
✅ ページ番号・フッターの一括追加で仕上げを自動化
どんな現場で使われているか:活用シナリオ
実装で押さえるべき重要ポイント
- 1
アニメーションはXML操作で実装:python-pptxのネイティブAPIはアニメーション操作に対応していません。lxml等でスライドXMLに直接アニメーションタグを追加する方法をClaude Codeが実装します。
- 2
アニメーションの種類・タイミングを外部設定化:「フェードイン0.5秒後・クリックで次へ」などの設定をJSONで外出しすることで、コードを変更せずにアニメーションパターンを変更できます。
- 3
適用後はLibreOfficeでプレビュー確認:XMLを直接操作するため意図しない壊れが起きることがあります。LibreOfficeでPDF変換して各スライドをプレビュー確認するQAステップを実装してください。
ビジネスインパクト
この記事のまとめ
- ✅ python-pptxとXML操作でPowerPointアニメーションを自動設定できる
- ✅ 複数スライドに同一のアニメーションパターンを一括適用できる
- ✅ アニメーション設定に費やす30分を数分に削減できる
- ✅ アニメーション定義をJSONで管理して再利用・変更が簡単になる
関連記事