この記事はソフトウェアテストの小ネタ Advent Calendar 20171日目の記事です。

テストやQAエンジニアの普段の作業を1%くらい楽にするかもしれない小技を紹介します。最近何回かひとに紹介する機会があったので、意外と知られていない?かもしれない「ファイル比較」のテクです。

※Windows向けです。

二つのファイルが一致するかどうかを比較したい

テストをしていると、出力されるログなりCSVファイルなりの中身が期待通りであるかを確認したい場面があります。

WindowsだとWinMergeなんかが有名どころで、とても便利です。

が、たとえば

  • ファイルの比較機能をもった自前のマクロを作りたい
  • バッチファイルに組み込みたい
  • セキュリティ上の制約から、WinMergeはじめソフトウェアのインストールができない

といった場合もあります。

そんなときに便利なのが、コマンドプロンプトで実行できる「fc」というコマンドです。

以下はヘルプの内容。

C:\Users\yoshiki>fc /?
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番目のファイルまたはファイルセットを指定します。

使用例

比較のためにテキストファイルを用意しました。中身はLorem ipsumです。

file1-1とfile1-2は同じもの、

file2はfile1-1の内容を一文字書き換えたものです。

まず、fcでfile1-1とfile1-2を比較してみます。

これらは同じ内容のファイルなので、以下のように「相違点は検出されませんでした」と表示されます。

次に、file1-1とfile2を比較してみます。

これらはわざと相違を作ってあるので、以下のように相違点が検出されます。

ファイルの内容のうち、差分があった行の前後の行を含む箇所が表示されているのがわかります。

このように、ファイルに差分があるのかどうかをサクッとみることができ、しかもWindows標準なので他のツールのインストールも不要。

ちょっとしたときに使ったり、自作のバッチやマクロで呼び出して使うのに便利です。おためしあれ。