|
diff(ディフ)とはファイルの比較を行うためのコマンドで2つのファイル間の違いを出力できるプログラム。diffプログラムは行単位でテキストファイル間の差異を表示する。最近の実装ではバイナリファイルもサポートしている。プログラムからの出力も「diff」(ディフ)と呼ばれるが出力をそのままpatchプログラムで適用できるため、「patch」(パッチ)との呼称も一般的である。また、diffコマンド以外からの出力であっても差分表示プログラムの出力はdiffと呼ばれることがある。"grep"が文字列探索そのものの代名詞になっているように、"diff"という語も差分検出一般を指すジャーゴンとなっている。 == 歴史 == diffプログラムは1970年代初頭に、ニュージャージー州マーレイ・ヒルにあったAT&Tのベル研究所で開発されたUNIX上で開発されたもので、1974年のUNIX第5版に同梱され最初に公開された最終バージョンはダグラス・マキロイが開発したものであった。このバージョンのdiff実装については1976年にdiffの初期のプロトタイプ実装を行ったジェームズ・W・ハントとの共著による論文の中で研究成果として発表された。 マキロイの研究はスティーブ・ジョンソンによるGCOS上の比較プログラムやマイク・レスクによるproofプログラムの先行する研究の影響を受けたものだった。proofは元々UNIX上で開発されdiffのような行単位の変更箇所を出力するもので、行の挿入・削除を示すのにブラケット(<、>)による出力も用いられていた。これらの初期のアプリケーションではヒューリスティクスが使われていたが、その出力の安定性は低いものだった。ファイル比較ツールの潜在的な有用性に触発されたマキロイはより頑健で様々な対象に使用でき、かつPDP-11のハードウェア的な制約上でもうまく動作するようなツールの研究、設計に取り組んだ。このアプローチによる研究にはベル研の同僚であったアルフレッド・エイホ、エリオット・ピンソン、ジェファーソン・ウルマン、ハロルド・S・ストーンの研究者らとの協力を受けて取り組んだ。 Unixにおいては、edラインエディタの利用が「編集スクリプト」機能という概念と自然に結びつくようなdiff機能を提供することとなった。edによる編集スクリプトと元ファイルとを両方保存しておけば、edコマンドだけで変更後のファイルを完全に再構成できることになる。これを利用することによりファイルの複数改版履歴を保存するのに必要なディスク容量を相当減らすことができる。マキロイは元々様々な形式で出力できるようなdiffを作りその出力を処理できるようなポストプロセッサを作ろうと考えていたが、文法そのものをdiff形式として規定してしまい、さらにedコマンドが解釈できるような逆順入力に対応するようなdiffコマンドを実装する方がずっと単純で楽にできると判断した。1985年にはラリー・ウォールがこのdiff出力を入力として受け取ってファイルを変更するというアイデアを一般化、拡張して別コマンドとしてpatchを作成した。 diffが作られてしばらくは、ソフトウェアコードや技術文書のマークアップのソース部分の変更箇所を比較する、プログラムのデバッグ出力の検証、ファイルシステム中のファイル一覧の比較といった使い方が一般的であった。ed用の出力により、ファイルへの一連の変更をひとまとめにしてファイル容量を節約するというアイデアが出てきた。Source Code Control System(SCCS)はそのようなアイデアを実装したものとして1970年代後半に実装がなされた。 diffは概念的にはザナドゥ計画(Project Xanadu)の思想を受けたものである。Xanaduは1960年に出現したハイパーテキストプロジェクトでその「相互参照ウィンドウ」機能に必要な履歴版の管理・追跡という概念を示していた。ファイルの相違点の提示はこの機能の一部としてより広い用語「トランスクルージョン(transclusion)」に含まれていた。トランスクルージョンとはある文書が他の文書もしくは他の版の一部の中に含まれることを指す。 電子化時代の人文科学においては、コンピュータによる比較ツールは過去に大部で出版された文学作品に対しても用いられている。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Diff」の詳細全文を読む スポンサード リンク
|