コマンドラインに触れずにdiffを使う

 diff-extを使えば、GNOMEユーザはNautilusからファイルの比較やマージが行える。KDE 3ユーザなら、同じサイトにあるkdiff-extがKonquerorで使える。どちらのユーティリティも、ファイルおよびディレクトリへのパスを処理して外部のdiffツールを呼び出すことで、こうした作業を実行する。diff-extを使えば、別々のディレクトリにある名前の違う2つのファイル、またはディレクトリツリー全体を簡単に比較できる。

 主要なLinuxディストリビューションでは、Ubuntu Intrepid用のgdiff-extパッケージしか見つからなかった。そこで今回は、64ビット版Fedora 9マシンでgdiff-ext 0.3のソースからビルドを行う。なお、本稿の執筆時点ではダウンロードページの内容に誤りがあり、バージョン0.2.4がgdiff-extの最新版として記されている。プロジェクトのSourceForge.netページ一番下にある「Older versions」のリンク先に行けば、ダウンロード可能な最新版を確認できる。

 gdiff-extをビルドするには、Fedora 9またはopenSUSE 11であればnautilus-devel、Intrepidであればlibnautilus-extension-devのインストールが必要になる。そのうえで、以下のコマンドを実行する。

$ tar xjvf /FromWeb/gdiff-ext-0.3.tar.bz2
$ cd ./gdiff-ext-*
$ ./configure
$ make -k
...
make[3]: Entering directory `/home/ben/gdiff-ext-0.3/diff-ext/src'
...
-fPIC -DPIC -o .libs/main.o
main.c:16:25: error: gconf/gconf.h: No such file or directory
main.c:17:32: error: gconf/gconf-client.h: No such file or directory
main.c:18:41: error: libgnomevfs/gnome-vfs-utils.h: No such file or directory
...

 あいにくこのgdiff-extのソースはビルドが少し面倒だが、新しいリリースのセットアップが解決不可能なくらいに難解なものになっているはずがない。GConf関連のファイルが見つからないという問題に対処するには、次のように、追加のGNOMEライブラリをCFLAGSにエクスポートするとよい。

$ export CFLAGS=`pkg-config gnome-vfs-2.0 eel-2.0 --cflags`
$ ./configure
$ make
...
make[3]: Entering directory `/home/ben/gdiff-ext-0.3/setup/src'
...
main.c:17:37: error: eel/eel-mime-extensions.h: No such file or directory
main.c: In function 'main':
main.c:116: warning: initialization makes pointer from integer without a cast

 上記コンパイルの「setup/src」におけるeelライブラリの問題を回避するには、「eel-mime-extensions.c/eel-mime-extensions.h」ファイルを「eel-2.20.0」から「setup/src」にコピーし、そのヘッダーおよびソースファイルをカレントディレクトリからインクルードするように「main.c」を編集すればよい。これは、「eel-mime-extensions」ファイルが2007年10月にlibeelから削除されたためだ。

$ vi setup/src/main.c
#include <libgnomevfs/gnome-vfs-mime-info.h>
#include "eel-mime-extensions.h"
#include "eel-mime-extensions.c"
$ make
$ sudo make install

 すべてがうまく行ったら、Nautilusを再起動してgdiff-extの存在を認識させる。GNOME環境がNautilusを再生成(respawn)するように設定されていれば、すべてのNautilusプロセスを強制終了したうえで再生成することができる。最後の仕上げとして、gdiff-ext-setupを起動し、お気に入りのdiffプログラムがgdiff-extから実行されるようにする。

$ killall -15 nautilus
$ gdiff-ext-setup

diff1_thumb.png
gdiff-extのスクリーンショット

 Nautilusでファイルを2つ選択した状態で、右クリックによってコンテキストメニューを表示すると、メニューの下のほうに「Compare」(比較)という項目が現れるはずだ。「Compare」を選択すると、左のスクリーンショットに示すように、設定したdiffユーティリティが2つのファイルに対して実行される。

 ファイルを1つだけ選択した状態だと、コンテキストメニューに「Compare later」(後で比較)という項目が表示される。このオプションをクリックすると、選択しているファイルのパスがスタックに入れられる。続いて、別のファイルを選択すると、コンテキストメニューには「Compare later」のほかに「Compare to ‘/…/<最初のファイル>’」という項目が現れる。

 代わりに2つのファイルを選択すると、最初の例と同じように両者の比較ができるほか、先ほど「Compare later」スタックに入れたファイルと合わせて3ファイルの比較を行うオプションも表示される。ただし、今のところgdiff-extでは、この比較用スタックを使っても、最後にスタックに追加された対象との比較しか行えない。

diff2_thumb.png
gdiff-extによるディレクトリ間の比較

 ディレクトリを2つ選択して「Compare」を選択すると、双方のディレクトリが設定済みのdiffツールに渡される。たとえば、私がテストに使ったMeldでは、2つのディレクトリで再帰的にdiffを取ることができた。

 なお、プロジェクトによって用意されているドキュメントはgdiff-ext用で、kdiff-ext用のものは見当たらない。

 ファイルマネージャからdiff-extが使えるので、別々の場所にあるファイルどうしのdiffがずいぶん取りやすくなった。大画面のディスプレイ上でたくさんのファイルマネージャ画面を同時に開いている場合は、ターミナルウィンドウからdiffコマンドを打つよりもすばやくdiffを起動できるだろう。

Ben Martinは10年以上前からファイルシステムに携わっている。博士号を持ち、現在はlibferris、各種ファイルシステム、検索ソリューションを中心としたコンサルティング業務に従事。

Linux.com 原文(2008年11月19日)