テキスト差分チェッカー(Diff)

2 つのテキストやコードを行ごとに比較します。追加・削除・変更された行がハイライトされ、異なる単語まで正確にわかります。

ブラウザ内で動作登録不要アップロードなし

両方の欄にテキストを貼り付けると差分が表示されます。

テキスト差分チェッカーの使い方

  1. 左に元のテキスト、右に変更後のテキストを貼り付けるか、2 つのファイルを開きます。
  2. 比較結果は入力と同時に更新されます。左右比較か統合表示を選びます。
  3. 再インデントなどのノイズを隠すには、空白を無視、大文字小文字を無視、空行を無視にチェックを入れます。
  4. 変更なしを非表示を使うと、各変更の前後 3 行の文脈だけを残して変更に集中できます。
  5. パッチとしてコピーまたは.diff をダウンロードをクリックすると、git apply や patch で適用できる標準的な unified diff が得られます。

この差分チェッカーの仕組み

このツールは両方の入力を行に分割し、Myers の差分アルゴリズムを実行します。これは git diff や GNU diff と同じ O(ND) アルゴリズムです。元のテキストを変更後のテキストにする最短の挿入・削除の列を求めるため、変更行が最も少ない結果が得られます。先頭と末尾の同一の行は最初にスキップされるので、数千行のファイルの比較もほぼ一瞬です。

削除された行と追加された行が隣り合っている場合は、それらを変更行としてペアにし、単語単位で再度比較します。実際に変わった単語はより強くハイライトされるため、長い行の中の変数名の変更や数値の編集も目立ちます。

左右比較表示と統合表示

左右比較は左に元のテキスト、右に新しいバージョンを置き、両方に行番号を表示します。文章、設定ファイル、短いコード変更のレビューに最も見やすい表示です。統合表示は削除行(-)と追加行(+)を 1 列に交互に並べる形式で、コードレビューツールやパッチファイルで使われています。

unified diff(パッチ)形式

書き出されるパッチは diff -u 形式に従います。---/+++ のヘッダーの後に、@@ -l,s +l,s @@ で始まるハンクが続きます。l は最初の行番号、s は各ファイルでのハンクの行数です。各ハンクには変更のない文脈行が 3 行含まれるため、近くの行が移動していても patch -p0 や git apply で適用できます。

無視オプションの使いどころ

  • 空白を無視は、スペースやタブだけが異なる行を同じとみなします。コードのインデントを直した後や、タブをスペースに変えた後に使いましょう。
  • 大文字小文字を無視は、大文字小文字に意味のない SQL、HTML、ログファイルで便利です。
  • 空行を無視は、間隔調整のためだけに追加・削除された行を隠します。

よくある質問

テキストはどこかにアップロードされますか?
いいえ。比較はすべてブラウザ内の JavaScript で実行されます。貼り付けた内容はサーバーに送信されないので、非公開のコード、契約書、設定ファイルも安心して比較できます。
どのくらいの大きさのテキストまで比較できますか?
数万行のファイルでも、一般的なノート PC なら 1 秒もかからずに比較できます。アルゴリズムのコストは差分の数に応じて増えるため、巨大で完全に異なる 2 つのファイルが最も時間がかかります。
貼り付ける代わりに 2 つのファイルを比較できますか?
はい。各欄の上にあるファイルを開くボタンでローカルファイルを読み込めます。ファイルはブラウザで読み込まれ、アップロードされることはありません。
変更ではなく、削除と追加として表示される行があるのはなぜですか?
行が「変更」としてペアになるのは、削除行のブロックと追加行のブロックが直接隣り合っている場合だけです。2 つの行に共通するテキストがほとんどない場合は、行全体を変更として表示する方がわかりやすいため、単語単位のハイライトは省略されます。
JSON オブジェクトを比較するには?
JSON Diff ツールを使ってください。解析した構造を比較するので、キーの順序や書式による誤った差分が出ず、変更された正確なパスを一覧表示します。

関連ツール