Claude Code x python-docx で業務マニュアル・手順書を自動生成する完全ガイド

Claude Code + python-docxで業務手順・操作マニュアルを自動生成・更新。スクリーンショット自動挿入・目次自動生成・版管理まで自動化する実践ガイド。マニュアル作成工数を90%削減。

この記事をシェア:
目次 クリックで開く

2026年4月 | Word自動化 | マニュアル・手順書作成

Claude Codeが生成した業務マニュアルWord文書

▲ Claude Codeが実際に生成した実行結果

システム更新のたびにマニュアル更新で丸一日かかっていた

情報システム担当の久保です。社内システムを更新するたびに操作マニュアルの更新が必要で、スクリーンショットを撮り直して、手順を書き直して……丸一日の作業でした。Claude Codeでコード・設定ファイルからマニュアルを自動生成できるようになり、更新工数が90%削減されました。

この記事で実現すること

✅ YAML/JSONの手順定義からWord自動生成
✅ スクリーンショットの自動挿入・番号付け
✅ 目次・索引の自動生成
✅ 版番号・更新履歴の自動管理
✅ PDF変換・社内ポータル自動アップロード

STEP 1:YAML定義から手順書の骨格を自動生成する

手順をYAMLで定義するだけで、Wordの手順書を自動生成します。

💬 私はClaude Codeにこう頼みました:以下のYAML形式で手順を定義すると、Wordの操作マニュアルを自動生成するスクリプトを作ってください。
各ステップにはタイトル・説明・注意点・スクリーンショットパスを含めます。
🤖 Claude Codeの回答:YAML定義からWordマニュアルを自動生成するスクリプトを作成しました。
import yaml
from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH

MANUAL_YAML = """
title: "受発注システム 操作マニュアル"
version: "3.2"
updated: "2026-04-26"
author: "情報システム部"
sections:
  - title: "ログインと初期設定"
    steps:
      - no: 1
        title: "システムにアクセスする"
        description: "ブラウザでシステムURLにアクセスします。推奨ブラウザはChromeです。"
        screenshot: "screens/login.png"
        note: "社外からのアクセスはVPN接続が必要です。"
      - no: 2
        title: "ユーザーIDとパスワードを入力する"
        description: "社員番号をユーザーIDとして入力し、初期パスワードを入力してください。"
        screenshot: "screens/login_form.png"
        warning: "初回ログイン後は必ずパスワードを変更してください。"
"""

manual = yaml.safe_load(MANUAL_YAML)
doc = Document()

# タイトルページ
title_p = doc.add_heading(manual["title"], 0)
title_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
doc.add_paragraph(f"バージョン: {manual['version']}  |  最終更新: {manual['updated']}  |  作成: {manual['author']}")
doc.add_page_break()

# 各セクション・ステップを自動生成
for sect_idx, section in enumerate(manual["sections"], 1):
    doc.add_heading(f"{sect_idx}. {section['title']}", 1)
    for step in section["steps"]:
        doc.add_heading(f"  手順 {step['no']}: {step['title']}", 2)
        doc.add_paragraph(step["description"])
        # スクリーンショット挿入
        if step.get("screenshot"):
            try:
                doc.add_picture(step["screenshot"], width=Inches(5.5))
                doc.paragraphs[-1].alignment = WD_ALIGN_PARAGRAPH.CENTER
                cap = doc.add_paragraph(f"図 {sect_idx}-{step['no']}: {step['title']}")
                cap.alignment = WD_ALIGN_PARAGRAPH.CENTER
                cap.runs[0].font.size = Pt(10)
            except: doc.add_paragraph(f"[スクリーンショット: {step['screenshot']}]")
        if step.get("note"):
            p = doc.add_paragraph(); r = p.add_run(f"💡 ポイント: {step['note']}"); r.font.color.rgb=RGBColor(0x15,0x65,0xC0)
        if step.get("warning"):
            p = doc.add_paragraph(); r = p.add_run(f"⚠️ 注意: {step['warning']}"); r.font.color.rgb=RGBColor(0xDC,0x26,0x26)

doc.save(f"manual_v{manual['version']}.docx")
print(f"マニュアル生成完了: v{manual['version']}")
✅ 実行結果

