日別アーカイブ: 2017-11-06

ファイル比較ツール

ツールとノウハウ

物を作るに当たり、材料とそれを作るツール(道具)があれば十分とは限りません。ものには大きさ、重さ、成分など様々な仕様があり、その上、料金、納期などたくさんの制約があります。そのため、周辺知識(技術情報、ノウハウ)と多くの道具を必要とします。

双方を豊富に持ち合わせてこそ、一流の製造者と言えるでしょう。ソフトウェアを開発するに当たり、幾度となくソースコードの改訂が行われます。改訂記録簿に改訂理由や改訂箇所などを記録して管理します。

改訂記録簿に記入することは大きな改訂であるときのことが多く、小改訂では省略されることがあり、以前のファイルと最新ファイルの差を浮き彫りにしたいことがあります。それを解決するツールにファイルコンペアがあります。

フリーソフトにもごまんと数がそろっていますが、今回はWindowsに備え付けのFC.EXEの使い方を紹介します。

コマンドプロンプト

2つのファイルを比較するツールであるファイルコンペア(FC.exe)はDOS時代から深い歴史があり、Widowsのコマンドプロンプト(CMD.exe)で動作します。「スタート」-「Windowsシステムツール」-「ファイル名を指定して実行」-「CMD.exe」により起動されるアプリがコマンドプロンプトです。

起動されるとモニタ画面が黒くなり、C\のようなプロンプトマークが表われます。コマンドプロンプトはタイプライター時代のCUI(Character User Interface)アプリですがまだ現役です。現在のGUI(graphic User Interface)に相当する代替品がない場合などに使われることがあり、今回、FC.exeを使ってみます。

上の図はCMDのプロパティで画面の色、文字の色を変更しています。

コマンドプロンプトモードで動作するアプリは「CMD.exe」の起動後にキーボードからFC.exeのようなプログラム名を入力して立ち上げることが一般的ですが、「ファイル名を指定して実行」の次に「FC.exe」で直接、立ち上げることができます。

コマンドプロンプトモードを経由せずWindowsから「ファイル名を指定して実行」した場合、コンソールに表示する動作結果は一瞬で消滅するので、コンソール出力を標準出力装置(モニタ)からディスク装置に切り替える措置は必須です。

ファイルの比較

ファイルコンペア(FC.exe)の機能や使い方を知るには、CMDアプリの起動画面で

Help  FC  >  FileCompare.TXT

と操作すれば、FileCompare.TXTに以下のように出力されます。

2つのファイルまたはファイル セットを比較し、相違点を表示します。

FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]
   [ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2
FC /B [ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2

  /A         相違する各部分の 1 行目と最後の行だけを表示します。
  /B         バイナリの比較を実行します。
  /C         英字の大文字と小文字を区別しません。
  /L         ファイルを ASCII テキストとして比較します。
  /LBn       連続する最大不一致行を指定行数に設定します。
  /N         ASCII の比較で行番号を表示します。
  /OFF[LINE] オフライン属性が設定されたファイルをスキップしません。
  /T         タブをスペースに変換しません。
  /U         Unicode テキスト ファイルとしてファイルを比較します。
  /W         連続した空白(タブとスペース)を1つのスペースに圧縮して比較
             します。
  /nnnn      不一致発見後に確認する、一致すべき連続行数を指定します。
             
  [ドライブ1:][パス1]ファイル名1
             比較する最初のファイルまたはファイル セットを指定します。
  [ドライブ2:][パス2]ファイル名2
             比較する2番目のファイルまたはファイル セットを指定します。

コマンドプロンプトを隠す

コマンドプロンプトになじみがない場合はコマンドプロンプトを隠しましょう。それにはコマンドプロンプトに深いかかわりのあるバッチコマンドを理解しなければなりません。バッチコマンドを収録したファイルは拡張子がBATで、一つのコマンドが終了したら次のコマンドを実行するなど複数のまとまった仕事ができるように定義されたテキストファイルです。

直前のアプリが終了コードをサポートしているとエラーコードに対応した制御をする機能があり、使い方により高度な処理をさせることができます。ここではバッチファイルを使って、ファイルの比較状況をファイルに残しコマンドプロンプトの存在を隠します。

【FC2.BATの内容】
C:\Windows\System32\FC.exe /L /N sample1.html sample2.html > FC.TXT

例えば、FC2.BATに上のようなコマンドを作って実行します。実行されるFC2.BATと同一フォルダに比較される2つのファイルが存在すれば、一瞬、黒い画面が現れた後、FC.TXTファイルが数秒後に生成されます。

生成されない場合はFC.exeが実行されなかったケースが多く、実行されてもFC.TXTファイルサイズが0の場合は比較対象のファイルが見つからないケースがほとんどです。比較するファイルが異なるフォルダにある場合は、ファイル名にフルパス指定をします。

因みに’>’はリダイレクト機能であり、コンソールに表示される内容をファイルに保存することを指定しています。この機能によりコンソール画面に表示されるはずであった比較結果がテキストファイルに保存され、コマンドプロンプトの存在が隠蔽されます。

このあと、テキストエディタにより比較結果を確認します。

比較結果(FC.TXTの内容)

ファイル sample1.html と sample2.html を比較しています
***** sample1.html
   51:  var okng=["", ""];              //ニコニコ顔(OK)、涙顔(NG)
   52:  var ctx=helpCount=count=success=passWord=pw=0;
   53:  var retry=3;
   54:  var tm = setInterval("timerX()", 1000);
***** sample2.html
   51:  var okng=["", ""];              //ニコニコ顔(OK)、涙顔(NG)
   52:  var ctx=helpCount=0;
   53:  var count=success=0;
   54:  var retry=3;
   55:  var passWord=pw=0;
   56:  var tm = setInterval("timerX()", 1000);
*****

さいごに

ファイルの差分を色を変えて表示してくれるファイルコンペアツールがたくさん揃っています。これらに較べFC.exeはモノクロムで華やかさはありませんが、比較結果をファイルに残すことができるので結構、重宝しています。