ファイルコンペア
ファイルコンペア (英: file comparison)、ファイルの比較は、コンピューティングでは、データオブジェクト (ソースコードなどのテキストファイルなど)間の相違点を比較して見つけ、出力すること。
比較の方法、実装、結果は、diff (ディフ)[1]と呼ばれることがある。これは、UNIXのdiff
ユーティリティが由来となっている。出力は、グラフィカルユーザーインターフェイスで表示されたり、ネットワーク、ファイルシステム、リビジョン管理のタスクの一部として利用される。
広く使用されているファイル比較プログラムには、diff、cmp、FileMerge、WinMerge、Beyond Compare、File Compareが挙げられる。
多くのテキストエディタやワードプロセッサでは、ファイル比較の機能があり、比較実行後に文書の変更部分を強調表示する。
比較アルゴリズムの種類
[編集]ほとんどのファイル比較ツールは、2つのファイル間の最長共通部分列を見つける。最長共通部分列にないデータは、挿入または削除として表示される。
1978年、Paul Heckelは、最も移動したテキストブロックを識別するアルゴリズムを公開した[2]。 これは、 IBM HistoryFlowツールで使用されている[3]。 他のファイル比較プログラムでは、ブロックの移動を検出する[要説明]。
一部の特殊なファイル比較ツールは、2つのファイル間で最も増加したサブシーケンスを見つける[4]。 rsyncプロトコルは、ローリングハッシュ関数を使用して、通信オーバーヘッドが低い2台の離れたコンピューター上の2つのファイルを比較する。
ワードプロセッサでのファイル比較は通常、単語レベルで行われるが、ほとんどのプログラミングツールでの比較は行レベルで行われる。バイトまたは文字レベルの比較は、一部の特殊なアプリケーションで使われている。
比較結果の表示
[編集]ファイル比較結果の表示方法はさまざまで、広く採用されている2つの方法は、2つのファイルを並べて表示するか、1つのファイルを表示し、注釈で1つのファイルから別のファイルへの変更部分を表示する、である。いずれの場合も、折り畳み表示を使用して、ファイルの変更されていない部分を非表示にし、変更された部分のみを表示するようにしていることが多い。
使われる理由
[編集]比較ツールはさまざまな理由で使用される。バイナリファイルを比較したい場合は、バイトレベルが最適な比較方法となる。一方、テキストファイルやコンピュータプログラムのソースコードを比較したい場合は、視覚的に並べて比較するのが最適となる。バージョン管理システムでは、ユーザーは、ファイルをマージして最終的に統合されたファイルを作成する場合や、後で参照できるように両方のバージョンをそのまま保持する場合に、保持すべきファイルを決定する際にも比較機能を用いる。
ファイルの比較は、ファイル同期とバックアップの機能の中で、重要かつ不可欠な要素である。データ破損に備え、ツールの信頼性を上げるため、作成したコピーとの間で常に比較を行い同一であることを確認する必要がある。
過去の用途
[編集]ファイル比較の前は、磁気テープやパンチカードを比較するためのマシンが存在していた。 IBM 519カード・リプロデューサーは、パンチカードのデッキが同じかどうかを判別する。 1957年、ジョン・ヴァン・ガードナーは、Fortranプログラムが読み込まれたセクションのチェックサムを比較するシステムを開発、IBM 704上でコンパイルで起きた問題をデバッグするために用いられた[5]。
アプリケーション
[編集]- DocDiff[※ 1]
注釈
[編集]出典
[編集]- ^ "diff", The Jargon File.
- ^ Heckel, Paul (1978), “A Technique for Isolating Differences Between Files”, Communications of the ACM 21: 264–268, doi:10.1145/359460.359467 2011年12月4日閲覧。
- ^ Viégas, Fernanda B.; Wattenberg, Martin; Kushal, Kushal Dave (2004), Studying Cooperation and Conflict between Authors with history flow Visualizations, 6, Vienna: CHI, pp. 575–582 2011年12月1日閲覧。
- ^ Liwei Ren (18 April 2006). “Algorithms for block-level code alignment of software binary files”. Google Patents. USPTO. 10 May 2019閲覧。
- ^ John Van Gardner. Fortran And The Genesis Of Project Intercept 2011年12月6日閲覧。.