フォルダ比較ツール「NekoFolderDiff」
フォルダ比較ツール「NekoFolderDiff」 目次
●概要と注意事項●参考スクリーンショット
●基本操作
●基本操作(選択ファイルの日時情報を変更)
●他のソフトウェアとの連携について
●開発補記
概要と注意事項
■概要この『うさみみハリケーン』関連ツール(同梱NekoFolderDiff.exe)は、2つフォルダの内容を比較して、その差異を表示するソフトウェアです。
当ソフトウェアは、『うさみみハリケーン』同梱のテキスト比較・差分出力ツール「NekoTextDiff」と連携するために製作しました。NekoTextDiff同様、本来は『うさみみハリケーン』開発者用ソフトウェアなのですが、『うさみみハリケーン』のユーザーの方に役立つケースもあると考えて同梱しています。
基本機能として、指定した2つのフォルダを比較し、一致・不一致・変更・削除・追加のファイルを色分け表示でリストアップします。ファイルリストをテキストファイルに保存し、そのファイルリストを読み込んで、フォルダ情報なしで比較することもできます。また、ZIPファイルを指定して、一時的に展開したフォルダを使った内容比較にも対応しています。
更新、破損および改ざんされたファイルの確認や、ソフトウェア開発でのバックアップの確認、バージョン管理、データ同期などに活用できます。
当ソフトウェアでは、ファイルのSHA-256ハッシュ値という一意性がある値を使って比較を行うので、ファイルが1バイトだけ破損あるいは改ざんされていても違いを検出可能です。そのため、ファイルサイズや更新日時が同じままの破損したファイルや、ファイルサイズと更新日時が同じになるよう操作された改ざん済みのファイルでも見逃しません。また、バイナリデータつまりハッシュ値が同じファイルならば、ファイル名と更新日時が変更されていても見つけ出すことができます。
なお、比較用ハッシュをSHA-256にしたのは、情報セキュリティ分野での使用において、MD5やSHA-1などハッシュとしての安全性が損なわれたものは使えないと判断したためです。これは、MD5やSHA-1では、改ざんされ内容は異なるが、ハッシュ値はオリジナルと同じファイルを作成可能ということを意味します。
比較したファイル(群)の管理機能として、ファイル(群)を選択して、更新日時などの日時情報を変更する機能も実装しました。
NekoFolderDiffの動作環境は、.NET Framework 4.8がインストールされた環境です。Windows 10 バージョン1903以降ならば、.NET Framework 4.8がプレインストールされています。また、NekoFolderDiffでは、Windows 10 バージョン1809で導入された等幅フォント「BIZ UDゴシック」を使用するオプションがあります。他の『うさみみハリケーン』同梱ソフトウェアと同様にポータブルアプリケーションであり、USBメモリ内でのインストールと実行も可能です。使用にあたり追加のランタイムや他のソフトウェアは必要ありません。
■注意事項
当ソフトウェアのフォルダ比較処理は、全ファイルのSHA-256ハッシュ値を演算しさらに総当たりのハッシュ値比較を行うことから、フォルダ内のファイル数や、各ファイルのサイズによっては、処理に相当な時間を要することがあります。ファイルリスト出力に時間がかかる場合、「処理中」であることを表示しますが、進捗状況は表示しません。これは、進捗がファイル数と各ファイルサイズの両方に依存し、正確な進捗のパーセンテージの算出にも時間を要するためです。
当ソフトウェアは、新旧2つのフォルダにある同名ファイルのハッシュ値比較を基本動作としています。もし、比較元の旧フォルダに、ハッシュ値が同じで名前が異なるファイルが複数存在する場合は以下の挙動になります。
・最初にハッシュ値が合致した比較元ファイルとの比較結果を表示
・比較元と比較先でファイル名が異なるならば比較元ファイル名をハッシュ値に併記
なお、ファイルリスト上で特定項目の右クリックから「SHA-256をコピー(複数選択可)」と、ファイルリスト全選択(Ctrl+A)後に右クリックから「選択ファイルのSHA-256とクリップボード内テキストを比較」により、ハッシュ値が同じで名前が異なるファイルの一覧を取得可能です。
当ソフトウエアのファイルリスト表示部への、フォルダのドラッグアンドドロップによる比較フォルダ指定は、当ソフトウェアとドラッグ元に権限の一致が必要です。もし当ソフトウェアが管理者権限で起動されたならば、ドラッグ元にも管理者権限が必要となり、標準ユーザー権限のエクスプローラーからのドラッグアンドドロップは、Windowsにより拒否されます。これは、Windowsのセキュリティ関連機能である「ユーザーインターフェイス特権の分離(UIPI)」によるものです。
ファイルリスト表示部での右クリックから、ファイルリスト上の各種文字列をクリップボードにコピーできますが、ウイルス対策ソフトやクリップボード監視ソフトなど、他のアプリケーションが原因でエラーが発生することがあります。ただし、この場合でも文字列コピー処理はたいてい正常に完了しています。
新旧フォルダ間のファイルコピー・移動に対応していますが、コピー・移動処理時に、USBメモリ/SSD/HDD等のデバイスの不具合や接続状態によっては、対象ファイルが破損する可能性があります。ファイルの重要性に応じて、フォルダ再比較あるいは、「FastCopy」のようなベリファイ機能を持つ、ファイルのコピー・移動ツールを使用することをお勧めします。
ZIPファイルの内容比較時には、ZIPファイルの一時的な展開(フォルダ作成)を行います。展開処理はWindowsの機能で行いますが、ZIPファイルに悪意のある仕組みが施された場合に、適切に対処できるとは限りません。そのため、配布元等が信頼できないZIPファイルの内容比較は避けてください。対象ZIPファイルを使用するソフトウェアによっては、展開フォルダを再圧縮したZIPファイルは、改ざんされたとみなされ使用できない可能性があります。
基本操作
■用語説明当ソフトウェアの画面でファイルリストを表示する「リストビュー」は、画面の中に配置する部品(コントロール)の一つで、データを表のように一覧表示するためのものです。リスト上部にある「ファイル名」など表示内容を指す文字列部分は「カラム」と呼びます。フォルダパス入力欄の「コンボボックス」もコントロールの一つで、あらかじめ用意された選択肢リストの中から一つを選ぶためのものです。また、任意のテキストを入力することもできます。「チェックボックス」は、チェックすることで設定の有効と無効を切り替えるコントロールです。
■比較するフォルダの指定
比較する2つのフォルダが指定され、新旧フォルダ両方のファイルリストが作成されると、自動的に比較を開始します。
新旧2つのリストビューに、フォルダあるいはファイルをドロップすると、そのフォルダを指定してファイルリストを作成し比較を実行します。「フォルダ参照」ボタンあるいは、当ソフトウェア起動時のコマンドラインオプション(旧フォルダパス、新フォルダパス、抽出条件文字列の順)で、比較するフォルダを指定することも可能です。指定フォルダ以下にアクセス権がないフォルダがあると、エラーとなりファイルリスト作成処理を中断します。必要に応じて、「サブフォルダも比較」チェックボックスを無効化して、サブフォルダを比較対象から外します。
「ハッシュ生成対象上限(MB)」チェックボックスを有効にすると、ファイルサイズが右側で指定したサイズ(MB)以下のファイルだけ、SHA-256ハッシュ値を生成します。この設定により、巨大なファイルのハッシュ値生成を回避し処理の高速化が可能になりますが、比較をファイルサイズや更新日時だけで行うことになります。なお、ファイルサイズ(MB)入力欄には、必ず半角数字だけを入力してください。それ以外の文字が入力されているか未入力の場合、この設定は強制的に無効化されます。
「フォルダ参照」ボタン押し下げやフォルダのドロップにより指定された比較用フォルダは、フォルダパスを表示するコンボボックスに履歴として追加されます。コンボボックスのフォルダ参照履歴は、10件を上限に、終了時保存と起動時読み込みを行います。
Shiftキーを押しながら「フォルダ参照」ボタンで、ZIPファイルを指定してから、その一時的な展開フォルダを使って比較することもできます。展開フォルダは、『うさみみハリケーン』インストールフォルダ内に、「_TmpZip_(拡張子なしZIPファイル名)_(月日時分秒)」という名前で作成します。そのため、『うさみみハリケーン』を、空きが少ないUSBメモリ等から実行する場合は、一時的な展開が失敗する可能性が生じます。展開フォルダ(群)は、当ソフトウェア終了時に自動で削除します。ただし、ウイルス対策ソフトやシステムなど外部からこの展開フォルダが参照中ならば、削除に失敗することがあります。なお、パスワード付きZIPファイルの展開には対応していません。展開フォルダは一時的ものなので、参照フォルダの履歴には追加されません。
「抽出条件」チェックボックスが有効の場合は、フォルダ指定時に、「正規表現」という技法で指定された抽出条件に、ファイル名が合致するファイルのみリストアップします。この抽出条件文字列は、当ソフトウェア起動時のコマンドラインオプションの3番目で指定することもできます。コマンドラインオプションで抽出条件文字列が指定された場合は、自動的に「抽出条件」チェックボックスを有効にします。抽出条件文字列入力欄の右にある「Aa」チェックボックスは、抽出条件合致の判断時に、アルファベットの大文字小文字の違いを無視するオプションです。さらに右にある「+」ボタンで、入力された抽出条件文字列をコンボボックス内のリスト部分に追加します。コンボボックス内の抽出条件リストは、当ソフトウェアの設定として、10件を上限に終了時保存と起動時読み込みを行います。
▲<参考>ファイル名に対する正規表現の指定例
ファイル名に「Debug」「Test」「新」「旧」のいずれかを含むファイルを抽出:
Debug|Test|新|旧
ファイル名が「Debug」から始まるファイルを抽出:
^Debug
ファイル名が「2020から2029」で始まるファイルを抽出:
^202[0-9]
拡張子が「.exe」か「.dll」のファイルを抽出(2パターン、「\.」はドットを指す):
(\.exe$|\.dll$)
\.(exe|dll)$
拡張子が「.exe」でも「.dll」でもないファイルを抽出+コメント例:
^(?!.*\.exe$)(?!.*\.dll$)
^(?!.*\.exe$)(?# コメント)(?!.*\.dll$)
ファイル名に「Debug」を含まないファイルを抽出:
^(?!.*Debug)
抽出条件などファイルリスト作成に関する設定を変更した場合は、「リスト再作成」ボタンで、設定変更を反映したファイルリストを作成してください。
■ファイルリストの保存と読み込み
あらかじめ「リスト保存」ボタンで保存したファイルリストを、「リスト読み込み」ボタンで読み込むと、フォルダの情報なしで、ファイルリスト間での比較を実行します。ファイルリストの保存は、CSV(カンマ区切りテキスト)形式、TSV(タブ区切りテキスト)形式および、HTMLレポート形式で行うことができます。ファイルリスト保存時には、ファイルリスト上の並び替えや項目削除を反映した、見た目のままのリストを保存します。ただしカラム自体の横並び順の変更は、Windowsの仕様上反映されません。
一方、読み込み対象となるのは、「リスト保存」ボタンで保存したCSV形式あるいはTSV形式のファイルリストで、HTMLレポート形式には対応していません。ファイルリストを読み込んだ際に、異常な内容の項目との比較があれば、項目の文字色を赤色で表示します。
■ファイルリスト(リストビュー)の操作
比較時に、ハッシュが一致すれば「一致」、ハッシュは違うがサイズや更新時刻が同じならば「不一致」、サイズや更新時刻が異なるならば「変更」として扱います。ハッシュが「一致」かつ更新時刻が「変更」では、ファイルの内容を重視し「一致」扱いにしています。「一致」、「不一致」、「変更」に加え、旧フォルダでは「削除」、新フォルダでは「追加」されたファイルは、ファイルリスト上で色分け表示されます。
表示されるファイルリストは、デフォルトではエクスプローラーでのファイル名順と同じ並び方です。さらに、リストビュー上部の「ファイル名」、「サブパス」、「サイズ」および「更新日時」といったカラム部分をクリックすると、そのカラムの内容に応じてファイルリストを並び替えます。同じカラムを連続でクリックすると、そのカラムでの並び替えの昇順と降順を切り替えます。また、カラムを別のカラムにドラッグすることで、カラム自体の並び順を一時的に変更することができます。デフォルトの並び方は、サブフォルダを無視した純粋なファイル名順なため、必要に応じてカラム「サブパス」をクリックして、サブフォルダのパスを反映させた並び順に変更してください。
リストビューでの複数項目を選択する場合は、基本的にCtrlあるいはShiftキーを押しながら選択で行います(詳細は後述)。また、Ctrl+Aキーですべての項目を選択し、Escapeキーですべての選択を解除します。
新旧フォルダの片方のリストビューでファイル項目を選択し、スペースキーを押すと、もう片方のリストビューで同名のファイル項目が表示されるまで自動でスクロールします。
新旧フォルダのファイルリストが表示されているならば、リストビューのファイル項目をダブルクリックで、当該ファイルパスと比較対象フォルダ内の同名ファイルパスを、『うさみみハリケーン』同梱のテキスト比較ツール「NekoTextDiff」に渡して起動します。なお、テキスト比較ではない特殊なファイル比較に対応するため、Shiftキーを押しながらダブルクリックで、別の比較用ソフトウェアのEXEファイルを指定・登録できるようにしています。また、EXEファイル選択ダイアログでのキャンセルにより、登録されたEXEファイルの情報をクリアして、比較用ソフトウェアを「NekoTextDiff」に戻します。
リストビュー上で右クリックから、選択項目に応じた文字列コピー等、各種処理を行うことができます。右クリックで表示されるメニューから、正規表現を用いた条件合致ファイル名を選択、つまり検索のような使い方も可能です。
新フォルダでは、「一致項目削除」や「変更項目削除」ボタンで、ファイルリスト上から該当項目を削除できます。この操作でファイル実体は削除されません。
フォルダのファイルリストが表示されているならば、ファイルリスト上のファイル項目を、ファイル実体としてドラッグアンドドロップすることができます(複数可、ファイルリスト読み込み時はフォルダパス情報が無いので無効化)。これにより新旧フォルダのファイルリスト上での選択項目を、エクスプローラで開いている特定のフォルダにドロップしてコピーすることや、特定のアプリケーションのウィンドウやEXEファイルにドロップして渡すことが可能です。なお、これは個々のファイルのドラッグアンドドロップに相当するものであり、サブフォルダ以下にあるファイルでも、フォルダ構造を維持すなわちフォルダごとのドラッグアンドドロップにはなりません。
「新フォルダへコピー」や「新フォルダからコピー」ボタンで、新旧フォルダのファイルリスト上の選択ファイルを、フォルダ間で上書きコピーできます。Shiftキーを押しながらボタン押し下げで、コピーではなく移動することも可能です。
▲<参考>Windowsでのリストビューの基本操作
Ctrl + 左クリック:クリックされた項目を選択項目に追加します
Shift + 左クリック:選択項目とクリックされた項目間の全項目を選択項目に追加します
上下矢印キー:選択項目を上下に変更します
Shift + 上下矢印キー:上下の項目を選択項目に追加します
Homeキー:リストの最初の項目を選択します
Endキー:リストの最後の項目を選択します
Shift + Homeキー:リストの最初の項目までを選択項目に追加します
Shift + Endキー:リストの最後の項目までを選択項目に追加します
PageUp/PageDownキー:リストの表示中項目の最初または最後の項目を選択します
Shift + PageUp/PageDownキー:リストの表示中項目の最初または最後までの項目を選択項目に追加します
カラムの境界線(縦線)をダブルクリック:カラムの幅を自動調整します
フォーカスがある状態でアルファベットまたは数字キー押し下げ:項目の先頭文字がキーと同じ項目を選択し、同項目表示のために自動でスクロールします
■選択ファイルの日時情報を変更
ファイルリスト上で右クリックから「選択ファイルの日時情報を変更」で、この機能の専用画面を表示します。この機能では、メイン画面のファイルリスト上で選択したファイル(群)の、作成・更新・最終アクセスの日時情報を、色々なパターンで一括変更することができます。そのため、日時情報をベースとするファイルの管理に役立つとみられます。
基本操作は、日時情報の変更対象を、作成・更新・最終アクセスのチェックボックスで指定し、さらにそれぞれの日時情報や変更パターンを指定して、「日時情報を変更」ボタンです。
変更パターンは以下
・指定した日時情報で変更
・指定した日時情報で年月日だけ変更
・指定した日時情報で時分秒だけ変更
・対象ファイルの、元の作成日時や更新日時で変更
・指定した日時情報をファイル毎に1秒ずつ進めて変更(ファイルの日時情報を0時0分0秒に変更したら、次のファイルは0時0分1秒に変更)
・対象ファイルの、元の作成日時や更新日時を補正して変更
・JPEGファイルのExif情報の撮影日時で変更(撮影日時の情報がなければ何もしない)
指定した日時情報を、年/月/日/時間/分/秒/ミリ秒の単位で進める、あるいは戻すという、日時の補正にも対応しています。
海外の方と各種ファイルをやり取りする場合を想定し、指定日時と変更先日時のタイムゾーンを指定して、タイムゾーンの違いを修正可能にしています。例えば、世界各国のプログラマの方々と、ソースファイルをネット上で共同管理する場合に有用です。
また、変更用の日時情報の指定を補助するために、選択ファイル中で、一番新しい、あるいは一番古い、作成日時や更新日時を取得して、日時情報の指定欄に設定することにも対応しています。加えて、世界の主要なタイムゾーンでの現在時刻や、変更する日時の整合性検証に用いる「PCを起動した日時」も取得できます。他にも、当機能の画面へのファイルのドラッグアンドドロップで、そのファイルの日時情報を取得することができます。この際、メイン画面のファイルリストから、ファイル項目をドラッグアンドドロップするという使い方もあります。なお、ファイルのドロップについては、上記の注意事項で述べた、権限不一致による制約があることに注意してください。
上記日時取得にあたり、「取得した日時情報のミリ秒以下を切り捨て」チェックボックスで、日時情報の秒より小さい単位を切り捨ててゼロにすることも可能です。これにより、厳密な日時情報の比較で意図しない結果が生じることを回避できます。なお、当機能の画面表示時に、日時情報の指定欄に設定する現在日時情報は、この切り捨てを行っています。
この機能が対象とするのは、当機能の画面が表示された時点での選択ファイルです。当機能の画面を表示したまま、メイン画面での操作も可能ですが、メイン画面のファイルリスト上での選択を変更しても、日時情報の変更対象には反映されません。
この機能は、変更した日時情報を元に戻すことはできません。意図しない日時情報の変更が生じないよう注意してください。必要に応じて、メイン画面で更新日時入りのファイルリストを保存しておいてください。
ファイルの日時情報は、デジタル・フォレンジックにおいて、ファイル操作の時系列把握や、不正行為や事故の発生タイミング特定などに用いられます。企業や組織で管理するファイルの日時情報は、状況によっては変更すると「意図的な改ざん」になりうる点に注意してください。当機能は、不正行為の隠蔽を目的とするものではありません。
■設定保存
当ソフトウェアの各種設定は、当ソフトウェア終了時にXMLファイル「NekoFolderDiff.xml」に保存され、次回起動時に反映されます。保存先は実行ファイル「NekoFolderDiff.exe」があるフォルダです。この設定ファイルでは、比較したフォルダのパス履歴、ファイルリスト上での文字色および一致・不一致・変更・削除・追加のファイル名の背景色や、フォントサイズ、Windows 10 バージョン1809で導入された等幅フォント「BIZ UDゴシック」の使用・非使用などの設定を保存しています。このXMLファイル(文字コードUTF-8のテキストファイル)を、当ソフトウェア起動前にテキストエディタで編集することで、これらの設定を変更可能です。
設定のうち、ファイルリストで用いる色情報は「#FF4422AA」という形式で、色情報の構成要素を16進数の値で指定します。この例では、不透明度0xFF、赤0x44、緑0x22、青0xAAの構成からなる色を意味します。ネット上に多くみつかる「WEB色見本」サイトで、赤緑青の数値指定と実際の色を確認することができます。「#FF」の部分は変更不要です。
■その他の操作
画面右上「最前面」チェックボックスにより、当ソフトウェアの画面の最前面表示と通常表示を切り替え可能です。
他のソフトウェアとの連携について
当ソフトウェアはもともとNekoTextDiffとの連携を目的として製作しましたが、リストビュー上で右クリックから、選択ファイルに対して、他の『うさみみハリケーン』同梱ソフトとの連携処理を行うこともできます。当ソフトウェアの使用にあたり、『うさみみハリケーン』同梱の簡易エクスプローラー「Portable Explorer」の併用をお勧めします。Portable ExplorerはWindows付属のエクスプローラーの複製に、画像、動画、各種ドキュメント、その他バイナリファイルの内容を簡易的に確認する機能や、選択されたファイルのメタデータである「拡張プロパティ」を取得する機能などを実装しており、当ソフトウェアとの親和性が高いと言えます。
当ソフトウェアには、指定フォルダ内で、特定の文字列やバイナリデータを含むファイルを検索する機能はありません。このような検索は、『うさみみハリケーン』同梱の汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」の「YARAルールでスキャン」機能が対応していますので、必要に応じて併用してください。