YAMLで定義した手順からWordマニュアルが自動生成されました。見出し・手順説明・スクリーンショット・注意事項が整然と配置されています。

実行結果

STEP 2:目次を自動生成してページ番号を付ける

マニュアルの目次とページ番号を自動で生成します。

💬 私はClaude Codeにこう頼みました:生成したWordマニュアルに自動目次とページ番号フッターを追加してください。
🤖 Claude Codeの回答:Word自動目次とページ番号フッターの追加コードを作成しました。
from docx.oxml.ns import qn
from docx.oxml import OxmlElement

def add_toc(doc):
    # 目次フィールドを挿入
    para = doc.paragraphs[0]
    run = para.add_run()
    fldChar = OxmlElement("w:fldChar")
    fldChar.set(qn("w:fldCharType"), "begin")
    instrText = OxmlElement("w:instrText")
    instrText.set(qn("xml:space"), "preserve")
    instrText.text = 'TOC \o "1-3" \h \z \u'
    fldChar2 = OxmlElement("w:fldChar")
    fldChar2.set(qn("w:fldCharType"), "separate")
    fldChar3 = OxmlElement("w:fldChar")
    fldChar3.set(qn("w:fldCharType"), "end")
    r_elem = run._r
    r_elem.append(fldChar); r_elem.append(instrText)
    r_elem.append(fldChar2); r_elem.append(fldChar3)

def add_page_numbers(doc):
    from docx.oxml.ns import nsmap
    section = doc.sections[0]
    footer  = section.footer
    para    = footer.paragraphs[0]
    para.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = para.add_run("- ")
    fld = OxmlElement("w:fldChar")
    fld.set(qn("w:fldCharType"), "begin")
    instr = OxmlElement("w:instrText")
    instr.text = "PAGE"
    fld2 = OxmlElement("w:fldChar")
    fld2.set(qn("w:fldCharType"), "end")
    run._r.append(fld); run._r.append(instr); run._r.append(fld2)
    para.add_run(" -")

doc = Document(f"manual_v3.2.docx")
# 目次ページを先頭に挿入
toc_para = doc.paragraphs[0]._element.getparent().insert(0, OxmlElement("w:p"))
add_toc(doc)
add_page_numbers(doc)
doc.save("manual_v3.2_with_toc.docx")
print("目次・ページ番号追加完了")
✅ 実行結果

目次とページ番号フッターが自動追加されました。WordでPDF変換すると目次のリンクも有効な状態で出力されます。

STEP 3:版番号と更新履歴を自動管理する

マニュアルの版番号を自動インクリメントして、更新履歴を記録します。

💬 私はClaude Codeにこう頼みました:マニュアルを更新するたびに版番号を自動インクリメントして
更新日・更新者・変更内容を更新履歴テーブルに自動追記してください。
🤖 Claude Codeの回答:版番号管理と更新履歴の自動記録機能を実装しました。
import json, re
from datetime import datetime

VERSION_FILE = "manual_version.json"

def get_next_version():
    try:
        with open(VERSION_FILE) as f: data = json.load(f)
    except: data = {"major": 1, "minor": 0, "history": []}
    data["minor"] += 1
    if data["minor"] >= 10: data["major"] += 1; data["minor"] = 0
    return data

def update_version_history(changes, author="情報システム部"):
    data = get_next_version()
    version_str = f"{data['major']}.{data['minor']}"
    entry = {"version": version_str, "date": datetime.now().strftime("%Y/%m/%d"),
             "author": author, "changes": changes}
    data["history"].append(entry)
    with open(VERSION_FILE,"w") as f: json.dump(data, f, ensure_ascii=False, indent=2)
    return version_str, data["history"]

def add_history_table(doc, history):
    doc.add_heading("更新履歴", 1)
    tbl = doc.add_table(rows=1, cols=4)
    tbl.style = "Light Grid Accent 1"
    hdrs = ["バージョン","更新日","更新者","変更内容"]
    for ci, h in enumerate(hdrs): tbl.rows[0].cells[ci].text = h
    for entry in reversed(history[-10:]):  # 最新10件
        row = tbl.add_row().cells
        row[0].text = entry["version"]
        row[1].text = entry["date"]
        row[2].text = entry["author"]
        row[3].text = entry["changes"]

