mcpField
D
docx

docx

github.com/jst-well-danドキュメント1036 回インストール31 週間前に更新
リポジトリ

docx について

docx は、Word 文書の作成、編集、分析のためのワークフローガイドです。テキスト抽出、XML の確認、文書作成、変更履歴付き編集など、作業に応じた手順を示します。

主な機能

  1. 01変更履歴を保ってテキストを抽出
  2. 02文書の生 XML とメディアを確認
  3. 03docx-js による文書作成
  4. 04Document ライブラリで OOXML を編集
  5. 05変更履歴付きで編集をレビュー
  6. 06文書ページを画像に変換

活用シーン

  1. 01.docx のテキスト抽出と分析
  2. 02新しい Word 文書の作成
  3. 03法律文書や業務文書をレビュー可能な形で編集
  4. 04確認用に文書ページを画像へ変換

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jst-well-dan/skill-box --skill docx

インストール後、Claude Code で/docxを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE.txt
docs/
docx-js.md
ooxml.md
ooxml/schemas/ecma/fouth-edition/
opc-contentTypes.xsd
opc-coreProperties.xsd
opc-digSig.xsd
opc-relationships.xsd
ooxml/schemas/ISO-IEC29500-4_2016/
dml-chart.xsd
dml-chartDrawing.xsd
dml-diagram.xsd
dml-lockedCanvas.xsd
dml-main.xsd
dml-picture.xsd
dml-spreadsheetDrawing.xsd
dml-wordprocessingDrawing.xsd
pml.xsd
shared-additionalCharacteristics.xsd
shared-bibliography.xsd
shared-commonSimpleTypes.xsd
shared-customXmlDataProperties.xsd
shared-customXmlSchemaProperties.xsd
shared-documentPropertiesCustom.xsd
shared-documentPropertiesExtended.xsd
shared-documentPropertiesVariantTypes.xsd
shared-math.xsd
shared-relationshipReference.xsd
sml.xsd
vml-main.xsd
vml-officeDrawing.xsd
vml-presentationDrawing.xsd

詳細

DOCX の作成、編集、分析

概要

ユーザーから、.docx ファイルの作成、編集、内容の分析を依頼される場合があります。.docx ファイルは基本的に、読み取りや編集が可能な XML ファイルやその他のリソースを含む ZIP アーカイブです。タスクに応じて、さまざまなツールやワークフローを利用できます。

ワークフローの判断ツリー

内容の読み取り/分析

以下の「テキスト抽出」または「生 XML へのアクセス」のセクションを使用します。

新規ドキュメントの作成

「新しい Word ドキュメントの作成」ワークフローを使用します。

既存ドキュメントの編集
  • 自分のドキュメント+簡単な変更 「基本的な OOXML 編集」ワークフローを使用します。

  • 他の人のドキュメント 「変更履歴ワークフロー」(推奨されるデフォルト)を使用します。

  • 法務、学術、ビジネス、または政府関連のドキュメント 「変更履歴ワークフロー」(必須)を使用します。

内容の読み取りと分析

テキスト抽出

ドキュメントのテキスト内容を読むだけであれば、pandoc を使ってドキュメントを Markdown に変換します。Pandoc はドキュメント構造の保持に優れており、変更履歴も表示できます。

# Convert document to markdown with tracked changes
pandoc --track-changes=all path-to-file.docx -o output.md
# Options: --track-changes=accept/reject/all
生 XML へのアクセス

コメント、複雑な書式設定、ドキュメント構造、埋め込みメディア、メタデータを扱うには、生 XML へのアクセスが必要です。これらの機能を使用するには、ドキュメントを展開し、生 XML の内容を読み取る必要があります。

ファイルの展開

python ooxml/scripts/unpack.py <office_file> <output_directory>

主なファイル構造
  • word/document.xml - メインのドキュメント内容
  • word/comments.xml - document.xml 内で参照されるコメント
  • word/media/ - 埋め込み画像およびメディアファイル
  • 変更履歴では、<w:ins>(挿入)タグと <w:del>(削除)タグが使用されます。

新しい Word ドキュメントの作成

新しい Word ドキュメントを一から作成する場合は、JavaScript/TypeScript を使って Word ドキュメントを作成できる docx-js を使用します。

