テキスト比較・差分出力ツール「NekoTextDiff」
概要と注意事項
■概要この『うさみみハリケーン』関連ツール(同梱NekoTextDiff.exe)は、2つのテキストファイルの内容を比較して、その差分を出力するソフトウェアです。比較対象のテキストデータは、クリップボードから取得することも可能です。
当ソフトウェアはもともと、英文のようなソースコードの時系列比較を目的として、『うさみみハリケーン』関係者用に製作したものです。しかしながら、一般的な用途で役立つ機会もあると考え、『うさみみハリケーン』のユーザーに役立てるべく同梱しています。なお、仕様上は、英語や日本語だけではない、世界各国の言語での文章比較に対応しています。
デフォルトの差分表示モードとは独立した、差分をテキストとして出力するモードも実装しました。このモードでは、文章中の変更箇所を含む行、あるいは変更文字列だけを抽出して出力することもできます。
「NekoTextDiff」の動作環境は、.NET Framework 4.8がインストールされた環境です。Windows 10 バージョン1903以降ならば、.NET Framework 4.8がプレインストールされています。また、「NekoTextDiff」では、Windows 10 バージョン1809で導入された等幅フォント「BIZ UDゴシック」を使用しているため、それより前のWindowsでは文字の表示が崩れます。他の同梱ソフトウェアと同様にポータブルアプリケーションであり、USBメモリ内でのインストールと実行も可能です。使用にあたり追加のランタイムや他のソフトウェアは必要ありません。
当ソフトウェアでは、視覚ストレスを低減するために、差分表示に彩度の低い色を使っています。
■ライセンス情報
当ソフトウェアは、テキスト形式の差分を生成するC#ライブラリ「DiffPlex」を使用しています。
<ライブラリのライセンス情報>
ライブラリ名: DiffPlex
著作権者: Matt Manela (mmanela)
ライセンス: Apache-2.0 license
ライブラリの変更時期および変更内容: 2025年12月、一部表示文字列の日本語化と差分解析単位の変更および高DPI対応
<参考リンク>
DiffPlexのソースコード
当ソフトウェアは、テキスト形式の差分を生成するライブラリ「Diff Match Patch」を使用しています。
<ライブラリのライセンス情報>
ライブラリ名: Diff Match Patch
著作権者: Google
ライセンス: Apache-2.0 license
ライブラリの変更時期および変更内容: 2025年12月、.NET Frameworkが対応していない機能を無効化
<参考リンク>
Diff Match Patchのソースコード
■注意事項
指定したテキストファイルの、文字コードの判別は自動で行います。BOMすなわち文字コード判別に使用可能な特定のバイト列がファイル先頭にあれば、先頭数バイトをチェックするだけで確実に判別できます。一方、BOMがないテキストファイルは、UTF-8やShift_JISなどの判別のために、ファイル全体を読み込んで統計的処理を行うため、処理に相応の時間がかかります。これにより、当ソフトウェアで比較するテキストファイルは、文字コードがBOM付きのUnicode(UTF-16)やUTF-8であることが望ましいといえます。
デフォルトでは「DiffPlex」を使って、文章中の「文字」を単位として比較を行います。DiffPlexは、英文のように単語が半角スペースで区切られた文章に適している、文章中の「単語」を単位として比較を行うこともできます。しかしDiffPlexには、この比較の単位を動的に切り替える仕組みが実装されていないため、当ソフトウェアを起動時に、Shiftキーを押しながら起動すると、文章中の単語を単位として比較を行うようにしています。
「Diff Match Patch」はテキストの比較時に文字単位と単語単位の両方で比較を行い、かつその結果をテキストとして出力するために使用します。これは後述する、「差分テキスト出力モード」の「変更前後の文字を併記」オプションを指します。
文字コードの種類や日本語文字列といった複数の条件が重なると、文章の最後の1行を認識できなくなることがあります。これは、当ソフトウェアが使用している差分解析ライブラリの仕様です。この問題には、文章の最後に改行を追加することで対処可能です。また、当ソフトウェアの、比較前にテキストを整形する機能に、改行を追加するオプションを用意しています。
比較処理の安全性を考慮し、比較するファイルのファイルサイズは、上限を512MBに設定しています。ただし実行環境の状況によっては、このサイズよりもはるかに小さいテキストの比較で、異常動作を招く可能性があります。また、大きなサイズのテキストファイルの比較処理には、多大な時間を要することになります。
某ウイルス対策ソフトが実行されている環境では、差分表示画面上で右クリックを行うと強制終了します。同環境では、.NET Frameworkをベースとする他のソフトウェアでも、右クリック時に異常動作といった、同様の問題が生じることがあります。この某ウイルス対策ソフトが原因で生じる問題は、長年放置されており将来的な対応は見込めません。
参考スクリーンショット
・差分表示モードの2画面(デフォルト)
・差分表示モードの1画面

