DiffViewer

長く続いているプロジェクトで、バグ修正を行いリリースをする際に、「変更した箇所を教えろ」と言われるケースがよくある。
私なんかは面倒なんで「diffとってくりよ」という話にしたりするのだが、お偉いさんは残念ながらDiffの出力結果が読めない。
その程度の力量の人間が変更点確認して何を見たいんですかね、と思わんでもないのだが、まあ、仕事の都合上そういうケースはままあるものだ。


ただ、私は面倒くさがりである。
30以上のファイルを変更したりしたケースで、いちいち「ここの変更はこういう理由で、このソースコードを削除しこのソースコードを追加しました」なんて長いレポートは書きたくない。
じゃあ、「お偉いさんがDiffの結果を読めない」という状態自体を変えてしまえばいいんじゃない?


ということで作ったのがこれ。ソースコード付き。
http://tsuge.cuvel.com/blog/DiffViewer.zip
得意の一時間プログラムなのでデバッグもなんもあったもんじゃないし、別環境では動かないかもしれないが、幸いにも私と同じUbuntuLinuxでDiffをとっている人なら動くかもしれないという程度のもの。


利用手順としてはこんな感じ。

  1. LinuxGNU Diffが動く環境に変更前、変更後のソースコードをアップ
  2. アップした場所にcd
  3. diff -r [old_dir] [new_dir] > [diff_result_file]
  4. [3]で作った「diff_result_file」をダウンロード
  5. DiffViewer/Release/DiffViewer.exeを起動
  6. [4]でダウンロードしたdiff_result_fileを[5]の「読み込み」ボタンで読み込ませる


するとまあこんな感じの画面になる。

後はこれ見て確認してよという話にすればOK。送付するファイルはdiff_result_file一つで済む。
ちなみにdiffの出力結果とnew_difを同じフォルダにおいておけば、リストをクリックすることで変更したファイルを開くことも一応可能。My環境限定の手抜き機能だけども。


今回、こういういい加減なプログラムを作る前にずいぶんと試行錯誤をした。だって普通誰かが作ってそうなもんでしょう。
WinMergeだったら絶対そういうのがあると思って見てみると無い。レポート機能はあるが貧弱すぎる。
WinMergeプラグインも探してみたが見つからないので途中で断念。
WinDiffならどうかと思ったがやっぱり全然駄目。ファイルごとの差分をちゃんと出さない。
TurtoiseSVN辺りならなんかこっそり載ってんじゃないかと思ったが、ちょっと探してみた感じ無い気がする。
じゃあGNU Diffの実行オプション使うのはどうよと、--side-by-sideのオプションも試してみたが、TABやスペースが上手く処理できず、Excelにべた貼りした程度では使い物にならなかったので断念。
VimでDiffの結果を上手く表示できるらしいが、まさか客先にVimインストールしろなんていえるはずもないし。


このくらい調べてなかったので、もう作った方がはえーやということで一時間プログラムを決行し、出来た結果が上記のもの。
客先公開可能なSVNサーバがあって、そこにTracでも乗っけておけばこんな苦労もせんで済むのかもしれんがなぁ。




余談。
Web化して、リポート出力機能つけちゃったりして、自由に使ってね型のWebアプリケーションでも公開したら結構需要あるんじゃないかという気もする。
これに限らず、シンプルなアプリケーションを外部公開出来るよう配慮して作って、それをWebで一般解放した上で作って公開してみたい気がする。
案外、視覚効果を伴った痒いところに手が届く部品が、まだまだWeb上に不足してる気がすんだよね。こういう時こそWebサービス + それを利用した自前アプリケーションの出番って気がするんだけど、やっぱサーバ維持が入る以上、ビジネスとしてもボランティアとしても成立しにくいのかね。