ワークフロー
  1. 必須 — ファイル全体を読む:docs/docx-js.md(約 500 行)を最初から最後まで完全に読みます。このファイルを読むときに範囲制限を指定してはいけません。ドキュメント作成に進む前に、詳細な構文、重要な書式設定ルール、ベストプラクティスを把握するため、ファイルの内容をすべて読みます。
  2. Document、Paragraph、TextRun コンポーネントを使用して JavaScript/TypeScript ファイルを作成します(依存関係はすべてインストール済みと想定できます。インストールされていない場合は、以下の依存関係セクションを参照してください)。
  3. Packer.toBuffer() を使用して .docx としてエクスポートします。

既存の Word ドキュメントの編集

既存の Word ドキュメントを編集する場合は、Document ライブラリ(OOXML 操作用の Python ライブラリ)を使用します。このライブラリはインフラストラクチャのセットアップを自動的に処理し、ドキュメントを操作するためのメソッドを提供します。複雑なケースでは、ライブラリを通じて基盤となる DOM に直接アクセスできます。

ワークフロー
  1. 必須 — ファイル全体を読む:docs/ooxml.md(約 600 行)を最初から最後まで完全に読みます。このファイルを読むときに範囲制限を指定してはいけません。Document ライブラリ API と、ドキュメントファイルを直接編集するための XML パターンを把握するため、ファイルの内容をすべて読みます。
  2. ドキュメントを展開します:python ooxml/scripts/unpack.py <office_file> <output_directory>
  3. Document ライブラリを使用する Python スクリプトを作成して実行します(docs/ooxml.md の「Document Library」セクションを参照してください)。
  4. 最終ドキュメントをパッケージ化します:python ooxml/scripts/pack.py <input_directory> <office_file>

Document ライブラリは、一般的な操作向けの高水準メソッドと、複雑なケース向けの DOM への直接アクセスの両方を提供します。

文書レビューのための変更履歴ワークフロー

このワークフローでは、Markdown を使って包括的な変更履歴を計画してから、OOXML に反映できます。重要:変更履歴を完全に反映するには、すべての変更を体系的に実装する必要があります。

バッチ処理の方針:関連する変更を 3~10 件ずつのバッチにまとめます。これにより、効率を維持しながらデバッグを管理しやすくなります。次のバッチに進む前に、各バッチをテストしてください。

原則:最小限かつ正確な編集 変更履歴を実装するときは、実際に変更されるテキストだけに印を付けてください。変更されていないテキストを繰り返すと、編集内容のレビューが難しくなり、プロらしくない印象になります。置換は、[変更されないテキスト] + [削除] + [挿入] + [変更されないテキスト] に分割してください。変更されないテキストについては、元の <w:r> 要素を抽出して再利用し、元の run の RSID を保持してください。

例:「30 days」を文中で「60 days」に変更する場合:

# BAD - Replaces entire sentence
'<w:del><w:r><w:delText>The term is 30 days.</w:delText></w:r></w:del><w:ins><w:r><w:t>The term is 60 days.</w:t></w:r></w:ins>'

