GUIのdiffツールにはさまざまなものがあり、Gitに特化したSourcetreeなどを別にすれば、非エンジニアも使える高機能な汎用ツールとしてはWinMerge(無償)がよく使われているかと思います。しかし惜しいことにWinMergeはWindowsでしか動作しません。
ここでは、もうひとつの選択肢として、Beyond Compare 4というツールをご紹介します。
- 有償だが、30日間無料で使える
- 期間ではなく、起動した日数の合計なのが地味にありがたいです。
- Mac/Win/Linuxで使える
- 日本語化されている
前職で長年使っていましたが、改めて個人的に購入しました。diffツールはWebアプリでは実現しづらいので(特にディレクトリのdiff)、お金を払う価値があると思います。
Beyond Compare 4でできること
WinMergeでできることは、一部を除いてひととおりできると思ってよいと思います。
Beyond Compare 4とWinMergeどちらでも使える機能
主なもののみピックアップします。
- テキスト比較
- ファイル比較
- Word
- Excel
- ディレクトリ比較とディレクトリ同期
- 画像比較
- エクスプローラやFinderに右クリックメニューを追加
- 3-wayマージ
- zipされたファイルの比較
- WinMergeではプラグインが必要
- レポート機能(HTMLやdiffファイルなど)
Beyond Compare 4独自と思われる機能
- Mac/Win/Linuxで動く
- エンコーディングが豊富かつ切り替えが便利(多言語案件向け)
- マルチセッション
- テキスト比較やディレクトリ比較のセッションごとにウィンドウを開ける
- セッションは自動保存される(明示的に保存も可能)
- 保存されたセッションは次回すぐ開ける
- 音声ファイル比較
WinMerge独自と思われる機能
- 画像比較のオーバーレイアニメーション(デモ)
- Excelのビューをビジュアルdiff表示できる(プラグインが必要)
- (Beyond Compare 4ではシートの文をを比較します)
WinMergeのオーバーレイアニメーション↑はちょっと羨ましいです。BeyondCompare 4を購入したついでに、WinMergeのこうした機能も取り入れて欲しいとフィードバックしたところ乗り気になってくれたので、今後を楽しみにしています。
Beyond Compare 4設定のコツ
さしあたって設定 > 比較の以下を調整するとよいでしょう。
- 「内容を比較する」を「ルールに基づく比較」にする
- テキスト、画像ともにこれでだいたいまかなえます
- 「タイムスタンプを比較」をオフにする
- Gitと同様にタイムスタンプを無視して比較したい場合
Beyond Compare 4の使い所
Beyond Compare 4、WinMergeともに、インストールするだけで使えるようになるので、Webデザイナーなどの非エンジニアが使う場合や、急いで使いたい場合に向いています。
Windowsユーザーで既にWinMergeに慣れている人であれば、Beyond Compare 4に乗り換えるほどではないかもしれませんが、複数OSでツールをまとめ買いするときには選択肢に入れてよいと思います。
1. ディレクトリ・ファイル比較
Finderやエクスプローラ上でディレクトリ同士を比較できます。納品物が指定通りのディレクトリ構成かどうかのチェックなどに便利です。zipされていてもそのまま比較できます。
上のようにFinderのコンテキストメニューで「サービス > ファイルを比較」をクリックすると、以下のようにディレクトリとファイルの差分が表示されます。「比較の左のフォルダに選択」などで1つずつ選択もできます。
2. 画像の比較(特にMac/Linuxで)
たとえばWebアプリのテストで、表示結果を自動的にスクリーンショットにしてディレクトリに保存している場合、Beyond Compare 4やWinMergeを使ってディレクトリごと差分を出すことで、たとえばCSSの変更が思わぬページに影響を与えているなどを手軽に検出できます。
2. ExcelやWordファイルのdiff
ぱっと見にわかりにくいExcelファイルのテキスト差分を、以下のようにあぶり出せます。xlsxはもちろん、バイナリのxlsファイルも比較できます。
3. 多言語テキストのエンコーディング切り替え
Beyond Compare 4はエンコーディングの指定が豊富なので、多言語ファイルを比較したい場合にきわめて有用です。比較の左と右それぞれのエンコーディングをその場で変えられるというのは得難いメリットです。
実際、キリル文字のエンコーディングが豊富なおかげで助けられたことがありました(当時他のどんなツールでも文字化けしてしまった)。
エンコーディングを比較画面のドロップダウンで即切り替えられるのは特にありがたい点です。
Beyond CompareのUIでは「ロケール」、WinMergeのUIでは「コードページ」と表記されていますが、「エンコーディング」の方が意図に近いと思われるので、本記事では両者ともに「エンコーディング」と表記することにします。
「Windowsでは多くの場合エンコーディングを(Microsoft)コードページで指定する」というのが実情に近いと思われます。
Beyond Compare 4のエンコーディングリスト
せっかくなのでリストにします。
- Unicode
- UTF-8、UTF-16LE、UTF-16BE
- アラビア語
- DOS、ISO、Windows
- バルト語
- ISO、Windows
- 中欧
- DOS、ISO、Windows
- 簡体字中国語
- GB18030、HZ
- 繁体字中国語
- Big5
- キリル語
- DOS、ISO、KOI8-R、KOI8-U、Windows
- ギリシャ語
- ISO、Windows
- ヘブライ語
- DOS、ISO-Visual、Windows
- 日本語
- EUC、Shift_JIS
- 韓国語
- (表記なし)
- タイ語
- Windows
- トルコ語
- ISO、Windows
- ベトナム語
- Windows
- 西欧
- ISO、Windows
参考: WinMergeの場合
WinMergeのデフォルトはShift_JISです。
以下の記事によると、WinMergeでのエンコーディングの切り替えには設定ダイアログを開いてMicrosoftコードページを手入力しないといけないようです。それ以外のエンコーディングについてどこまでサポートされているかは使ってみないと何とも言えません。
参考: Application/WinMerge/tips/文字コードがUTF-8のファイルを比較したい - 豚吐露@wiki - アットウィキ
参考: Code Page Identifiers - Windows applications | Microsoft Docs
おまけ: Beyond Compare 4とGit
Beyond Compare 4はある時期から3-wayマージをサポートするようになり、Gitのdiffツールとしても使えるようにはなっているようです。
ただGit向けの設定が少々面倒そうなのと、今使っている別のgit向けGUI diffから乗り換えるほどではなさそうなので、まだ試していません。
参考: Using Beyond Compare with Version Control Systems under OS X — Beyond Compare Technical Support
おまけ2: ファイルサーバーなどとの高速ディレクトリ同期
Beyond Compare 4のちょっと変わった使い方として、ファイルサーバーから/への高速ディレクトリコピーやディレクトリ同期があります。
Finderで大量のファイルをコピーするとファイル数のカウントなどで結構待たされますが、Beyond Compare 4によるディレクトリのコピー/同期はFinderよりずっと高速です。
コマンドプロンプトでscp
を普段使いしているエンジニアには無用かと思いますが、コマンドプロンプトを立ち上げるのが億劫な方はどうぞ。
おたより発掘
もうひとつのGUI diffツール「BeyondCompare 4」 https://t.co/EZGs23kRSi
普段は IDEA, 単体の GUI アプリだと Meld 使っているけど、
Linux 対応してるみたいやし、
パッと見、よさそうやなぁ— who (@_who378) January 30, 2019
もうひとつのGUI diffツール「Beyond Compare 4」
WinMergeこんな機能あんの
もうひとつのGUI diffツール「Beyond Compare 4」
いま手元にあるWinMerge2.14.0.80+-jp-80、ファイルメニューの下にファイルエンコーディングの項目あってそれぞれのペインのエンコードをドロップダウンリストで変更できますよ
以前から薄々感じていましたが、Beyond Compare 4って意外とエンジニアに知られてなかったようですね。
A nice Japanese language overview of Beyond Compare by one of our customers. https://t.co/EaL8Yo5zJj
— Scooter Software (@ScooterSoftware) January 30, 2019