mcpField
D
docx

docx

github.com/snykドキュメント3.2k84 回インストール2 日前に更新
リポジトリ

docx について

docx は、.docx ファイルの作成、編集、分析を支援するスキルです。テキスト抽出、OOXML 編集、変更履歴を使った校閲など、作業に応じた手順を案内します。

主な機能

  1. 01文書テキストの抽出と分析
  2. 02新しい Word 文書の作成
  3. 03OOXML による既存文書の編集
  4. 04変更履歴を使った文書レビュー
  5. 05文書ページの画像変換

活用シーン

  1. 01DOCX の内容を Markdown に変換
  2. 02Word 文書を一から作成
  3. 03法律・ビジネス文書を変更履歴付きで校閲
  4. 04視覚分析用にページ画像を作成

インストール

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

$npx skills add https://github.com/snyk/agent-scan --skill docx

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

同梱ファイル

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

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

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

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

ワークフロー
  1. 必須 - ファイル全体を読む:ooxml.md(約 600 行)を最初から最後まで完全に読みます。このファイルを読む際に、範囲制限を設定してはいけません。 ドキュメントファイルを直接編集するための Document ライブラリ API と XML パターンを確認するため、ファイルの内容をすべて読みます。
  2. ドキュメントを展開します:python ooxml/scripts/unpack.py <office_file> <output_directory>
  3. Document ライブラリを使用する Python スクリプトを作成して実行します(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」)
    • 番号が付いている場合は段落識別子
    • 前後に固有のテキストを含む grep パターン
    • ドキュメントの構造(例:「最初の段落」、「署名欄」)
    • Markdown の行番号は使用しないでください。XML の構造とは対応していません。

    バッチの構成(関連する変更を1バッチあたり3~10件にまとめる):

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

    • 必須 — ファイル全体を読む:ooxml.md(約600行)を最初から最後まで完全に読んでください。このファイルを読むときに範囲制限を指定してはいけません。「Document Library」と「Tracked Change Patterns」のセクションに特に注意してください。
    • ドキュメントを展開する:python ooxml/scripts/unpack.py <file.docx> <dir>
    • 推奨された RSID をメモする:unpack スクリプトは、変更履歴に使用する RSID を提案します。ステップ4bで使うために、この RSID をコピーしてください。
  4. バッチごとに変更を実装する:セクション別、種類別、または近接箇所別に変更を論理的にまとめ、単一のスクリプトでまとめて実装します。この方法には次の利点があります:

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

    推奨されるバッチのまとめ方:

    • ドキュメントのセクション別(例:「Section 3 の変更」、「定義」、「終了条項」)
    • 変更の種類別(例:「日付の変更」、「当事者名の更新」、「法律用語の置き換え」)
    • 近接箇所別(例:「1~3ページの変更」、「ドキュメントの前半部分の変更」)

    関連する変更の各バッチについて、次の手順を実行します:

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

    b. スクリプトを作成して実行する:get_node を使ってノードを見つけ、変更を実装してから doc.save() を実行します。パターンについては、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 解析用)

コメント