プログラミング

【WinMerge】HTMLの差分レポート出力がとても便利

【※ 当記事は2023年9月22日時点の情報です】

ペイヴメント(@pavement1234)です。
プログラミングを行っているとソースコードの差分を見たくなることがあります。
例えば「test.c」を変更したときに自分が意図した変更になっているか
(間違えて変なプログラムをコピペしてないか)が気になります。

そんなときWinMerge オープンソースのWindows 用比較・マージツール。WinMerge はフォルダとファイル両方が比較でき理解しやすく扱いやすいテキスト形式で差異をビジュアルに表現する)が役に立ちます。
但し、古いバージョンを使うと本記事のHTMLレポート機能が搭載されてないので注意

WinMergeホームページ

バージョン情報
Windows10
WinMerge 2.16.32

インストール

①ダウンロードページに行く

WinMerge のダウンロード – WinMerge

②最新のインストーラをダウンロードする
(2023年9月23日現在 Ver2.16.32が最新)

赤枠のボタンをクリックするとインストーラがダウンロードされます。

③インストーラを実行

インストーラをダブルクリック。
「このアプリがデバイスに変更を加えることを許可しますか?」と出るのでOK。
インストーラはデフォルト設定のまま、
「次へ」を6回「インストール」を1回「次へ」を1回「完了」を1回押せばOK。
WinMergeのアプリケーションが起動したらインストール成功。


インストール成功。

差分抽出とHTML出力

①データを準備する

フォルダAとフォルダBを用意し、
それぞれ1.txt 2.txt 3.txt 3つのファイルを準備。

フォルダA
1.txt 
ASCIIの”1”が100文字
2.txt ASCIIの”2”が100文字
3.txt 
ASCIIの”3”が100文字
フォルダB
1.txt 
ASCIIの”F”と”1”が交互に10文字ずつ合計100文字(フォルダAと差分あり)
2.txt ASCIIの”2”と”E”が交互に10文字ずつ合計100文字(フォルダAと差分あり)
3.txt 
ASCIIの”3”が100文字書いてある(フォルダAと差分なし)

これでフォルダとフォルダはデータ差分がある状態になった。

②フォルダAとフォルダBをWinMergeに読み込ませる

フォルダAを右クリックして「WinMerge」をクリック。

「1番目のファイルまたはフォルダ―」にフォルダAが選択された。

「2番目のファイルまたはフォルダ―」の「参照」をクリックしフォルダBを選択する。

「2番目のファイルまたはフォルダ―」にフォルダが選択されるので、
「比較」をクリックする。

フォルダとフォルダの比較結果が表示される。
1.txtと2.txtは「ファイルは異なっています」、3.txtは「同一」となる。

1.txtをダブルクリックすると、
フォルダAの1.txtとフォルダBの2.txtの差分が表示される。
「Esc」を押すと1つ前の画面に戻る。

3.txtをダブルクリックすると、
「選択されたファイルは同一です」と表示されるので「OK」で閉じる。
「Esc」で元の画面に戻る。

③HTML差分レポートを出力する

メニューから「ツール」→「レポートの生成」を選択する。

「レポートファイル」に差分HTMLの出力先を入力。
「スタイル」に「シンプルなHTML形式」を選択。
「ファイル比較レポートを含める」をONにして「OK」をクリックする。

「レポートの生成に成功しました」と出るので「OK」をクリック。

差分HTMLは以下の形式で出力されるので差分.htmlをクリックする。
(差分フォルダはファイル毎の比較レポートが格納される)

フォルダAとフォルダBの差分サマリーが表示されるので
「1.txt」と「2.txt」をそれぞれクリックする。
(3.txtは差分がないので詳細レポートも無い)

1.txtの差分は以下の通り(差分がビジュアルで表示されて分かりやすい)。

2.txtの差分は以下の通り。

まとめ

今回は簡単な例でしたが、
実際のプログラミング現場では何百というファイルを扱うと思います。
それぞれ差分を出すのは大変なのでWinMergeで効率アップしましょう。
是非お仕事で使ってみてください。

ABOUT ME
ペイヴメント
ペイヴメントのエンジニア塾(当ブログ)では20年以上の経験から得られたプログラミング系ノウハウについてベテランにも満足して頂けるような内容の濃いコンテンツを初心者にも分かりやすい形で日々発信しています。【経歴】ベンチャーのソフトハウスで4年勤務後、精密機器メーカーのソフト開発部門に勤務し今に至ります。
error: Content is protected !!