EPUB→DOCX 変換アプリが出力した DOCX を Word 2010/2013 で開くと普通に編集できるのに、Word で「上書き保存」した瞬間に word/settings.xml が突然追加される――この挙動は Open XML(DOCX)の仕組みを知ると腑に落ちます。settings.xml が生成される理由と、希望の設定を事前に差し込んでコントロールする実務的な方法をまとめます。
現象の整理:settings.xml が無い DOCX は「壊れている」のか
結論から言うと、settings.xml が無い=即エラーではありません。DOCX は ZIP 形式のコンテナ(パッケージ)で、内部に複数の「パーツ(XML や画像など)」を格納しています。Word は必須パーツ(本文など)が整っていれば文書を開けますが、保存時には“その時点の文書状態”を再現できるように、必要なパーツを補完して書き出すことがあります。
その代表例が word/settings.xml です。変換アプリが最小構成で DOCX を作ると、本文 word/document.xml だけを中心に組み立てられ、文書設定のパーツが省略されがちです。しかし Word 側は、次回オープン時の再現性を高めるために、保存のタイミングで settings.xml を生成してパッケージ内に追加します。
settings.xml の役割:Word の「文書単位の設定」を保持するパーツ
word/settings.xml(Document Settings Part)は、Word 文書の「文書単位のアプリケーション設定」を保持するための XML パーツです。内容は見た目(表示設定)だけでなく、互換性、校正、履歴、保存挙動など、編集体験や再現性に影響する項目が入ります。
| カテゴリ | settings.xml に入りやすい要素例 | 影響(ざっくり) |
|---|---|---|
| 表示・編集の既定 | <w:zoom>, <w:defaultTabStop> | ズーム倍率、Tab 幅などの初期値 |
| 互換性 | <w:compat> | 旧バージョン互換の挙動(レイアウト差異の抑制など) |
| 校正・言語 | <w:proofState>, <w:defaultLanguage> | スペルチェック状態、既定言語 |
| 変更履歴・レビュー | <w:trackRevisions>, <w:revisionView> | 変更履歴の有効/無効や表示 |
| 画像の扱い | <w:doNotAutoCompressPictures> | 保存時の画像自動圧縮を抑止 |
ここで重要なのは、settings.xml は「本文の内容(段落や文字列)」ではなく、Word のアプリケーションが文書に対してどう振る舞うかを決める領域だという点です。そのため settings.xml が欠けていると、Word は内部デフォルトで補完して“それっぽく”動作し、保存時にパーツとして確定させます。
なぜ Word 2010/2013 は保存時に settings.xml を自動生成するのか
DOCX(Open Packaging Conventions / OPC)では、パッケージ内のパーツは Relationship(.rels)を辿って発見できることが重要な考え方です。つまり、Word は文書を開いた後、内部で保持している設定状態を「次回も同じ結果になるように」パッケージに書き戻します。settings.xml が存在しない場合は、推測した設定や既定値を settings.xml として新規作成して保存する、という流れになります。
Word はどこから settings.xml の内容を持ってくるのか
「Word は settings.xml の内容をどこから持ってくるのか?」は、単一の答えではなく、実務的には次の 3 つが混ざります。
| 入力源 | 具体例 | settings.xml に反映される典型 |
|---|---|---|
| Word 内部の既定値(内部デフォルト) | 新規文書を作ったときの標準動作 | zoom・互換性ブロック・既定タブ幅などの“基本セット” |
| ユーザー環境の設定 | Word のオプション(校正、表示、保存、画像関連) | 画像圧縮や校正関連など、ユーザー設定の影響を受けやすい項目 |
| 文書状況からの推測 | 編集履歴の有無、差分管理、互換モードなど | rsid、互換性の追加要素、レビュー表示状態など |
重要なのは、Word は「欠けているパーツを“仕様に沿って補う”」ことがある一方で、あなたが意図した設定が必ずしも入るとは限らないという点です。だからこそ、変換アプリ側で制御したい場合は「Word に任せる」のではなく、生成物のパッケージに設定を含めておく方が安定します。
“デフォルト設定”を事前に差し替え/変更できるか
結論として、Word の内部デフォルト自体を外部から書き換えることはできません。レジストリや設定ファイルを直接いじって「Word が生成する settings.xml のテンプレートを差し替える」といったやり方は、公式に提供されていません。
ただし、実務的には次のアプローチで“事前に既定値を決めておく”のと同じ効果を作れます。
- 最初から 望む settings.xml を DOCX に含める
- その settings.xml を Word が正しく認識できるよう、Relationship(rels)と Content Types を整合させる
Word に settings.xml を無視させない:rels と Content_Types の要点
「settings.xml を ZIP に追加したのに、Word が無視して保存時に上書き生成する」ケースの多くは、パーツが Relationship で参照されていないことが原因です。OPC の考え方では、アプリ(Word)は Relationship を辿ってパーツを発見します。逆に言えば、Relationship にぶら下がっていないパーツは“存在しないのと同じ”扱いになりえます。
Word 文書では通常、本文パーツ /word/document.xml が子パーツとして /word/settings.xml を Relationship で参照します。Relationship は /word/_rels/document.xml.rels に書かれます。
| ファイル | 役割 | settings.xml を有効化するために必要なこと |
|---|---|---|
/word/settings.xml | 文書設定本体 | 正しい名前空間で <w:settings> を持つ |
/word/_rels/document.xml.rels | 本文から子パーツへの参照 | Type=.../relationships/settings の Relationship を追加 |
/[Content_Types].xml | 各パーツの MIME(ContentType)宣言 | /word/settings.xml の Override を追加(推奨) |
document.xml.rels に追加する Relationship の例
<Relationship
Id="rIdSettings"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings"
Target="settings.xml"/>
[Content_Types].xml に追加する Override の例
<Override PartName="/word/settings.xml"
ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"/>
settings.xml(最小例)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:settings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:zoom w:percent="100"/>
<w:defaultTabStop w:val="720"/>
<w:compat/>
</w:settings>
実務での現実的な対応パターン
現場で安定して効くのは、次の 3 パターンです。変換アプリの実装コストと、設定の確実性のバランスで選びます。
| パターン | 概要 | メリット | 注意点 |
|---|---|---|---|
| テンプレート方式(推奨) | Word で作った“正しい DOCX”を雛形にし、生成物はそこへ流し込む | rels / ContentTypes が揃いやすく、Word 互換が高い | 雛形更新の運用(管理)が必要 |
| rels まで含めて settings.xml を正しく追加 | 変換アプリが settings.xml+document.xml.rels+Content_Types を生成 | 完全自動化できる。CI で検証しやすい | OPC の細部(rId、Target、Override)を間違えると破綻 |
| 一度 Word で保存→settings.xml 差し替え | 最初の一回だけ Word に骨組みを作らせ、次に settings.xml を置換 | 「Word が期待する構造」を先に生成できる | 人手/バッチが介在しやすく、完全自動にしづらい |
テンプレート方式を成功させるコツ
- 雛形 DOCX は Word 2010/2013 で作成・保存し、目的の設定を反映させた状態にする
- 変換アプリは、雛形の
/word/settings.xmlを「コピーする」だけでなく、雛形のパッケージ構造(rels、ContentTypes)を壊さない - 本文(
/word/document.xml)だけ差し替える運用にすると、設定の反映が最も安定する
SDK/ライブラリで自動化する場合(Open XML SDK 例)
ZIP を直接編集すると、rId の重複や Content Types の漏れが起きやすいので、可能なら Open XML SDK のようなライブラリを使って「パーツを追加」する方が安全です。SDK は Relationship の作成や保存処理を整合的に行いやすく、Word での開閉も安定します。
// C#(Open XML SDK)概念例:DocumentSettingsPart を追加して保存
using (var doc = WordprocessingDocument.Open(path, true))
{
var main = doc.MainDocumentPart;
// settings パーツが無ければ作成
var settingsPart = main.DocumentSettingsPart ?? main.AddNewPart<DocumentSettingsPart>();
settingsPart.Settings = settingsPart.Settings ?? new Settings();
// 例:画像の自動圧縮を抑止
settingsPart.Settings.RemoveAllChildren<DocumentFormat.OpenXml.Wordprocessing.DoNotAutoCompressPictures>();
settingsPart.Settings.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.DoNotAutoCompressPictures() { Val = true });
settingsPart.Settings.Save();
}
例:「ファイル内の画像を圧縮しない」を既定で ON にしたい
Word の「ファイル内の画像を圧縮しない」に相当する設定は、settings.xml にある <w:doNotAutoCompressPictures> で表現できます。この要素が true の場合、保存時に画像を自動圧縮しないことを意味します。逆に言えば、要素が省略されていると、アプリは保存時に画像を圧縮する可能性があります。
settings.xml に入れる例
<w:doNotAutoCompressPictures w:val="true"/>
実務でのおすすめは、次の順で検証することです。
- Word 2010/2013 でテスト用 DOCX を開き、「ファイル内の画像を圧縮しない」を ON にして保存
- 保存後の DOCX を ZIP として開き、
/word/settings.xmlにdoNotAutoCompressPicturesが入っているか確認 - その settings.xml をテンプレートとして変換アプリの出力に組み込む(rels と Content Types を忘れない)
変換アプリ側で押さえるべき最小構成(チェック用)
“Word で開ける”だけを目標にすると、最小限のパーツしか出力しない実装になりがちです。ですが、Word 2010/2013 での編集・保存を安定させたいなら、少なくとも次の構造を意識するとトラブルが減ります。
| パーツ | 意味 | 無いと起きやすいこと |
|---|---|---|
/word/document.xml | 本文 | 当然ながら文書が成立しない |
/word/_rels/document.xml.rels | 本文が参照する子パーツ | settings.xml や styles.xml を追加しても認識されない |
/[Content_Types].xml | ContentType の宣言 | 一部パーツが正しく解釈されず、修復や欠落が発生 |
/word/settings.xml | 文書設定 | 保存時に自動生成され、意図しない設定が混入 |
よくある失敗とトラブルシュート
| 症状 | ありがちな原因 | 対処 |
|---|---|---|
| settings.xml を入れたのに保存すると別物に置き換わる | document.xml.rels に settings への Relationship が無い/誤っている | Type=.../relationships/settings と Target=settings.xml を追加 |
| Word が「修復しました」と出る | [Content_Types].xml の Override 不足、rId 重複など整合性崩れ | Override 追加、rId の一意性を確保。可能なら SDK で生成 |
| 画像圧縮の設定だけ反映されない | 要素名や名前空間、w:val の指定ミス | <w:doNotAutoCompressPictures w:val="true"/> を settings.xml の配下に入れる |
| 開くたびに細かい差分(rsid など)が増える | settings.xml が Word により更新される(仕様) | 再現性が目的なら許容。差分を減らすならテンプレート方式で初期状態を揃える |
まとめ:Word の自動生成を“事故”ではなく“仕様”として利用する
Word 2010/2013 が settings.xml を持たない DOCX を保存すると settings.xml を生成するのは、Word が文書状態を再現できる形でパッケージを整えるための自然な動作です。内部デフォルトの差し替えはできませんが、望む settings.xml を正しくパッケージに組み込み(rels と Content Types も整合)、Word に“その設定が正規の部品だ”と認識させることで、実務上は十分にコントロールできます。

コメント