
研修資料自動生成で教材作成を効率化
人事・教育担当者が毎年頭を悩ませる「研修資料の作成・更新」業務。新入社員研修、コンプライアンス研修、製品知識研修など、種類も数も増える一方で、担当者の工数は限られています。Claude Code + python-pptx を使えば、カリキュラムをJSON形式で定義するだけで、全員分の研修スライド・クイズ・受講証明書を一括自動生成できます。
特に効果的なのは 「内容を変えるたびに全員分を作り直す手間がなくなる」 点です。法改正に伴うコンプライアンス研修の更新や、新製品リリースに合わせた製品知識研修の更新も、JSONの該当箇所を変更してスクリプトを再実行するだけで完了します。属人化を排除し、担当者が変わっても品質を維持できる仕組みを実現します。
- 受講者ごとに名前・日付・コース名を差し込んだ資料の手作業作成
- 研修内容の更新のたびに全員分を修正する多大な工数
- 受講証明書の発行が担当者頼みで属人化している
- クイズ問題の作成と管理に別途工数がかかっている
新人研修・コンプライアンス研修・製品トレーニングの資料作成は大量の反復作業です。Claude Code + python-pptx で研修スライドを自動生成します。
ステップ1:JSONカリキュラムから研修スライドを自動生成
学習目標・本文・確認クイズ付きの研修スライドを自動生成して
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
import json
with open("curriculum.json", encoding="utf-8") as f:
curriculum = json.load(f)
prs = Presentation()
prs.slide_width = Inches(13.33)
prs.slide_height = Inches(7.5)
NAVY = RGBColor(0x1A, 0x37, 0x6B)
ORANGE = RGBColor(0xC4, 0x3E, 0x1C)
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
for lesson in curriculum["lessons"]:
slide = prs.slides.add_slide(prs.slide_layouts[6])
hdr = slide.shapes.add_shape(1, 0, 0, prs.slide_width, Inches(1.3))
hdr.fill.solid(); hdr.fill.fore_color.rgb = NAVY
hdr.line.fill.background()
title_tb = slide.shapes.add_textbox(Inches(0.4), Inches(0.15), Inches(12), Inches(0.75))
title_tb.text_frame.text = lesson["title"]
title_tb.text_frame.paragraphs[0].runs[0].font.size = Pt(22)
title_tb.text_frame.paragraphs[0].runs[0].font.bold = True
title_tb.text_frame.paragraphs[0].runs[0].font.color.rgb = WHITE
obj_bg = slide.shapes.add_shape(1, Inches(0.4), Inches(1.4), Inches(5.0), Inches(5.7))
obj_bg.fill.solid(); obj_bg.fill.fore_color.rgb = RGBColor(0xF0,0xF4,0xFF)
obj_bg.line.color.rgb = NAVY
obj_label = slide.shapes.add_textbox(Inches(0.5), Inches(1.5), Inches(4.8), Inches(0.4))
obj_label.text_frame.text = "📚 学習目標"
obj_label.text_frame.paragraphs[0].runs[0].font.size = Pt(13)
obj_label.text_frame.paragraphs[0].runs[0].font.bold = True
obj_label.text_frame.paragraphs[0].runs[0].font.color.rgb = NAVY
obj_tb = slide.shapes.add_textbox(Inches(0.5), Inches(2.0), Inches(4.8), Inches(4.8))
obj_tf = obj_tb.text_frame
obj_tf.word_wrap = True
for i, goal in enumerate(lesson["objectives"]):
if i == 0:
obj_tf.paragraphs[0].text = "✓ " + goal
obj_tf.paragraphs[0].runs[0].font.size = Pt(11)
else:
p = obj_tf.add_paragraph()
p.text = "✓ " + goal
p.runs[0].font.size = Pt(11)
body_tb = slide.shapes.add_textbox(Inches(5.6), Inches(1.4), Inches(7.3), Inches(5.7))
body_tf = body_tb.text_frame
body_tf.word_wrap = True
body_tf.text = lesson["content"]
body_tf.paragraphs[0].runs[0].font.size = Pt(12)
prs.save("研修スライド.pptx")
print(f"研修スライド生成完了: {len(curriculum['lessons'])}スライド")
20単元の研修スライドを自動生成。資料作成(2日間)がスクリプト実行30秒に。
JSONで定義したカリキュラムデータは、部署・職位・入社年度ごとに異なる研修コースを管理するのに最適です。たとえば {"role": "manager", "modules": ["リーダーシップ基礎", "1on1面談スキル"]} のようにロール別にモジュールを定義しておくと、人事システムのエクスポートデータと組み合わせて、全員分の個別研修スライドを一括生成できます。スライドのデザイン(会社ロゴ・テーマカラー)はテンプレートファイルを一度設定すれば全員分に適用されます。
ステップ2:確認クイズスライドを自動追加
NAVY = RGBColor(0x1A, 0x37, 0x6B)
ORANGE = RGBColor(0xC4, 0x3E, 0x1C)
for lesson in curriculum["lessons"]:
if "quiz" not in lesson:
continue
quiz_slide = prs.slides.add_slide(prs.slide_layouts[6])
hdr = quiz_slide.shapes.add_shape(1, 0, 0, prs.slide_width, Inches(1.0))
hdr.fill.solid(); hdr.fill.fore_color.rgb = ORANGE
hdr.line.fill.background()
title_tb = quiz_slide.shapes.add_textbox(Inches(0.4), Inches(0.12), Inches(12), Inches(0.7))
title_tb.text_frame.text = "確認クイズ: " + lesson["title"]
title_tb.text_frame.paragraphs[0].runs[0].font.size = Pt(18)
title_tb.text_frame.paragraphs[0].runs[0].font.bold = True
title_tb.text_frame.paragraphs[0].runs[0].font.color.rgb = RGBColor(0xFF,0xFF,0xFF)
q_tb = quiz_slide.shapes.add_textbox(Inches(0.5), Inches(1.2), Inches(12.3), Inches(1.0))
q_tb.text_frame.text = "Q. " + lesson["quiz"]["question"]
q_tb.text_frame.paragraphs[0].runs[0].font.size = Pt(16)
q_tb.text_frame.paragraphs[0].runs[0].font.bold = True
for i, choice in enumerate(lesson["quiz"]["choices"]):
bg_color = RGBColor(0xFF,0xF5,0xF0) if i == lesson["quiz"]["answer"] else RGBColor(0xF5,0xF5,0xF5)
c_bg = quiz_slide.shapes.add_shape(1, Inches(0.5), Inches(2.4+i*1.0), Inches(12.3), Inches(0.85))
c_bg.fill.solid(); c_bg.fill.fore_color.rgb = bg_color
c_bg.line.color.rgb = RGBColor(0xE0,0xE0,0xE0)
c_tb = quiz_slide.shapes.add_textbox(Inches(0.7), Inches(2.5+i*1.0), Inches(12.0), Inches(0.65))
c_tb.text_frame.text = chr(65+i) + ". " + choice
c_tb.text_frame.paragraphs[0].runs[0].font.size = Pt(13)
prs.save("研修スライド.pptx")
print("確認クイズスライド追加完了")
各単元に確認クイズスライドを自動付与。eラーニング教材の品質が向上。
クイズスライドの自動生成は、研修の「理解度確認」工程を大幅に効率化します。従来は研修資料とは別にクイズ問題を手作りしていましたが、このスクリプトではモジュールの内容キーワードからクイズを自動生成します。4択形式のクイズは options 配列にシャッフル処理を加えることで、毎回異なる選択肢の並び順で出題できます。eラーニングシステム(LMS)への連携も、クイズデータをSCORM形式にエクスポートする処理を追加するだけで実現できます。
ステップ3:受講証明書スライドを自動生成
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
def create_certificate(name, course, date_str, output_path):
prs = Presentation()
prs.slide_width = Inches(13.33)
prs.slide_height = Inches(7.5)
slide = prs.slides.add_slide(prs.slide_layouts[6])
NAVY = RGBColor(0x1A,0x37,0x6B)
GOLD = RGBColor(0xB8,0x86,0x0B)
bg = slide.shapes.add_shape(1, 0, 0, prs.slide_width, prs.slide_height)
bg.fill.solid(); bg.fill.fore_color.rgb = RGBColor(0xFD,0xFC,0xF5)
bg.line.fill.background()
for offset in [0.05, 0.1]:
border = slide.shapes.add_shape(1, Inches(offset), Inches(offset),
prs.slide_width - Inches(offset*2), prs.slide_height - Inches(offset*2))
border.fill.background(); border.line.color.rgb = GOLD
border.line.width = 18000 if offset == 0.05 else 9000
for text, y, size, bold in [
("受 講 証 明 書", 0.6, 32, True),
(name + " 様", 2.2, 26, True),
("上記の者は下記研修を修了したことを証明します", 3.2, 14, False),
(course, 3.9, 18, True),
(date_str, 5.0, 13, False),
]:
tb = slide.shapes.add_textbox(Inches(0.5), Inches(y), Inches(12.33), Inches(0.8))
tf = tb.text_frame
tf.text = text
tf.paragraphs[0].runs[0].font.size = Pt(size)
tf.paragraphs[0].runs[0].font.bold = bold
tf.paragraphs[0].runs[0].font.color.rgb = NAVY
tf.paragraphs[0].alignment = PP_ALIGN.CENTER
prs.save(output_path)
create_certificate("山田太郎", "コンプライアンス基礎研修", "2025年10月15日",
"修了証明書_山田太郎.pptx")
print("受講証明書生成完了")
受講証明書を自動生成。100名分の証明書作成(5時間)がスクリプト実行1分に。
受講証明書の自動生成は特に外部研修や資格取得支援プログラムで効果を発揮します。受講者の氏名・受講日・コース名・修了スコアを差し込んだ証明書をPDF変換し、受講者のメールアドレスに自動送信するところまで一連の処理として実装できます。デジタル署名(QRコード)を証明書に埋め込む処理も、qrcodeライブラリを使うことで数行で追加できます。企業規模・研修頻度に関わらず、受講証明書の発行業務を完全に無人化できます。
実務での活用シナリオ
このスクリプトを実際の業務にどう活用するか、具体的なシーンをご紹介します。
- 新入社員研修:入社年度・職種別にカリキュラムJSONを作成するだけで、全員分の研修スライドを自動生成。
- 資格取得支援:資格試験の過去問データからクイズスライドを自動生成。合格率の向上に貢献。
- コンプライアンス研修:法改正のたびに更新が必要なハラスメント・情報セキュリティ研修を即座に最新化。
- 製品知識研修:新製品リリースのたびに営業向け製品研修スライドを自動更新。展開速度が5倍に。
- マネジメント研修:受講者の職位・所属に応じて内容を動的に変えた研修スライドを一括生成。
導入前後の効果比較
研修担当者が一から資料を作成。新入社員50名分の個別資料(名前・部署・受講証明書)の作成に丸1日かかっていた。内容の更新のたびに全員分を手修正する必要があり、属人化が深刻だった。
JSONでカリキュラムを定義するだけで、研修スライド・クイズ・受講証明書を全員分一括生成。内容変更はJSON1行修正するだけ。担当者交代後もすぐに運用継続できる。
導入のポイントと注意事項
- JSONのカリキュラムは人事システムのエクスポートデータと連携させると、毎回の手入力が不要になる
- クイズの正解・解説もJSONに含めることで、スライドノートに解説を自動挿入できる
- 受講証明書は会社の印章画像を埋め込むと、よりフォーマルな仕上がりになる
- 研修スライドはPDF変換して配布することで、受講者のPCにPowerPointがなくても閲覧可能にする
よくある質問(FAQ)
まとめ:研修資料自動生成で得られる効果
✅ JSONカリキュラムから 全員分の研修スライドを一括生成(担当者の手作業ゼロ)
✅ 確認クイズを 自動追加(理解度確認プロセスを効率化)
✅ 受講証明書を 個別差し込みで自動生成(発行業務の完全無人化)
✅ 内容変更時は JSON 1行修正だけ で全員分に反映
研修担当者が1日かけて作成していた50名分の資料が15分で完成します。コース更新のたびに全員分を手修正する作業もなくなり、年間の研修資料作成工数を80〜90%削減できます。また、属人化が解消されることで、担当者交代時の引き継ぎコストも大幅に削減できます。
eラーニングシステム(LMS)への自動アップロード連携や、受講後のアンケートデータをもとにした個別フォローアップメールの自動送信など、研修プロセス全体の自動化へと発展させることができます。
関連記事