docx について
docxは、.docxファイルの作成、編集、分析を行うスキルです。新規文書、基本的なOOXML編集、変更履歴付きレビュー、テキスト抽出、視覚的な確認に別々の手順を用意しています。
主な機能
- 01docx-jsによる文書作成
- 02Pandocによるテキスト抽出
- 03PythonライブラリでのOOXML構造編集
- 04変更履歴をバッチ単位で適用
- 05確認用にページを画像へ変換
活用シーン
- 01Word文書を新規作成
- 02テキスト、コメント、埋め込みメディアの確認
- 03変更履歴を付けて法務・業務文書をレビュー
- 04視覚分析用にページをレンダリング
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bbeierle12/ skill-mcp-claude --skill docxインストール後、Claude Code で/docxを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
_meta.jsondocx-js.mdLICENSE.txtooxml.mdooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsdopc-coreProperties.xsdopc-digSig.xsdopc-relationships.xsdooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsddml-chartDrawing.xsddml-diagram.xsddml-lockedCanvas.xsddml-main.xsddml-picture.xsddml-spreadsheetDrawing.xsddml-wordprocessingDrawing.xsdpml.xsdshared-additionalCharacteristics.xsdshared-bibliography.xsdshared-commonSimpleTypes.xsdshared-customXmlDataProperties.xsdshared-customXmlSchemaProperties.xsdshared-documentPropertiesCustom.xsdshared-documentPropertiesExtended.xsdshared-documentPropertiesVariantTypes.xsdshared-math.xsdshared-relationshipReference.xsdsml.xsdvml-main.xsdvml-officeDrawing.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 を使用してください。
ワークフロー
- 必須 - ファイル全体を読む:
docx-js.md(約 500 行)を最初から最後まで完全に読みます。**このファイルを読む際に、範囲制限を設定してはいけません。**ドキュメントを作成する前に、詳細な構文、重要な書式設定ルール、ベストプラクティスを確認するため、ファイルの内容をすべて読んでください。 - Document、Paragraph、TextRun コンポーネントを使って JavaScript/TypeScript ファイルを作成します(依存関係はすべてインストール済みと想定できます。インストールされていない場合は、以下の依存関係のセクションを参照してください)
- Packer.toBuffer() を使用して .docx としてエクスポートします
既存の Word ドキュメントの編集
既存の Word ドキュメントを編集する場合は、Document ライブラリ(OOXML 操作用の Python ライブラリ)を使用してください。このライブラリはインフラストラクチャのセットアップを自動的に処理し、ドキュメントを操作するためのメソッドを提供します。複雑なシナリオでは、ライブラリを通じて基盤となる DOM に直接アクセスできます。
ワークフロー
- 必須 - ファイル全体を読む:
ooxml.md(約 600 行)を最初から最後まで完全に読みます。**このファイルを読む際に、範囲制限を設定してはいけません。**ドキュメントファイルを直接編集するための Document ライブラリ API と XML パターンを確認するため、ファイルの内容をすべて読んでください。 - ドキュメントを展開します:
python ooxml/scripts/unpack.py <office_file> <output_directory> - Document ライブラリを使用する Python スクリプトを作成して実行します(ooxml.md の「初期化」セクションに従って PYTHONPATH を設定してください)
- 最終ドキュメントをパックします:
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>'
変更履歴を記録した変更のワークフロー
-
Markdown 形式の表現を取得する:変更履歴を保持したまま、ドキュメントを Markdown に変換します:
pandoc --track-changes=all path-to-file.docx -o current.md -
変更を特定してグループ化する:ドキュメントを確認し、必要な変更をすべて特定して、論理的なバッチに整理します:
変更箇所を特定する方法(XML 内で変更を見つける方法):
- セクション番号/見出し番号(例:「Section 3.2」、「Article IV」)
- 段落識別子(番号が付いている場合)
- 前後のテキストを含む一意な grep パターン
- ドキュメントの構造(例:「最初の段落」、「署名欄」)
- Markdown の行番号は使用しないでください。XML の構造には対応していません。
バッチの構成(関連する変更を 3~10 件ずつまとめます):
- セクション別:「Batch 1: Section 2 amendments」、「Batch 2: Section 5 updates」
- 種類別:「Batch 1: Date corrections」、「Batch 2: Party name changes」
- 複雑さ別:単純なテキスト置換から始め、複雑な構造変更に取り組みます
- 順番別:「Batch 1: Pages 1-3」、「Batch 2: Pages 4-6」
-
ドキュメントを読み、展開する:
- 必須 — ファイル全体を読む:
ooxml.md(約 600 行)を最初から最後まで完全に読んでください。このファイルを読む際に、範囲の上限を絶対に設定しないでください。ドキュメントファイルを直接編集するための Document ライブラリ API と XML パターンについて、ファイル全体を読んでください。 - ドキュメントを展開する:
python ooxml/scripts/unpack.py <file.docx> <dir> - 推奨される RSID を控える:unpack スクリプトは、変更履歴の記録に使用する RSID を提案します。この RSID をコピーして、手順 4b で使用してください。
- 必須 — ファイル全体を読む:
-
変更をバッチごとに実装する:セクション、種類、または近接性に基づいて変更を論理的にグループ化し、1 つのスクリプトでまとめて実装します。この方法には、次の利点があります:
- デバッグが容易になります(バッチが小さいほど、エラーの原因を特定しやすくなります)
- 段階的に作業を進められます
- 効率を維持できます(バッチあたり 3~10 件の変更が適しています)
バッチのグループ化の例:
- ドキュメントのセクション別(例:「Section 3 changes」、「Definitions」、「Termination clause」)
- 変更の種類別(例:「Date changes」、「Party name updates」、「Legal term replacements」)
- 近接性別(例:「Changes on pages 1-3」、「Changes in first half of document」)
関連する変更の各バッチについて、次の作業を行います:
a. テキストを XML に対応付ける:
word/document.xml内のテキストを grep し、テキストが<w:r>要素にどのように分割されているかを確認します。b. スクリプトを作成して実行する:PYTHONPATH を設定して Document ライブラリをインポートし(ooxml.md の「Initialization」を参照)、
get_nodeを使ってノードを検索し、変更を実装してからdoc.save()を実行します。パターンについては、ooxml.md の 「Document Library」 セクションを参照してください。注:スクリプトを作成する直前に、必ず
word/document.xmlを grep して、最新の行番号を取得し、テキストの内容を確認してください。行番号はスクリプトの実行ごとに変わります。 -
ドキュメントをパックする:すべてのバッチの処理が完了したら、展開したディレクトリを .docx に戻します:
python ooxml/scripts/pack.py unpacked reviewed-document.docx -
最終確認:完成したドキュメント全体を包括的に確認します:
- 最終ドキュメントを Markdown に変換します:
pandoc --track-changes=all reviewed-document.docx -o verification.md - すべての変更が正しく適用されたことを確認します:
grep "original phrase" verification.md # 見つからないこと grep "replacement phrase" verification.md # 見つかること - 意図しない変更が加わっていないことを確認します
- 最終ドキュメントを Markdown に変換します:
ドキュメントを画像に変換する
Word ドキュメントを視覚的に分析するには、次の 2 段階の手順で画像に変換します:
-
DOCX を PDF に変換する:
soffice --headless --convert-to pdf document.docx -
PDF の各ページを JPEG 画像に変換する:
pdftoppm -jpeg -r 150 document.pdf pagepage-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 解析用)