DOCX

DOCXファイルとは

2007 年以降の Word の形式。中身は XML を詰めた ZIP で、だから素直に変換できます。

DOCX とは何か

DOCX はコンテナです。誰か別のものが符号化した流れを、中に収めておく外殻です。 編集のために使われます。

拡張子は .docx、正式名称は Word Document です。ただしどちらも、そのファイルが中に何を持てるかほどには多くを語りません。このページの残りは、その中身についての話です。

DOCX はどこから来たのか

Microsoft が 2007 年に公開しました。 仕様は ECMA-376 です。

古さが役に立つのは、ごく実務的な理由からです。形式が古いほど、それを覚える時間が多くのプログラムに与えられてきたということだからです。

仕様は公開されています

仕様書がそのまま公開されているので、中身を推し量るのではなく文書を読んで実装できます。この形式が数多くのプログラムに載っているのはそのためであり、20 年前に書かれたファイルが今も開けるのもそのためです。ただし「仕様が公開されている」ことと「使用料が要らない」ことは別の話です。中でコーデックを包んでいる形式では、特許のライセンスは仕様書が答えていない別の問題として残ります。

1 つのファイルに複数ページを持てます

DOCX ファイルは 1 ページに縛られていません。1 ページしか持てないものへ変換するときには、これが効いてきます。1 回の変換で出てくるのは 1 ページぶんのファイル 1 つで、取られるのは先頭のページです——どのページを取るかを選ばせてくれる変換であれば、そのページになります。

マクロを持てません

DOCX ファイルは実行されるコードを運べません。だからメールサーバーも文書ポータルもこれは通し、マクロを持てるほうの兄弟は止めるのです。

どんな種類の文書か

DOCX の中身はテキスト文書です。段落は、置かれたページに合わせて流れ直します。

これが変換のされ方を決めます。テキストは流れ直すので、ページ数は結果の性質であって、ファイルの性質ではありません。

自分を守るために何を備えているか

DOCX ファイルは必要なら暗号化を備えています。

暗号化されたファイルは、変換の前に解除する必要があります。ここでも、ほかのどこでも同じです。パスワードはコンバーターが通り抜けられる類のものではありませんし、通り抜けられると称するものには、そもそもファイルを渡すべきではありません。

DOCX を開けるのは何か

Microsoft Word、LibreOffice Writer、Google Docsが読めますし、同じ種類のプログラムならたいてい読めます。

ファイルが開かないとき、形式が悪いことはめったにありません。たいていはプログラムのほうが形式より古いのです。もっと古い形式に変換してしまうのが確実な逃げ道で、このサイトの残りの部分はそのためにあります。

ブラウザーで開く

これを読めるブラウザーはありません。

これを変換するいちばんよくある理由がこれです。形式が悪いのではありません。ファイルを見せたい場所が、それを読めないというだけのことです。

中身のほかに何を運べるか

DOCX ファイルは文書のプロパティを持てます。

このうち何が変換後まで残るかは、変換先の形式次第です。そして正直な答えはたいてい「一部だけ」です。

作業のための形式です

DOCX は、開いて手を入れるために作られています。作業が続いているあいだはこの形式でファイルを持ち、完成したものが必要になるたびに、ここから書き出してください。

この形式でよく起きること

繰り返し挙がる不満はこれです。ページの体裁がそのまま移るのではなく、組み直される。

どれも、この形式を避ける理由にはなりません。どれかに不意を突かれる前に知っておくべきことがら、というだけです。これは別の主張であり、そして役に立つほうの主張です。

XML を詰めた ZIP なので、中を覗ける

.docx を .zip に改名して開いてみてください。中には小さなディレクトリ構造があり、word/document.xml が本文を、word/styles.xml が書式の定義を、word/media/ がすべての画像を、docProps/ が文書のプロパティを保持しています。どれも Word を使わずに確認できる、読めるテキストです。

DOC への対応がいつもおおまかだったのに対し、Microsoft 以外の DOCX への対応が本当に良い理由はここにあります。この形式はオープンな規格として公開されたため、LibreOffice や Google Docs、Pages、多くのライブラリーが、逆解析ではなく仕様書をもとに実装しています。壊れた文書が document.xml を手作業で取り出すことで救える場合があるのもこのためです。

送るつもりのなかった情報が一緒に運ばれる

文書のプロパティには、作成者や最後に保存した人、Office のインストール情報にある会社名、合計編集時間、そしてすべての改訂日時が記録されています。同僚のテンプレートから作った文書は、あなたではなくその人の名前を記録していることがよくあります。

より鋭い問題は変更履歴です。変更履歴をオンにしたまま反映も却下もされていない編集は、元の文言がそのままファイルに残っていて、表示を切り替えれば誰でも見られます。コメントも同様で、一つの表示モードでは隠れていても、XML の中には常に存在します。クライアントや相手方の弁護士、記者に送られた文書から、そこに至るまでの交渉の過程が見つかってしまったという事例は繰り返し起きています。

隠し文字は削除ではなく、属性にすぎない

Word は文字を「隠し文字」として設定でき、隠し文字は通常は印刷も表示もされません。それでも document.xml の中には普通の文字として、隣に書式のフラグが付いた形でそのまま残っています。