・差分表示モードで変更箇所のみ文字表示

・差分表示モードで変更箇所の文字を強調

・差分テキスト出力モード

・差分テキスト出力モードで変更行のみ出力

・差分テキスト出力モードで変更前後の文字を併記

・差分テキスト出力モードで変更前後の文字を併記:差分をHTML形式で保存(削除追加分強調)

基本操作
●テキストの指定比較するテキストファイルを指定します。この指定は、コマンドラインオプション、「参照」ボタンでファイルパスを指定および、ファイルパス入力欄にテキストファイルをドラッグアンドドロップの、3つの方法で行うことができます。
比較対象にクリップボード内のテキストを指定する場合は、任意のタイミングで「クリップボード使用」チェックボックスをチェックします。これにより、チェック時点でのクリップボード内のテキストを取り込みます。
●テキストの整形・入れ替え指定
テキスト整形オプションは、取得したテキストを内部で整形してから比較するためのものです。元のテキストファイルやクリップボード内テキストは変更しません。このオプションの変更後の反映には、比較の実行が必要です。「コメント・空行削除」は、C++やC#言語での一般的なコメントを、正規表現を使って削除します。この場合、コメントと判断する「//」や「/**/」が、文字列変数内で使用されている場合も削除するので注意してください。ただし、URL用の「https://」や「http://」は削除を回避するようにしています。「Unicode正規化」では、全角半角の統一や、数字を丸で囲んだものを数字に変換などを行います。なお、Unicode正規化の前に、テキスト比較で問題となる、全角チルダ「~」と見た目が同じ「WAVE DASH」を、全角チルダに変換します。Unicode正規化では、意図しない変換が行われる可能性に注意してください。「改行追加」は、当ソフトウェアが使用するライブラリの仕様として、複数の条件により最後の行を認識できなくなるケースに対処するためのものです。
この整形オプションを適用したテキストを保存したいならば、新旧テキストに同じものを指定して、整形オプションを指定後、後述「差分テキスト出力モード」の「変更前後の文字を併記」で比較を実行し、差分の無いテキストを出力してください。この出力したテキストを「テキスト保存」ボタンで保存します。
「新旧入れ替えて比較」では、旧テキストと新テキストの内容を入れ替えて比較します。このオプションの変更後の反映には、比較の実行が必要です。
●モードの指定
必要に応じて、表示設定を変更します。デフォルトの「差分表示モード」では、左右2画面で新旧テキストの差分を表示します。「差分表示モード」の「表示を1画面化」チェックボックスを有効にすると、デフォルトで2画面表示の差分表示を、1画面の行ベース差分表示で行います。「変更箇所のみ文字表示」は、変更のない文字を背景と同色にして見えなくします。「変更箇所の文字を強調」は変更箇所の文字を強調色で表示します。
「差分テキスト出力モード」ラジオボタンで切り替えることができる「差分テキスト出力モード」は、デフォルトの差分表示モードとは表示先や内部処理が異なる、差分をテキストとして出力するモードです。すでにデフォルトの差分表示モードで差分を表示していても、「比較実行・差分表示」ボタンを押して、このモードで新たに差分を出力してください。「変更行のみ出力」は、文章中の変更箇所を含む行だけを抽出して出力するオプションです。
また、「差分テキスト出力モード」の「変更前後の文字を併記」は、文章中の変更された文字を抽出して出力するオプションです。ただし、差分の視認性が低下しないよう、厳密な差異の出力ではなく、ある程度差異をまとめる仕組みになっています。この機能には、多種多様な日本語文章の比較を想定した、文字・行・意味・効率の優先順位を変更して差分解析を行う追加オプションや、差分解析結果をHTML形式でファイルに保存するオプションがあります。
●比較実行
「比較実行・差分表示」ボタンで、差分表示あるいは差分テキスト出力を行います。テキストの整形・入れ替え指定の変更時や、「差分テキスト出力モード」のオプション変更時には、その変更を反映させるために、このボタンで差分を再出力する必要があります。
●相違行リストの操作
差分表示モード用の相違行リストは、比較実行結果を基に、新テキストを基準として相違行をリストアップします。相違行のうち、「-」がつく行番号は、新テキストでは削除され存在しない行を意味し、直前の存在する行の行番号をあてています。このリスト内の行番号を選択すると、差分表示箇所をその行に変更します。また、リスト内の選択の上下移動は、リストボックスにフォーカスがあれば上下キー、あるいは、既定のショートカットキー「Alt+↓」「Alt+↑」か、「F3」「Shift+F3」キーで行うこともできます。ただし、差分表示領域がクリックされてフォーカスを持つと、これらのショートカットキーは無効化されます。
必要に応じて、「新旧入れ替えて比較」オプションを使って、旧テキストを基準に相違行をリストアップすることもできます。
●比較結果の操作
「差分表示モード」の2画面の区切り線を左右にドラッグすることで、2画面のサイズ(表示比率)を変更可能です。
「差分表示モード」では、画面上で右クリックから、カーソル直下の行の文字列をクリップボードにコピーできます。ただし、某ウイルス対策ソフトが実行中であれば、この操作で当ソフトウェアは強制終了させられます。
「テキスト保存」ボタンにより、「差分テキスト出力モード」でテキストボックスに出力された差分解析結果を、必要に応じて編集してから、テキストファイルに保存します。保存テキストの文字コードは、デフォルトではUTF-16ですが、ボタンの上にあるコンボボックスで、UTF-8など別の文字コードを指定することもできます。
●その他
「最前面に表示」チェックボックスで、当ソフトウェアの画面の最前面表示と通常表示を切り替えます。
他のソフトウェアとの連携について
当ソフトウェアの使用にあたり、『うさみみハリケーン』同梱の簡易エクスプローラー「Portable Explorer」の併用をお勧めします。「Portable Explorer」は、TXTファイル、HTMLファイル、XMLファイル、PDFファイルや、Microsoft Office関連のDOCX、PPTXおよびXLSXファイルといった各種ドキュメントファイルからの文字列抽出にも対応しています(Microsoft Office関連には追加プログラムの導入が必要)。加えて、画面の選択領域や各種画像ファイルから文字列を読み取るOCRにも対応しています(Windowsの機能の有効化が必要)。また、フォルダ比較機能も実装しており、同機能から使用可能なファイル比較ツールに、当ソフトウェアを指定することもできます。<参考>「Portable Explorer」のフォルダ比較機能(項目をダブルクリックで比較ツール起動・比較実行)

テキストファイルではないバイナリファイルの比較には、『うさみみハリケーン』同梱のバイナリファイル比較ツール「NekoBinDiff」(NekoBinDiff.exe)が活用可能です。
ほとんど同一な画像の比較には、『うさみみハリケーン』同梱の汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」(AoZoraSiroNeko.exe)に実装している、ステガノグラフィー解析機能(画像合成機能の相違箇所抽出オプション)が役立ちます。