# GOOD - Only marks what changed, preserves original <w:r> for unchanged text
'<w:r w:rsidR="00AB12CD"><w:t>The term is </w:t></w:r><w:del><w:r><w:delText>30</w:delText></w:r></w:del><w:ins><w:r><w:t>60</w:t></w:r></w:ins><w:r w:rsidR="00AB12CD"><w:t> days.</w:t></w:r>'
変更履歴を保持した変更ワークフロー
  1. Markdown 形式を取得する:変更履歴を保持したまま、ドキュメントを Markdown に変換します:

    pandoc --track-changes=all path-to-file.docx -o current.md
    
  2. 変更を特定してグループ化する:ドキュメントを確認し、必要な変更をすべて特定して、論理的なバッチに整理します:

    位置を特定する方法(XML 内の変更を見つけるため):

    • セクション番号/見出し番号(例:「Section 3.2」、「Article IV」)
    • 番号付きの段落 ID
    • 周囲のテキストが一意な grep パターン
    • ドキュメントの構造(例:「最初の段落」、「署名欄」)
    • Markdown の行番号は使用しないでください。XML の構造には対応していません。

    バッチの整理方法(関連する変更を 3~10 件ずつグループ化):

    • セクション別:「バッチ 1:Section 2 の修正」、「バッチ 2:Section 5 の更新」
    • 種類別:「バッチ 1:日付の修正」、「バッチ 2:当事者名の変更」
    • 複雑さ別:まず簡単なテキスト置換から始め、複雑な構造変更に取り組みます
    • 順番別:「バッチ 1:1~3 ページ」、「バッチ 2:4~6 ページ」
  3. ドキュメントを読み、展開する:

    • 必須 — ファイル全体を読むこと:docs/ooxml.md(約 600 行)を最初から最後まで読みます。このファイルを読む際に、範囲制限を設定しないでください。「Document Library」および「Tracked Change Patterns」のセクションを特に注意して確認します。
    • ドキュメントを展開する:python ooxml/scripts/unpack.py <file.docx> <dir>
    • 提案された RSID をメモする:unpack スクリプトは、変更履歴に使用する RSID を提案します。手順 4b で使用するため、この RSID をコピーします。
  4. バッチごとに変更を実装する:セクション、種類、または位置関係ごとに変更を論理的にグループ化し、1 つのスクリプトでまとめて実装します。この方法には次の利点があります:

    • デバッグが容易になります(バッチが小さいほど、エラーを特定しやすくなります)
    • 段階的に作業を進められます
    • 効率を維持できます(1 バッチあたり 3~10 件の変更が適切です)

    推奨されるバッチのグループ分け:

    • ドキュメントのセクション別(例:「Section 3 の変更」、「定義」、「解除条項」)
    • 変更の種類別(例:「日付の変更」、「当事者名の更新」、「法律用語の置換」)
    • 位置関係別(例:「1~3 ページの変更」、「ドキュメント前半の変更」)

    関連する変更のバッチごとに、次の手順を実行します:

    a. テキストを XML に対応付ける:word/document.xml 内のテキストを grep し、テキストがどのように <w:r> 要素に分割されているかを確認します。

    b. スクリプトを作成して実行する:get_node を使用してノードを見つけ、変更を実装してから doc.save() を実行します。パターンについては、docs/ooxml.md の 「Document Library」 セクションを参照してください。

    注:スクリプトを作成する直前に、必ず word/document.xml を grep して最新の行番号を取得し、テキストの内容を確認してください。行番号はスクリプトを実行するたびに変わります。

  5. ドキュメントをパックする:すべてのバッチの処理が完了したら、展開したディレクトリを .docx に戻します:

    python ooxml/scripts/pack.py unpacked reviewed-document.docx
    
  6. 最終確認:ドキュメント全体を包括的に確認します:

    • 最終ドキュメントを Markdown に変換します:
      pandoc --track-changes=all reviewed-document.docx -o verification.md
      
    • すべての変更が正しく適用されていることを確認します:
      grep "original phrase" verification.md  # 見つからないこと
      grep "replacement phrase" verification.md  # 見つかること
      
    • 意図しない変更が加わっていないことを確認します

ドキュメントを画像に変換する

Word ドキュメントを視覚的に分析するには、次の 2 段階の手順で画像に変換します:

  1. DOCX を PDF に変換する:

    soffice --headless --convert-to pdf document.docx
    
  2. PDF のページを JPEG 画像に変換する:

    pdftoppm -jpeg -r 150 document.pdf page
    

    page-1.jpg、page-2.jpg などのファイルが作成されます。

オプション:

  • -r 150:解像度を 150 DPI に設定します(品質とサイズのバランスに合わせて調整してください)
  • -jpeg:出力形式を JPEG にします(必要に応じて PNG を使用する場合は -png を指定します)
  • -f N:変換する最初のページ(例:-f 2 を指定すると 2 ページ目から開始します)
  • -l N:変換する最後のページ(例:-l 5 を指定すると 5 ページ目で終了します)
  • page:出力ファイルのプレフィックス

特定の範囲を指定する例:

pdftoppm -jpeg -r 150 -f 2 -l 5 document.pdf page  # Converts only pages 2-5

コードスタイルガイドライン

重要:DOCX 操作のコードを生成する際は、次の点に注意してください。

  • 簡潔なコードを記述してください
  • 冗長な変数名や重複した処理は避けてください
  • 不要な print 文は避けてください

依存関係

必要な依存関係(利用できない場合はインストールしてください):

  • pandoc:sudo apt-get install pandoc(テキスト抽出用)
  • docx:npm install -g docx(新しいドキュメントの作成用)
  • LibreOffice:sudo apt-get install libreoffice(PDF 変換用)
  • Poppler:sudo apt-get install poppler-utils(PDF を画像に変換する pdftoppm 用)
  • defusedxml:pip install defusedxml(安全な XML 解析用)

コメント