白地に白文字、画像の裏に隠れた文字、折りたたまれた見出しの中身も同様です。どれも削除されているわけではありません。相手に届いてはいけない情報があるなら、文書から実際に削除する必要があります。確実な確認方法は、実際に描画されるものだけを書き出す PDF に変換するか、メタデータを意図的に取り除くことです。

スタイルと直接指定の書式の違い

見出し 1 のスタイルを適用して作った見出しと、文字を選んで 16 ポイントの太字に直接設定した見出しは、画面上ではまったく同じに見えても、ファイルの中ではまったく別のものです。前者は構造で、後者は装飾にすぎません。

この違いが、自動目次が機能するか、ナビゲーションウィンドウが使えるか、スクリーンリーダーが見出しを読み上げるか、そして PDF や HTML、EPUB へきれいに変換できるかを左右します。長い DOCX が扱いやすいか苦痛かを分ける最大の要因でありながら、構造が必要になるまでは目に見えません。

DOCX はマクロを持てず、DOCM は持てる

.docx として保存されたファイルは VBA プロジェクトを含められません。これは意図的な設計で、この形式が持つ最も役立つセキュリティ上の性質です。マクロ付きの文書は .docm として保存する必要があり、拡張子でそれと分かります。ただしこの規則は改名には耐えません。Word は拡張子ではなく中身で文書を開くため、DOCM を DOCX に改名してもコードは残ったまま読み込まれてしまい、実際にこれを悪用する例が研究者によって報告されています。

つまり予期しない .docx は VBA を実行できませんが、それは「開いて安全」であることとは違います。マクロを持たない文書がリモートサーバー上のマクロ付きテンプレートを参照することもあり、CVE-2022-30190 はマクロを一切含まない文書からコード実行にまで至りました。OLE オブジェクトや DDE フィールドは普通の文書の中にも存在し、Microsoft が既定で DDE の起動と OLE の自動有効化をブロックしているのはこのためです。拡張子は判断材料であって保証ではなく、中身がフィッシングの手口になっていることもあります。

フォントと、ページの区切りが動く理由

DOCX はフォントを名前で参照するだけで、たいていフォント自体は埋め込みません。その書体を持たない端末で開くと、字幅の違う別のフォントに置き換えられ、文字が再配置されます。

二ページの手紙であれば気付かないほどの違いですが、五十ページの報告書ではページの区切りが動き、表がページをまたいでしまい、一行の見出しが二行になったりします。何も失われてはおらず、修復の必要もありません。ただし法的な提出書類やページ番号付きの索引のように、ページ割り自体が意味を持つ文書であれば、PDF を送り、編集用に DOCX を手元に残してください。

ファイルが小さい理由と、小さくならない理由

アーカイブの中身はすべて圧縮され、文書の XML は繰り返しが多いため、かなりの分量の報告書でも数百キロバイトに収まることがよくあります。文字そのものはほとんどコストになりません。

DOCX を大きくするのはたいてい画像です。特にカメラの解像度のまま挿入して、ページ上で縮小表示しているだけの画像です。Word は元の画像を保持するため、はがきサイズで表示された八枚の写真が、実際には四十メガバイトのフル解像度 JPEG を抱えていることがあります。Word の「図の圧縮」機能はこれを縮小してくれ、たいていこれが、送れる添付ファイルと弾かれてしまう添付ファイルの分かれ目になります。

PDF への変換で決着すること

PDF はレイアウトを固定し、フォントを埋め込み、実際にページに描かれているものだけを書き出します。隠し文字やコメントは出力に現れません。仕上がった文書を送るなら、これが誠実なやり方です。

例外は変更履歴で、文書を送り出す前に必ず確認する価値があります。変換は既定の表示設定のまま行われ、反映も却下もされていない変更が表示されている状態なら、その表示のまま PDF に書き出されます。反映か却下を先に済ませてください。

変換で取り除かれないものが二つあります。文書のプロパティは PDF にそのまま引き継がれることが多く、意図的に消さない限り作成者名が一緒に運ばれます。そして変換は実質的に一方通行です。PDF を編集可能な形式に戻すこともできますが、それは元の文書ではなく再構成されたものです。DOCX は手元に残しておいてください。

ODT への変換と、その逆方向

どちらも同じ種類の対象を記述する、XML を詰めた ZIP アーカイブなので、変換は再構成ではなく構造の翻訳になります。文字、見出し、リスト、表、脚注、画像、ハイパーリンク、コメント、変更履歴は、どちら向きでも確実に引き継がれます。

ずれるのは細部です。一部の番号付きリストや、フレームの位置、フィールドの種類の表現が二つの形式で異なるため、装飾の多い文書はわずかにずれることがあります。普通の文書であれば、変換後のファイルは同じ文書だと言って差し支えなく、この組み合わせは、どちらかを古い二進数形式の DOC に変換するよりずっと良い結果になります。

基本情報

DOCXフォーマットの識別子と出自。
拡張子.docx
メディアタイプapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
公開元Microsoft
初版2007
仕様ECMA-376