KomparatorおよびKDiff3を利用したディレクトリ間の同期処理

 1つの作業をラップトップマシンとデスクトップマシンとを使い分けながら交互に進めていくユーザにとって、双方のマシン間でデータを反映させ合う同期処理は不可欠の業務となるはずである。その種のサポートツールとしてはscpやrsyncなどのコマンドライン系ツールが多数存在しており、グラフィカル系アプリケーションに限ってもKonquerorKrusaderなどの汎用ツールを使って処理することも、あるいはUnison翻訳記事)のような専用ツールを利用することもできる。そうした中で本稿で紹介するのは、独自の機能を装備したKDEアプリケーションである Komparator および KDiff3 を用いたディレクトリ同期の手法である。

 Komparatorは2つのディレクトリ間で収録ファイルの比較と同期を行うためのツールである。特にこのツールはKIOスレーブを使用することで、通常のディレクトリだけでなく、smb:// (Sambaフォルダ)、ssh://およびftp:// (SSHおよびFTPを介するリモートディレクトリ)、fonts:// (ローカルフォント)などのプロトコルベースの疑似フォルダを比較対象とすることも可能とされている。同ツールはGPLv2の適用下で公開されており、現状の最新版は2007年10月にリリースされたバージョン0.8である。

 Komparatorのインストール作業自体に特に難しい点はない。まずはダウンロードサイトからソースコードの入手をすればいいが、UbuntuおよびSUSEについては専用バージョンも用意されている。私の場合はopenSUSE 10.3用バージョンをダウンロードして「sudo rpm -Uvh komparator-0.8-SuSE_10.3.i586.rpm」によるインストールを行ったところ、メインメニューのUtilities → Archivingに該当するエントリが追加された。その他のディストリビューションの場合はソースパッケージのダウンロードと抽出をしてから、通常のconfigure、make、make installを用いたインストールを行えばいい。

komparator1_thumb.png
Komparator

 このツールに同梱されているドキュメント類はあまり充実してはおらず、プログラム実行中に画面右下にあるHelpボタンをクリックすると「Komparator Handbook」が表示されるだけである。また海外のユーザにとっては残念なことに、同プログラムは英語版しか用意されていない。

 Komparatorのメインウィンドウはかなり込み入った印象を受けるが、そのインタフェースとしての構成自身にも一般的ではないデザインが散見される。例えばAboutおよびHelpコマンドがボタン形式で実装されているのはともかく、わざわざ重複させる形で“What’s this”の専用ボタンまでもが用意されているのは、あまり見られない仕様ではなかろうか。いずれにせよ具体的な同期操作を進めていくには、Basic Search OptionsおよびExtended Search Optionsの画面にて、2つのディレクトリを選択して処理対象とするファイルの指定をしなくてはならない。その他のオプションとしては、処理階層の再帰化(“include subfolders”ボタン)、隠しファイルも対象に含めるか、ファイルの大文字小文字を区別させるか(Linux/Unixシステムならあって当然の機能)などの指定が行えるようになっている。またKomparatorの重複ファイル検出には、バイト単位の比較モードだけでなくファイルのMD5チェックサム計算モードも用意されており、後者のモードを指定した場合はチェックサムの一致するものが同一ファイルと見なされるようになる。

 同期処理を実行する前には、Settingsタブの設定内容を確認しておかなくてはならない。次に同期対象とする2つのURLを指定するが、この設定画面における“left”URLは上側のボックス、“right”URLは下側に表示されるボックスを指すので注意が必要だ。その後Searchをクリックすると、比較結果として下記の内容が表示されるはずである。

  • Duplicate filesタブ――複数の存在が検出されたファイル。これはディレクトリ間の同期という処理に直接関係はしないが、使い方によっては便利な機能である
  • Missing filesタブ――指定された一方のURL側にのみ存在するファイル。Komparatorのディレクトリ同期はこうしたファイル群を他方にコピーすることで実施される
  • Newer filesタブ――すべてのファイルがカラーコード別で一覧される(ただしカラースキームの詳細は分かりにくい)。左側のファイルとそれに対応する右側のファイルのペアを選択すると、右クリックにより、サイズ、タイプ、所有者などのファイル情報を比較できる。ただしファイルの内容を直接確認することはできない

 ここでの具体的な同期プロセスは、2つのディレクトリ間に配置された6つのボタンを用いて、操作対象となるファイルのコピー、移動、削除を個別に実行する仕様となっている。これらのボタンで行えるのは、左右2つのディレクトリ間におけるファイルのコピーと移動および各ディレクトリからのファイル削除であるのだが、多数のファイルを格納するディレクトリでこうした操作を個別実行するのはかなりの手間となるので、将来のバージョンでは“do everything”のような一括処理ボタンを追加してもらいたいものである。

KDiff3

