大容量ファイル比較
2 つの大きなローカルファイルを行単位またはバイト単位で比較します。空白・改行コード・文字コードのオプションと、ダウンロードできるレポート付き。
入力内容とファイルはブラウザ内に留まります
ファイル
元のファイル
任意のローカルファイル。この端末の外には出ません。
変更後のファイル
任意のローカルファイル。この端末の外には出ません。
両方のファイルは Web Worker 内で 1 MiB ずつ読み込まれます。各行はハッシュとしてのみ保持され、画面のテキストはファイルから読み直されます。アップロードや保存は一切行いません。
元のファイルと変更後のファイルを選択すると、変更された行やバイト範囲が表示されます。
レポート
1 ファイルあたり最大 10,000,000 行。メモリは 1 行あたり約 8 バイトで、照合中はさらに最大 9 バイト使います。行は空白と改行コードのルールを適用した後のハッシュで照合されます。表では 1 行を 2,000 文字で切り詰め、レポートには最大 16 MiB の行をそのまま書き出します。バイナリモードでは 100,000 範囲まで保持します。
このページの内容
大容量ファイル比較は、テキストボックスに収まらないほど大きな 2 つのローカルファイルを比較します。数ギガバイトのログ、CSV エクスポート、SQL ダンプ、ビルド成果物などに対応します。テキストファイルは行単位、バイナリファイルはバイト単位で比較し、結果は仮想化された変更一覧の表とダウンロードできるレポートで確認できます。
詳細な機能
両方のファイルは Web Worker 内で 1 MiB ずつ読み込まれます。テキストを保持する代わりに各行を 64 ビットのハッシュに変換するため、ファイル 1 つあたり 1 行約 8 バイトで済みます。空白と改行コードのオプションはハッシュ計算時に適用されます。完全一致で比較、行末の空白を無視、空白の量の違いを無視、すべての空白を無視から選べ、CRLF と LF を同じ改行として扱うこともできます。UTF-8 と UTF-16 は Unicode 文字としてハッシュされるため、両方の文字コードで保存した同じテキストは一致します。Windows-1251 や Shift_JIS などのレガシー文字コードはバイトで比較します。
行の照合では、まず共通の先頭と末尾を飛ばし、次に両方のファイルにちょうど 1 回だけ現れる行をアンカーにして(patience diff)、その間の隙間を Myers アルゴリズムで揃えます。時間がかかりすぎる隙間は 1 つの置換ブロックとして表示され、ページにその旨が示されます。画面に表示される行だけをファイルから読み直すので、数百万行の変更をスクロールしても軽快です。
バイナリモードではバイトをブロック単位で比較し、異なる範囲ごとにオフセット、長さ、両側の先頭 16 バイトを一覧表示します。サイズの違いは最後の範囲になります。テキストのレポートは unified diff(.diff)、バイナリのレポートは CSV で、どちらも選んだファイルへストリーミングで書き出されます。
実用例
2 つのログファイル: 200 万行のログと、40 行のレベルが INFO から WARN に変わったコピーを比較すると、削除 40 行と追加 40 行が別々のハンクに、それぞれ 3 行のコンテキスト付きで表示されます。
Windows 版と Unix 版のコピー: CRLF のファイルと LF のコピーは、改行コードのオプションがオンなら差分なしになります。オフにするとすべての行が異なります。
インデントの再整形: 「空白の量の違いを無視」を選ぶと、単語間のスペースやタブだけが違う行は同じとみなされます。
ファームウェアイメージ: バイナリモードでは、バージョン文字列とチェックサムだけが異なる 2 つのビルドで、新旧のバイトを hex で示す短い範囲が 2 つ表示されます。
このツールの使い方
ファイルを選ぶ
元のファイルと変更後のファイルをドロップするか選択します。両方を選ぶとすぐに比較が始まります。
オプションを設定する
「自動判定」「テキスト行」「バイナリバイト」のいずれか、文字コード、空白のルール、改行コードを区別するかを選びます。新しいオプションで再実行するには「比較」を押します。
変更を確認する
概要には削除・追加された行数とハンク数が表示されます。「前の変更」と「次の変更」でハンク間を移動し、「コンテキスト行数」を変えると前後に表示する未変更行を増減できます。
レポートをダウンロードする
テキストなら unified diff、バイナリファイルならバイト範囲の CSV をダウンロードします。
ヒントとベストプラクティス
- 「自動判定」は、いずれかのファイルの先頭 8 KiB に NUL バイトがあるとバイナリに切り替えます。ただし UTF-16 の BOM で始まる場合は除きます。
- 行はハッシュで比較されます。異なる 2 行が同じ 64 ビットハッシュになる可能性は極めて低く、表には常に実際のテキストが表示されます。
- 並べ替えられたテキストブロックは、diff -u と同様に削除と追加として表示されます。
- 「キャンセル」で Worker はすぐに停止し、ファイルは選択されたままです。
- 短い 2 つの断片をさっと見比べたいときは、テキスト差分ビューアーが行内の変更された単語をハイライトします。