はじめに
契約書、社内ポリシー、技術仕様書、あるいはマーケティングコピーを扱うかどうかにかかわらず、パターンは同じです。.docx バージョンが次々に増えていき、ある時点で「どこが正確に変わったのか」を確認したくなります。Word に標準搭載されている Compare ダイアログはたまに手作業でチェックする分には問題ありませんが、比較が定期的なプロセスの一部になったり、サーバー側で自動化する必要が出てくると、あまり役に立ちません。
GroupDocs.Comparison for .NET を使えば、コードから比較を実行し、レビュー担当者が好む形式で結果を生成できます。このライブラリは Word 文書に対して 2 つの出力比較モードをサポートしています。
- リビジョンモード — 差分が Word の「変更履歴(トラック変更)」マークアップとして書き込まれます。レビュー担当者はファイルを開き、慣れ親しんだ レビュー → 受け入れ / 拒否 コントロールで変更をひとつずつ確認できます。
- ハイライトモード — 挿入、削除、変更されたテキストが文書本文内でカラー ハイライトとして描画されるため、最終テキストを読んでいるだけで違いが一目で分かります。
この記事では、動作する C# サンプルを交えて両方のアプローチを解説し、WordCompareOptions クラスとそのプロパティを詳しく見ていき、どのようなシチュエーションでどちらのモードが適切かを議論します。
前提条件
開始する前に:
- .NET 6.0 以上。
- GroupDocs.Comparison for .NET — NuGet でインストール:
dotnet add package GroupDocs.Comparison
- ライセンスファイル (
GroupDocs.Comparison.lic)。これが無いとライブラリは評価モードで動作し、透かしとサイズ制限がかかります。テスト用の一時ライセンスをリクエストできます。 - 比較対象の Word ファイル 2 つ — ここでは
source.docxとtarget.docxと呼びます。例として以下のような内容です。
source.docx |
target.docx |
|---|
方法 1: リビジョン(トラック変更)比較
使用シーン: Microsoft Word の組み込み レビュー → 受け入れ / 拒否 ツールで、レビュアーが各変更を個別に受け入れる/拒否する必要がある場合(例: 契約交渉やポリシー承認サイクル)。
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
using (var comparer = new Comparer("source.docx"))
{
comparer.Add("target.docx");
var options = new WordCompareOptions
{
DetectStyleChanges = true,
DisplayMode = WordCompareOptions.ComparisonDisplayMode.Revisions
};
comparer.Compare("result_revision.docx", options);
}
リビジョン(トラック変更)モードで生成されたドキュメント:
内部で行われていること:
ComparisonDisplayMode.Revisionsはエンジンに対し、ネイティブな Word の変更履歴マークアップを出力するよう指示します。DetectStyleChanges = trueにより、書式(太字・フォントサイズ・色)もテキスト編集と同様に検出されます。- 出力ファイルを Microsoft Word で開くと レビュー パネルが自動的に表示され、すべての挿入・削除・書式変更が一覧化され、受け入れまたは拒否が可能です。
リビジョンモードは文書コンテンツ自体を再レンダリングする必要がなく、変更メタデータを付加するだけなので、2 つのモードのうち高速になる傾向があります。
方法 2: ハイライトモード比較
使用シーン: ステークホルダーが「変更点がはっきりと分かる」クリーンなドキュメントを求めているが、すべてのリビジョンを個別に処理する必要はない場合。たとえば、マネージャーが最新バージョンを Word で開き、ハイライトされた挿入・削除をざっと確認して更新のインパクトを把握したいときに最適です。
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
using (var comparer = new Comparer("source.docx"))
{
comparer.Add("target.docx");
var options = new WordCompareOptions
{
DetectStyleChanges = true,
DisplayMode = WordCompareOptions.ComparisonDisplayMode.Highlight
};
comparer.Compare("result_highlighted.docx", options);
}
ハイライトモードで生成されたドキュメント:
内部で行われていること:
ComparisonDisplayMode.Highlightは差分をインラインのカラー ハイライトとして描画します — 削除は赤、挿入は緑、書式変更は青(これらはWordCompareOptions/CompareOptionsのStyleSettingsで変更可能)。- 文書はそのまま読んだり印刷したりでき、余計な手順は不要です。
- ファイルにトラック変更メタデータは付加されません。
ハイライトモードは実際に文書コンテンツを変更し書式を適用する必要があるため、内部的により多くの処理が走ります。大容量ファイルではリビジョンモードに比べてパフォーマンス差が顕著になることがあります。
WordCompareOptions の詳解
上記の例で共通して使用している WordCompareOptions は、共通設定を持つ CompareOptions を継承し、Word 固有のプロパティを追加したクラスです。この型を通して、表示モード(DisplayMode)や書式変更の追跡(DetectStyleChanges)、リビジョンに表示される作者名(RevisionAuthorName)や改行・ブックマークの扱いなどを制御します。
さらに、基底クラス CompareOptions では、挿入・削除・変更項目それぞれに対するスタイル(InsertedItemStyle, DeletedItemStyle, ChangedItemStyle)を公開しているため、ハイライトの色や書式を必要に応じて細かく調整できます。
以下は、リビジョンモードでテキストのみをチェックするためのオプション設定例です。
var options = new WordCompareOptions
{
DisplayMode = WordCompareOptions.ComparisonDisplayMode.Revisions,
DetectStyleChanges = false,
RevisionAuthorName = "QA Bot",
CompareBookmarks = true
};
変更点をプログラムから取得する
出力モード(リビジョンまたはハイライト)に関わらず、共通の Comparer.GetChanges API で検出された差分の構造化リストを取得できます。このメソッドは Word だけでなく、サポートされているすべてのフォーマットで利用可能です。
using (var comparer = new Comparer("source.docx"))
{
comparer.Add("target.docx");
comparer.Compare("result_revision.docx");
var changes = comparer.GetChanges(); // ChangeInfo[] を返す
}
自分のワークフローで変更を後処理したいときに便利です。たとえば、独自の HTML レポートを作成したり、レビューシステムに差分を流し込んだり、編集統計を集計したりできます。詳細は公式 API リファレンスをご参照ください: Comparer.GetChanges。
パスワード保護された文書の取り扱い
文書がパスワードで保護されている場合でも比較可能です。Comparer の生成時に LoadOptions にパスワードを渡します。この手順は Word、PDF、その他サポートフォーマットすべてで同様です。
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
using (var comparer = new Comparer("source_protected.docx",
new LoadOptions { Password = "secret" }))
{
comparer.Add("target_protected.docx");
var options = new WordCompareOptions
{
DisplayMode = WordCompareOptions.ComparisonDisplayMode.Revisions
};
comparer.Compare("result_protected.docx", options);
}
無料トライアルの取得
公式リリースページから GroupDocs.Comparison for .NET をダウンロードできます。制限なしでテストしたい場合は、クレジットカード不要の一時ライセンスをリクエストしてください。
よくある質問
Q: サーバーに Microsoft Word や Office をインストールする必要がありますか?
A: 必要ありません。GroupDocs.Comparison はスタンドアロンの .NET ライブラリで、DOCX ファイルの読み書きを自前で行います。
Q: Word 以外のフォーマットも比較できますか?
A: はい。PDF、Excel、PowerPoint、プレーンテキストなど多数の形式をサポートしています。対応一覧はドキュメントに掲載されています。
Q: ライセンスを設定しなかった場合はどうなりますか?
A: 評価モードで動作し、出力ドキュメントに透かしが入るほか、最初の数ページしか処理されません。テスト用の一時ライセンスを使用すればこれらの制限は解除されます。
Q: ハイライト色はカスタマイズできますか?
A: デフォルト色で多くのケースは十分対応できますが、詳細なスタイル制御が必要な場合は CompareOptions の StyleSettings プロパティを確認してください。
結論
GroupDocs.Comparison for .NET は、コードから Word 文書を差分比較するための 2 つのシンプルな手段を提供します。リビジョンモードは既存のレビュー・ワークフローにそのまま組み込め、ハイライトモードは変更点を瞬時に視覚化したいユーザー向けです。WordCompareOptions クラスを使えば、書式検出や作者情報、ブックマーク・文書プロパティの比較まで、出力を細かく調整できます。
シナリオに合ったモードを選択するか、両方を生成して対象者に好みのビューを選んでもらいましょう。