kdiff3_1_thumb.png
KDiff3

 KDiff3はKomparatorよりも多機能ではあるが、そのすべてが同期処理に関係するわけではない。とは言うもののKDiff3によるディレクトリ関係の操作としては、最大3つのディレクトリを対象とした同時比較を始め、マージ処理のシミュレーション、同期処理の自動実行、バックアップの作成など、現行のKomparatorでは不可能な各種の処理を実行できるのである。本稿で取り上げている同期処理にとって特に関係が深いのは、特定のファイル群(例えばソースファイルなど)を指定した上で両者の相違点を強調表示させ、何を残すかをユーザが確認してからマージさせるという操作が行える点である。またKDiff3のマージ処理は、ごく単純に一方を他方のファイルで上書きさせるだけではない。例えばあるファイルに変更を加えた後、その変更を反映しないまま別のマシンに置かれた当該ファイルのコピーに異なる変更を加えてしまったような場合、通常のマージ処理ではどちらか一方のファイルを残せるだけで、他方の変更部は消去させるしかなかった。ところがKDiff3では、こうした双方の変更部を残すことができるのだ。

 同プログラムの最新版は2007年4月にリリースされたバージョン0.9.92である。これはTrolltechのQtで記述されているため、WindowsおよびMac OS Xにても使用することができる。またKDiff3の場合は複数の言語にローカライズされているだけでなく、操作用ドキュメントが充実しているのもKomparatorと対照的な点だ。この「KDiff3 Handbook」はPDFファイル形態で入手することもできるが、通常はプログラム本体のHelpメニューから呼び出す形で利用することになるだろう。

 KDiff3の入手については、openSUSEの場合は標準のソフトウェアリポジトリを利用すればいい。その際の必要な操作は「smart install kdiff3」というコマンド入力だけで、その後の処理はすべて自動で処理される(奇妙なことに、こうしてインストールされたプログラムはDevelopment → Revision Controlのメニュー項目とされるようになっており、プログラマであればこうした措置も気にならないのかもしれないが、その他の一般ユーザの場合はこれをファイルシステム関係のアプリケーションかユーティリティだと思い込んでしまうのではなかろうか)。その他のディストリビューションの場合は、ソースコードのパッケージファイルをダウンロードして、「tar xzf kdiff3-0.9.92.tar.gz」による展開で作成されたディレクトリに移動し、configure、make、make installを用いた通常のインストール手順を実行すればいい。

 インストールしたKDiff3本体はデスクトップおよびKonquerorに統合されるので、ここでの比較操作は2つのファイルまたはディレクトリを選択した後、右クリック経由で実行することになる。ただし私のデスクトップマシンの場合、この操作を行うと必ずXセッションがクラッシュしてしまい、再度のログインを余儀なくさせられてしまう。なお比較対象のファイルが同じ場所に置かれていない場合のオプションとして、1つ目のファイルを右クリックして“Save it for later”を選択し、次に2つ目のファイルを右クリックした段階で実際の比較操作を実行することもできるようになっているのだが、私のデスクトップマシンはこの操作においてもクラッシュしてしまうのだ。それとは対照的に手元のラップトップマシンで動かす限り、KDiff3はトラブルフリーで動作してくれた。

 KDiff3を起動すると、比較対象とする2つ(または3つ)のディレクトリ指定用のウィンドウが表示される。ただし実際の処理を行うには、事前にConfigure画面にてDirectory Mergeタブの設定も確認しておく必要がある。最低限の事前設定としては、サブディレクトリも比較対象とするかのRecursive Directoriesオプション、比較および除外対象とするファイル名のパターン、ファイルの比較モード(バイト単位の比較を行うかファイルサイズのみの比較を行うかなど)を指定しておけばいいだろう。こうした基本設定と合わせてSynchronize Directoriesオプションを選択しておくと(可能であればこのオプションはデフォルトで有効化しておいてもらいたいところである)、必要な比較処理を経た後にディレクトリの同期が実行されるようになる。

 ここでの比較結果は、3つのコラム(A、B、C)が配置された単一画面にて、各ディレクトリにどのファイルが存在するかが一覧可能な形で表示されるようになっている。また画面右上にある表示モードの切り換え用ボタンをクリックすることで、ディレクトリ間に共通するファイルを非表示化させたり(これにより一致しないファイルのみに集中できる)、特定ディレクトリ中にのみ存在するファイルだけに絞り込むといった操作も行える。こうしたファイル間の同期としてどのような処理が可能かは、Operationコラムに表示されるようになっている。そのうち“Merge(manual)”と表示されたファイルをクリックすると、対応するファイル間を行単位で比較した結果が、追加、削除、変更の区別を示した上で表示される(比較表示に関する設定はDiffviewメニューエントリで行える)。これらをマージさせるか、あるいは特定ファイルの状態に合わせるかは、ユーザの判断に委ねられるが、そうした処理の候補はOperationコラムを右クリックすることで呼び出せるようになっている。行うべき処理を指定し終わったら、Directoryメニューにて最終的な同期の確認をすればいい。

まとめ

 本稿で紹介した2つのプログラムは、いずれも所定の目的を果たすだけの機能を有してはいるが、同時にいくつかの欠点も抱えている。Komparatorの場合、そのインタフェース構成が複雑で把握しにくいだけでなく、自動操作化が進められていないため、ユーザは手作業によるクリックを何度も繰り返さなくてはならない。KDiff3の場合はテキストファイル間の比較機能を重視した作りとなっているが、これもユーザによる各種の中間操作を必要とする。いずれにせよどちらも開発者をメインのユーザに想定しているので、一般のユーザであればKrusaderの同期ツールの方が使いやすいと感じることもあるだろう。それでも利用者をプログラマに限るとすれば、こうした用途ではKDiff3が便利なツールという結果になるのかもしれない。

Federico Kerekiはウルグアイ出身のシステムエンジニアで、20年以上に渡るシステム開発、コンサルティング、大学講師の経験を有している。

Linux.com 原文