WinMerge は、オープンソースの Windows 向け比較・マージツールです。
ファイル・セットやフォルダの違いを十分把握できているかどうかは、業務を適切に効率よく進める上で、重要なポイントです。 特に、設定ファイルは誤った変更を行うと問題が発生する可能性があり、設定ファイルを管理するIT管理者は慎重を期す必要があります。WinMerge を利用すると、ファイル・セットやフォルダの違いが把握でき、必要に応じて変更をマージすることもできます。
WinMerge で何ができるか?
WinMerge は、オリジナルから何年も経過する間に、ファイルやフォルダの比較・マージのための様々な機能が追加され、充実しました。
- 3ファイル比較
- ビジュアルなテキストファイルの差異表示とマージ
- 移動行検出
- 比較されたファイルのマップを示すロケーションペイン
- 多様なファイルフォーマット(Windows、Unix、Mac)に対応
- フォルダ比較のための正規表現ベースのファイルフィルタ
- ファイルサイズと日付を使用した高速比較
- ブロックで差異を強調表示する画像比較
- パッチファイル生成
- シェル統合
ファイルの比較
WinMerge では、2つのファイル(または2つのフォルダ)を、左側と右側に開くことができ、2つのファイルの違いを比較できます。下のスクリーンショットからわかるように、左側に表示するファイルとして config1.txt、右側に比較するために表示するファイルとして config2.txt を選択しています。WinMerge は最近、3ファイル比較を導入しましたが、ここでは2ファイル比較に限定して説明します。ファイルを入力したら、[Compare] をクリックします
ファイルが読み込まれると、ファイル間の違いが黄色で強調表示されます。左端に表示されるミニマップで全体のどこに該当するかがわかります。この例では、右側の config2.txt ファイルに空白の部分があり、config1.txt ファイルの該当部分に対応するセクションが抜けていることがわかります。セクションごとに1対1で比較し、以降のすべてを変更されているとみなしてしまうような愚かさはありません
変更部分のマージ
左側のファイルのセクションを変更された右側のファイルの該当セクションに置き換える形でマージしたい場合はどうすればいいでしょうか?マージしたいファイルのセクションの上で右クリックし、マージする方向を選択するという簡単な操作を行うだけでマージが実現できます。この場合、左側のファイルのセクションの上で右クリックし、[Copy-to-Right] を選択します
フォルダの比較
ファイルの比較は便利ですが、多くの場合、フォルダ構造内の違いも知る必要があります。フォルダ内に変更されたファイルがある場合、WinMerge でそれらの違いを確認し、直接比較して、必要であればマージまたはソートできます。それには、ファイルのときと同様に [Select Files or Folders] ダイアログボックスを開き、ファイルを選択する代わりに、2つの異なるフォルダを選択します。例として、1つ目にC: \Source\ フォルダ、2つ目に C: \Destination\ フォルダを選択して [Compare] をクリックします
フォルダ比較の場合は、ファイル比較のように左側と右側に比較対象のファイルが表示されるのではなく、フォルダ内の各ファイルの比較結果のリストが表示されます。それぞれのファイルには、以下のような比較結果が示されます。
- Left Only: (左側のフォルダにのみ存在)
- Right Only: (右側のフォルダにのみ存在)
- Text files are identical (テキストファイルが同一)
- Binary files are identical (バイナリファイルが同一)
1つのフォルダから別のフォルダにファイルをコピーするには、右クリックしてポップアップするメニューの中から、[Copy] を選択します。下の例では、TestFile6.txt を右側のフォルダから左側のフォルダにコピーするために、[Copy] - [Right to Left (1)] を選択します
フィルタの作成
フォルダを比較するとき、フォルダ内のある種のファイルは比較に含めたくない場合があります。典型的な例は、バージョン管理ディレクトリです。例えば、GITバージョン管理システムは、比較対象に関連がない可能性がある多数のファイルを含む .gitフォルダを作成します。これを比較対象から外すには、比較するフォルダを選択するとき、WinMerge でその特定のアイテムをフィルタで除外する必要があります。
WinMerge では、.flt ファイルを使用してフィルタをカスタム化できます。形式は非常に簡単で、柔軟性があります。フィルタファイルを使ってフィルタリングする例を以下に示します。
name: Exclude GIT Source Control
desc: Exclude GIT files and directories
def: include
d: \\\.git$
一見すると非常にシンプルですが、1つずつ見ていきましょう。フィルタ設定に4つのラインを使っています。
- name - フィルタリストに表示されるフィルタの名前
- desc - フィルタで何を行おうとしているかの説明
- def - フィルタタイプが include か exclude かを指定
”include” は、フィルタルールに一致するアイテムを除くすべてのファイルを含めることを意味し、”exclude” は、フィルタルールに明示的に一致するアイテムを除くすべてのファイルを除外することを意味します。混乱する人が多いでしょうが、”include” は何を含めないかを指定し、”exclude” は何を除外しないかを指定します。
最後のラインが、フィルタルールを実際に定義する、おそらく最も重要なラインです。ここでは、”d:” (directory、すなわちフォルダ)タイプの構文を用いており、含めない(include)フォルダを指定しています。(ファイルの場合は “f:” タイプの構文になります。)ここでは .git フォルダを含めないようにしたいわけですが、制御文字である “.” はエスケープする必要があります。また、フォルダ区切り文字のバックスラッシュ “\” も制御文字なのでエスケープする必要があります。
エスケープにはバックスラッシュ “\” を使います。フォルダ区切り文字のバックスラッシュをエスケープするのにバックスラッシュを1つ使用(\\)し、“.” をエスケープするのにもう1つバックスラッシュを使用(\.)します。そのため、“.” で始まるフォルダを指定するのに、バックスラッシュが3つ重なることになります。
フィルタメニューを使用してこのフィルタをインストールし、適用すると、.git フォルダが比較から除外されます。
まとめ
WinMerge は便利なファイルとフォルダの比較ツールです。継続的にアップデートされる、このオープンソールの Windows ツールを活用しない手はありません。新しく導入された3ファイル比較と新しい画像比較機能によって、WinMerge はさらに強力、高機能になりました。
Adam Bertram
Adam Bertram is a 20-year veteran of IT. He’s currently an automation engineer, blogger, independent consultant, freelance writer, author, and trainer. Adam focuses on DevOps, system management, and automation technologies as well as various cloud platforms. He is a Microsoft Cloud and Datacenter Management MVP and efficiency nerd that enjoys teaching others a better way to leverage automation.