| この記事の要点 |
|
概要
DOCX は Microsoft Word 2007 で初めて採用された文書ファイル形式で、それ以降の Word の既定保存形式である。仕様は Office Open XML (OOXML) と呼ばれ、ECMA-376 として標準化された後、ISO/IEC 29500 として国際標準にもなっている。
名前の通り「XML を ZIP に固めたもの」が正体で、旧 .doc のような独自バイナリではない。このため、構造を機械的に解析・生成しやすく、サーバサイドでの自動帳票生成や差分管理 (Git でのレビュー) にも適性がある。
同じ OOXML ファミリには Excel の XLSX、PowerPoint の PPTX がある。いずれも構造は共通で「ZIP に格納された XML + 関連ファイル」である。
内部構造
.docx を unzip で展開すると、以下のようなディレクトリ構成が現れる。これは アーカイブ・圧縮形式 の一種であり、ZIP の構造を完全に踏襲している。
# DOCX の中身を確認
unzip -l report.docx
# [Content_Types].xml ← MIME タイプ宣言
# _rels/.rels ← トップレベル関係性
# word/document.xml ← 本文の XML 本体
# word/styles.xml ← スタイル定義
# word/settings.xml ← 文書設定
# word/fontTable.xml ← フォント情報
# word/theme/theme1.xml ← テーマ
# word/_rels/document.xml.rels
# word/media/image1.png ← 埋め込み画像
# docProps/core.xml ← 作成者・タイトルなどのメタ
# docProps/app.xml ← アプリ情報
本文を担う word/document.xml は XML 仕様にそった文書で、段落 <w:p>、ラン <w:r>、テキスト <w:t> という三層構造を取る。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:rPr><w:b/></w:rPr>
<w:t>太字のテキスト</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
主な用途
- 業務文書全般 — 報告書、企画書、議事録、契約書のドラフト
- テンプレート差込 — Word のメール差し込み機能や、サーバサイドでの請求書 PDF 元データ生成
- 共同編集 — Microsoft 365 / OneDrive のクラウド同時編集の基盤
- 論文・原稿 — 出版社・大学が指定するテンプレートとして広く使われる
- 自動生成 — python-docx などでテンプレに動的データを埋め込んで大量帳票を量産
関連形式との比較
| 形式 | 拡張子 | 仕様 | 実体 | 編集の主役 |
|---|---|---|---|---|
| DOCX | .docx | OOXML / ISO 29500 | ZIP + XML | Microsoft Word |
| DOC (旧) | .doc | 独自バイナリ | CFB バイナリ | Word 97-2003 |
| ODT | .odt | ODF / ISO 26300 | ZIP + XML | LibreOffice |
| RTF | .rtf | Microsoft 独自 | 制御文字付きテキスト | Word, WordPad |
| ISO 32000 | 固定レイアウト | Acrobat 等 | ||
| Markdown | .md | 多数の方言 | プレーンテキスト | 任意のエディタ |
編集・パーサ・ツール
Python で DOCX を扱う定番は python-docx。テンプレートを開いて段落を追加、保存するだけで Word ファイルが生成できる。
from docx import Document
from docx.shared import Pt
doc = Document('template.docx')
doc.add_heading('月次レポート 2026-06', level=1)
p = doc.add_paragraph('売上は前月比 ')
run = p.add_run('+12.4%')
run.bold = True
run.font.size = Pt(14)
p.add_run(' でした。')
# テーブル
table = doc.add_table(rows=2, cols=2)
table.cell(0, 0).text = '項目'
table.cell(0, 1).text = '金額'
table.cell(1, 0).text = '売上'
table.cell(1, 1).text = '12,400,000 円'
doc.save('report-2026-06.docx')
pandoc を使えば DOCX を Markdown / HTML / PDF などへ相互変換できる。
# DOCX -> Markdown
pandoc report.docx -o report.md
# Markdown -> DOCX (テンプレ適用)
pandoc article.md --reference-doc=template.docx -o article.docx
# DOCX -> PDF (要 LaTeX or wkhtmltopdf)
pandoc report.docx -o report.pdf
注意点・落とし穴
- .doc と .docx は別物 — 旧 .doc (バイナリ) は Word 2003 以前の既定。同じ「Word ファイル」と呼ばれるが内部構造は完全に異なる
- マクロ (.docm) — VBA マクロを含む場合は .docm として保存される。標的型攻撃で頻繁に悪用されるため、信頼できない .docm は開かない
- 互換性モード — 古いバージョンで作成された .docx を新しい Word で開くと「互換性モード」で開かれることがあり、新機能が制限される
- フォント埋め込み — 既定では埋め込まれないため、特殊フォント使用時は別 PC で表示崩れが起こる
- 外部リンク・画像 — リモート参照を含むテンプレートは情報漏洩や追跡 (Web Beacon) のリスクがある
- XML 仕様の差異 — Strict OOXML と Transitional OOXML の 2 系統があり、互換性が完全ではないケースがある
関連リンク
- テキスト・ドキュメント形式
- ファイル拡張子とは
- XLSX(.xlsx)
- PPTX(.pptx)
- RTF(.rtf)
- ODT / ODS / ODP
- PDF(.pdf)
- アーカイブ・圧縮形式
- XML(.xml)
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09