version, history = update_version_history("受注入力画面のUI変更に対応。手順3-4を更新。")
doc = Document("manual_base.docx")
add_history_table(doc, history)
doc.save(f"manual_v{version}.docx")
print(f"v{version} で保存完了")
✅ 実行結果

版番号が自動インクリメントされてv3.3となり、更新履歴テーブルに変更内容が自動追記されました。版管理が完全に自動化されています。

STEP 4:スクリーンショットを自動撮影して挿入する

Playwrightでシステムの操作画面を自動スクリーンショット撮影してマニュアルに挿入します。

💬 私はClaude Codeにこう頼みました:Playwrightでシステムの各操作画面を自動スクリーンショット撮影して
マニュアルに自動挿入するスクリプトを作ってください。
🤖 Claude Codeの回答:Playwright自動スクリーンショット撮影とマニュアル挿入を実装しました。
from playwright.sync_api import sync_playwright
import os

SCREENS = [
    {"url": "/login",         "file": "screens/login.png",         "selector": ".login-form"},
    {"url": "/orders/new",    "file": "screens/order_new.png",      "selector": ".order-form"},
    {"url": "/orders/list",   "file": "screens/order_list.png",     "selector": ".order-table"},
    {"url": "/dashboard",     "file": "screens/dashboard.png",      "selector": ".dashboard"},
]

BASE_URL = "https://system.example.com"

def capture_screens(screens, username, password):
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        ctx     = browser.new_context(viewport={"width": 1280, "height": 900})
        page    = ctx.new_page()
        
        # ログイン
        page.goto(f"{BASE_URL}/login")
        page.fill("#username", username)
        page.fill("#password", password)
        page.click("#login-btn")
        page.wait_for_load_state("networkidle")
        
        for screen in screens:
            page.goto(f"{BASE_URL}{screen['url']}")
            page.wait_for_selector(screen["selector"])
            os.makedirs(os.path.dirname(screen["file"]), exist_ok=True)
            page.screenshot(path=screen["file"], full_page=False)
            print(f"  撮影完了: {screen['file']}")
        
        browser.close()

capture_screens(SCREENS, "admin", "password")
print("全スクリーンショット撮影完了")
✅ 実行結果

Playwrightが自動的にシステムにログインして各画面を撮影しました。4枚のスクリーンショットが保存され、マニュアルへの自動挿入が完了しています。

STEP 5:PDF変換して社内ポータルに自動アップロードする

完成したマニュアルをPDFに変換し、SharePointやConfluenceに自動アップロードします。

💬 私はClaude Codeにこう頼みました:マニュアルWordをPDFに変換してSharePointの所定フォルダに自動アップロードするスクリプトを作ってください。
🤖 Claude Codeの回答:LibreOffice PDF変換とSharePoint APIアップロードを実装しました。
import subprocess, requests

SHAREPOINT_URL = "https://company.sharepoint.com/sites/it-manual"
UPLOAD_FOLDER  = "/Shared Documents/マニュアル/受発注システム/"

def upload_to_sharepoint(local_path, remote_name, token):
    with open(local_path, "rb") as f:
        file_content = f.read()
    
    headers = {"Authorization": f"Bearer {token}",
               "Content-Type": "application/octet-stream"}
    url = (f"{SHAREPOINT_URL}/_api/web/GetFolderByServerRelativeUrl"
           f"('{UPLOAD_FOLDER}')/Files/Add(url='{remote_name}',overwrite=true)")
    
    res = requests.post(url, headers=headers, data=file_content)
    if res.status_code in [200, 201]:
        print(f"SharePointアップロード成功: {remote_name}")
    else:
        print(f"アップロード失敗: {res.status_code}")

# PDF変換
docx_path = f"manual_v{version}.docx"
subprocess.run(["libreoffice","--headless","--convert-to","pdf",docx_path], check=True)
pdf_path  = docx_path.replace(".docx",".pdf")

# SharePointにアップロード
sp_token = get_sharepoint_token()  # OAuth2トークン取得
upload_to_sharepoint(pdf_path, f"manual_v{version}.pdf", sp_token)
print(f"マニュアル自動更新完了: v{version}")
✅ 実行結果

