
コンピューティングにおいて、ファイル比較とは、データオブジェクト(通常はソースコードなどのテキストファイル)間の相違点と類似点を計算して表示することです。
メソッド、実装、および結果は、通常、Unix ユーティリティにちなんで diff [ 1 ]と呼ばれます。出力はグラフィカル ユーザー インターフェイスで表示したり、ネットワーク、ファイルシステム、またはリビジョン管理におけるより大きなタスクの一部として使用したりできます。diff
広く使われているファイル比較プログラムには、diff、cmp、FileMerge、WinMerge、Beyond Compare、File Compareなどがあります。
多くのテキストエディタやワープロソフトは、ファイルやドキュメントの変更点を強調表示するために、ファイル比較機能を備えています。
ほとんどのファイル比較ツールは、 2つのファイル間の最長共通部分列を検出します。最長共通部分列に含まれないデータは、変更、挿入、または削除として表示されます。
1978年、ポール・ヘッケルは、移動したテキストブロックのほとんどを識別するアルゴリズムを発表しました。[ 2 ]これはIBM History Flowツールで使用されています。[ 3 ]他のファイル比較プログラムもブロックの移動を検出します。
一部の特殊なファイル比較ツールは、 2 つのファイル間の最長増加部分列を見つけます。[ 4 ] rsyncプロトコルは、ローリングハッシュ関数を使用して、通信オーバーヘッドの少ない 2 つの離れたコンピュータ上の 2 つのファイルを比較します。
ワープロソフトにおけるファイル比較は通常ワード単位で行われますが、ほとんどのプログラミングツールにおける比較は行単位で行われます。バイト単位または文字単位での比較は、一部の特殊なアプリケーションで役立ちます。
ファイル比較の表示方法は様々で、主なアプローチとしては、2つのファイルを並べて表示するか、1つのファイルを表示し、変更箇所をマークアップで示す方法があります。いずれの場合も、特に並べて表示する場合には、コード折りたたみやテキスト折りたたみを用いて、変更されていない部分を非表示にし、変更された部分のみを表示することがあります。
比較ツールはさまざまな目的で使用されます。バイナリ ファイルを比較する場合は、バイト レベルでの比較が最適でしょう。しかし、テキスト ファイルやコンピュータ プログラムを比較する場合は、通常は並べて視覚的に比較するのが最適でしょう。[ 5 ]これにより、ユーザーはどちらのファイルを保持するのが望ましいか、すべての違いを含む 1 つのファイルを作成するためにファイルをマージする必要があるか、[ 6 ]あるいは何らかの「バージョン管理」を通じて後で参照するために両方のファイルをそのまま保持するかどうかを決定できます。
ファイル比較は、ファイル同期とバックアップにおいて重要かつ不可欠な部分です。バックアップ手法において、データ破損の問題は重要な課題です。破損は警告なしに、またユーザーの知らないうちに発生します。少なくとも通常は、失われた部分を復元するには手遅れになるまで発生しません。通常、ファイルが破損したかどうかを確実に知る唯一の方法は、次にそのファイルが使用または開かれたときです。それができない場合は、少なくとも差異が発生したことを認識するために比較ツールを使用する必要があります。したがって、すべてのファイル同期またはバックアッププログラムは、実際に有用で信頼できるものであるためには、ファイル比較機能を備えている必要があります。[ 7 ]
ファイル比較が登場する以前は、磁気テープやパンチカードを比較する機械が存在していた。IBM 519 カード再生機は、パンチカードのデッキが同等かどうかを判定できた。1957年、ジョン・ヴァン・ガードナーは、 IBM 704上でコンパイルの問題をデバッグするために、 Fortranプログラムのロードされたセクションのチェックサムを比較するシステムを開発した。[ 8 ]