ファイル比較(file comparison)とは、コンピューター上でデータオブジェクト、例えば
テキストファイルや
ソースコードなどの間の差異を比較し、その結果を出力する処理のことです。この比較の方法や実装、そして結果自体は「diff(ディフ)」と呼ばれることがあります。これは、
UNIXのdiffユーティリティに由来する名称です。
ファイル比較の出力は、グラフィカルユーザーインターフェース上で視覚的に表示されたり、ネットワーク、
ファイルシステム、リビジョン管理などのタスクの一部として利用されます。
広く利用されているファイル比較ツール
多くのファイル比較プログラムが存在し、広く使われているものとしては、`diff`、`cmp`、`FileMerge`、`WinMerge`、`Beyond Compare`、`File Compare`などが挙げられます。
また、多くの
テキストエディタや
ワードプロセッサには、ファイル比較機能が組み込まれており、比較結果に基づいて文書の変更箇所を強調表示することができます。
比較アルゴリズムの種類
ファイル比較ツールは、主に2つのファイル間で最長の共通部分列を見つけるアルゴリズムを使用します。共通部分列に含まれないデータは、挿入または削除されたものとして表示されます。
1978年には、ポール・ヘッケルがテキストブロックの移動を検出するアルゴリズムを発表しました。このアルゴリズムは、IBMのHistoryFlowツールに採用されています。他のファイル比較プログラムでも、同様にブロックの移動を検出する機能が実装されています。
一部の特殊なファイル比較ツールでは、2つのファイル間で最も増加した部分列を検出することができます。また、`rsync`プロトコルは、ローリングハッシュ関数を用いて、ネットワーク上の離れた2台のコンピューター間でファイルを効率的に比較し、通信オーバーヘッドを削減します。
ワードプロセッサでのファイル比較は通常、単語レベルで行われます。しかし、プログラミングツールでは行レベルでの比較が一般的です。また、一部の特殊なアプリケーションでは、バイトまたは文字レベルでの比較が必要となる場合があります。
比較結果の表示方法
ファイル比較の結果を表示する方法は様々ですが、代表的なものとして以下の2つがあります。
1.
並列表示: 2つのファイルを左右に並べて表示し、変更箇所を視覚的に比較します。
2.
注釈表示: 1つのファイルを表示し、別のファイルとの変更箇所を注釈として表示します。
多くの場合、ファイル比較ツールでは、変更のない部分は折りたたんで非表示にし、変更箇所のみを表示することで、比較結果をより見やすく表示する機能が提供されています。
ファイル比較が使われる理由
ファイル比較ツールは、さまざまな理由で使用されます。例えば、
バイナリファイルを比較する場合には、バイトレベルでの比較が最適です。一方、
テキストファイルやコンピュータプログラムの
ソースコードを比較する場合には、視覚的に並べて比較する方が理解しやすいでしょう。
バージョン管理システムでは、ファイルをマージして最終的に統合されたファイルを作成したり、後で参照できるように両方のバージョンを保持したりする際に、どのファイルを保持すべきかを判断するためにファイル比較機能を使用します。
また、ファイル比較は、
ファイル同期や
バックアップの機能においても重要な要素です。データ破損に備え、作成したコピーとの間で比較を行い、同一であることを確認することで、ツールの信頼性を高めることができます。
過去の用途
ファイル比較ツールが普及する以前には、磁気テープやパンチカードを比較するための機械が存在していました。例えば、IBM 519カード・リプロデューサーは、パンチカードのデッキが同じかどうかを判別するために使用されました。
1957年には、ジョン・ヴァン・ガードナーが、Fortranプログラムの読み込みセクションのチェックサムを比較するシステムを開発しました。これは、
IBM 704上でコンパイル中に発生した問題を
デバッグするために利用されました。
アプリケーション
ファイル比較ツールは、文書の変更追跡や
ソースコードの管理など、様々なアプリケーションで使用されています。
関連項目
ファイル比較ツールの比較
差分符号化
外部リンク
*
File Comparison - Curlie(英語)