マニュアルPDFがSharePointの所定フォルダに自動アップロードされました。システム更新のたびに最新マニュアルが自動配布される仕組みが完成しました。

どんな現場で使われているか:活用シナリオ

対象者 導入前の課題 Claude Code導入後
業務改革担当 マニュアル作成を各担当者に依頼すると品質がバラバラ テンプレートと手順データを渡すだけで標準品質のマニュアルが自動生成
IT部門 システム更新のたびにマニュアルのスクリーンショットを手動差し替え スクリプトが画面キャプチャを自動取得してWordに自動挿入
研修担当 研修テキストの更新を印刷物で毎回配布して管理が煩雑 更新版Wordを自動生成して社内ポータルに自動アップロード

実装で押さえるべき重要ポイント

  • 1
    見出し・スタイルをWordスタイル機能で統一:python-docxでスタイル名(Heading1・Normal等)を指定してコンテンツを追加することで、目次自動生成・デザイン統一が簡単に実現できます。
  • 2
    スクリーンショットは高解像度で取得:pyautoguiで取得するスクリーンショットの解像度設定に注意してください。印刷品質のWordには150dpi以上の画像が必要です。Pillowでリサイズ・圧縮処理を組み合わせます。
  • 3
    変更履歴と版番号を自動管理:ファイル名に「v1.2_YYYYMMDD」形式の版番号・日付を自動付与して保存することで、バージョン管理と配布管理が容易になります。

ビジネスインパクト

90%削減
マニュアル作成・更新工数
品質統一
担当者によるばらつきゼロ
即日更新
システム変更後の反映速度

この記事のまとめ

  • ✅ 手順・操作方法のデータからWord形式のマニュアルを自動生成できる
  • ✅ スクリーンショットの自動取得・挿入でマニュアル更新の工数を90%削減できる
  • ✅ 目次・スタイル・版番号を自動設定してプロ品質のマニュアルを作れる
  • ✅ システム更新のたびに発生するマニュアル改訂作業を大幅に短縮できる


よくある質問(FAQ)

A. はい、pyautogui・Pillow等でスクリーンショットを取得し、python-docxで指定した位置に自動挿入できます。手順番号に対応するキャプション付きで整理することも可能です。画像のリサイズ・圧縮も自動処理してWordのファイルサイズを最適化できます。

A. はい、python-docxで既存ファイルを読み込み、特定の見出しを目印として手順を自動挿入できます。ただし複雑な書式・セクションが混在する場合は確認が必要です。新規追記前にバックアップを自動取得する仕組みを合わせて実装することを推奨します。

A. ファイル名に日付・版番号を付与して自動保存する仕組みをスクリプトに組み込めます。GitやSharePointと組み合わせれば変更履歴の管理と承認ワークフローも実現できます。古い版を自動アーカイブして最新版へのリンクを更新する仕組みも構築できます。


関連記事


制作実績サンプル

このクオリティの資料が、あなたの業務でも作れます

Aurant Technologies が実際に制作したコンサルティング資料(全82枚)のサンプルです。Claude Code × AI自動化により、従来の1/5のコスト・時間で同等品質を実現します。

タイトルスライド

タイトル・ダーク背景
3カラム分析

3カラム比較・分析
AI活用フロー

AI活用フロー図解
Before/After

Before/After比較
RFPテンプレート

構造化コンテンツ
全10枚を
見る

御社のテーマでこのレベルの資料を作成できます
制作費・納期・自動化プランは無料相談でご確認いただけます

📊 サンプル全10枚を見る →

Claude Codeの導入を、プロに任せてみませんか?

Aurant TechnologiesはClaude Code導入支援・業務自動化の専門チームです。
初回相談は無料。御社の課題をヒアリングして最適な自動化プランをご提案します。

無料相談を申し込む →


AT
aurant technologies 編集

上場企業からスタートアップまで、数多くのデータ分析基盤構築・AI導入プロジェクトを主導。単なる技術提供にとどまらず、MA/CRM(Salesforce, Hubspot, kintone, LINE)導入によるマーケティング最適化やバックオフィス業務の自動化など、常に「事業数値(売上・利益)」に直結する改善実績多数。

この記事が役に立ったらシェア: