試してから書くAI・開発ツールの実機検証

docx-cliでNDAをAIに編集させてみた

公開

更新

この記事の結論

AIエージェント向けWord操作CLI「docx-cli」を、Bun専用の検証用Dockerイメージを自作して実際に動かし、公式NDAサンプルへの記入・変更履歴・コメント追加を終了コード付きで確認した記録です。

検証記録

一部検証

検証日
2026-07-11
環境
Docker (WSL2/Ubuntu) + oven/bun:1.3.14-slim ベースの専用イメージ(bun-docx 0.20.3、--frozen-lockfileで依存固定)。実行は --network=none・--read-only・--cap-drop=ALL・非root(uid 1000)。

docx-cliリポジトリ配布の公式NDAフィクスチャ(commit 876a2c84、tests/fixtures/mnda.docx)に対し、カバーページのプレースホルダ4箇所の置換・未記入プレースホルダ0件の確認・変更履歴のON化と条項置換・レビューコメント追加を、アサーション付きスクリプトの終了コード0で確認した。公式サイトが掲載しているベンチマーク数値(Haiku 4.3/6等)の再現、他ツールとの比較検証、Word実物でのレンダリング確認は行っていない。

AIエージェントにWord文書を編集させると、たいてい書式が壊れるか、開けないファイルができあがる。docx-cli(npmパッケージ名 bun-docx)は、この問題を「エージェントにOOXMLを直接触らせない」設計で解決しようとするCLIツールだ。公式NDAサンプルへの記入・変更履歴・コメント追加のワークフローを、ネットワーク遮断済みの専用Docker環境で実際に動かして確認した。結論から言うと、記入・変更履歴・コメントの一連の操作はすべて期待どおりに動作したが、動作にはBunランタイムが必須で、Node.jsだけの環境では動かない。

対象読者は、Claude CodeやCodexなどのコーディングエージェントに契約書・NDA・議事録といったWord文書の編集を任せたい個人開発者だ。

docx-cliは何ができるツールか

docx-cliは、エージェントが.docxファイルをXMLとして直接いじるのではなく、docx readdocx finddocx replacedocx commentsdocx track-changesといったコマンドを組み合わせて編集するためのCLIだ。文書内の位置はp3:5-20のような安定したロケータで指定し、人間側は普段どおりWordで開いて変更履歴やコメントを確認・承認できる、という役割分担になっている。

公式READMEでは、Haiku・Sonnetそれぞれに「NDA記入・請求書記入・レジュメ整形・契約書の赤入れ・契約の確定・文書の新規作成」という6タスクを3回ずつ実行させ、docx-cliを使った場合とClaude標準スキルを使った場合を比較したベンチマークが公開されている。この数値については後述のとおり自分では再現していない。

実際に動かした結果

Bun専用の動作確認用イメージを自作し、公式配布のNDAフィクスチャに対して以下を実行した(すべてネットワーク遮断・read-only・非rootのコンテナ内)。

カバーページの記入

記入前は[Fill in: today's date]のようなプレースホルダが4箇所あった。docx replaceで日付・州名2箇所・変更事項欄を埋め、docx findで正規表現\[(Fill|fill)[^]]*\]を検索して未記入箇所が0件になったことを確認した。

変更履歴とコメント

docx track-changes onで変更履歴の記録を有効化したうえで、Use & Protection条項の”having a reasonable need to know”を”with a documented need to know”に置換。この置換が変更履歴として記録されていることをdocx track-changes listの出力で確認した。続けてdocx comments addでレビューコメントを1件追加し、docx comments listにそのコメントが載っていることも確認した。

これら一連のチェックはログを目視するだけでなく、置換結果や変更履歴・コメントの有無をスクリプト内でアサーションし、最終的な終了コード0で裏付けている(1つでも失敗すればその時点で非ゼロ終了する)。

うまくいったこと

  • ドキュメントに書かれているコマンド例(docx readdocx replacedocx find --regexdocx track-changesdocx comments add)は、READMEのNDA記入例をそのままなぞる形で全て動作した
  • 未記入プレースホルダの検出は正規表現1発で済み、「埋め忘れがないか」を人間が目視で確認する手間を減らせそうだった
  • 変更履歴・コメントはどちらも校閲データとしてdocx内に記録され、CLI上でも列挙できた(Word実物での表示確認は未実施)。CLI側だけで完結させず、人間のレビュー導線につなげる設計だと分かった

うまくいかなかったこと・制約

  • Bunランタイムが必須。 npmでインストールできてもNode.jsだけの環境では動かない(TypeError: __require is not a functionで落ちる)。原因と解決手順はbun-docxがNode.jsで動かない原因と解決に詳しくまとめた
  • 動作確認は専用に組んだDockerイメージの中で行っており、手元のBunやnpmグローバル環境にそのままインストールした場合の挙動までは確認していない
  • 実際のWord(またはLibreOffice等)で生成後の.docxを開いてレンダリング崩れがないかまでは、今回の検証環境(レンダラを持たないコンテナ)では確認できていない

公式説明との差

公式READMEはHaiku・Sonnetそれぞれ3回ずつのA/Bベンチマーク(docx-cli使用時とClaude標準スキル使用時のタスク達成数・トークン数・実行時間の比較)を掲載しているが、今回はこの数値の再現や他ツールとの比較検証は行っていない。確認したのはあくまで「READMEに書かれているNDA記入コマンド例が、公式配布のフィクスチャに対して宣言どおりに動くか」という一点で、それは終了コード付きで確認できた。ベンチマークの数値そのものについては「公式の自己申告」として扱うのが妥当で、自分の環境・タスクで同じ差が出るかは別途検証が要る。

向いている人・向いていない人

向いている人: Claude CodeやCodexにNDA・契約書・議事録などのWord文書編集を任せたいが、「壊れたファイルが返ってくる」「書式が崩れる」といった事故を避けたい人。Bunランタイムの導入に抵抗がない人。

向いていない人: 既にMS Graph APIやpython-docx等でWord自動化パイプラインを構築済みで、置き換える予定がない人。Node.js限定の環境で完結させたい人(Bunが使えないと動かない)。

まとめ

docx-cliの核となるワークフロー——プレースホルダの一括置換、未記入箇所の検出、変更履歴とコメントの追加——は、公式NDAフィクスチャに対して実際に動かし、アサーション付きスクリプトの終了コードで裏付けが取れた。一方で、Bunランタイムが前提になっている点は、Node.js中心の開発環境だと導入コストとして無視できない。公式サイトのベンチマーク数値については自分では未検証なので、導入判断の材料としては「NDA記入のような定型フローは実際に動く」という事実と、「公式の速度・精度の主張は自己申告」という2つを分けて捉えるのがよさそうだ。

参考情報源