表示言語: 日本語 英語に切り替え

Diff チェッカー

2 つのテキストを貼り付けて、違いをハイライト表示します。

Diff

 
  1. 元のテキストをテキスト A に貼り付けます。
  2. 変更されたバージョンをテキスト B に貼り付けます。
  3. コード/設定なら行、散文なら単語を選びます。
  4. 見えない変更がノイズを加えるなら、空白を無視または大文字小文字を無視を切り替えます。
  5. 下のハイライト表示された出力を読みます — 緑は追加、赤は削除です。
何ができるのか?

Diff チェッカーは 2 つのテキストを比較し、何が追加、削除、または変更されなかったかを正確に示します。行モードは各行を 1 つの単位として扱います — 通常一度に行全体が変わるソースコードや設定に最適。単語モードは空白で分割し、トークンレベルの編集を気にする散文に適しています。

テキスト A:

function greet(name) {
  console.log("Hello, " + name);
}

テキスト B:

function greet(name) {
  if (!name) name = "world";
  console.log(`Hello, ${name}!`);
}

行モードでの Diff:

  function greet(name) {
+   if (!name) name = "world";
-   console.log("Hello, " + name);
+   console.log(`Hello, ${name}!`);
  }

よくあるエラーと落とし穴

2 行が同一に見えるのに diff がそれらを変更済みとマークする場合、原因はほぼ常に見えない文字または大文字小文字の違いです。ここに通常の容疑者を挙げます。

  • CRLF vs LF 行末。 Windows ファイルは行を \r\n で、Unix ファイルは \n で終えます。1 文字の違いでも各行がフラグされます。空白を無視を有効にして修正するか、dos2unix / エディタ設定で正規化してください。
  • 末尾の空白。 空白を無視しない限り "foo " と "foo" は diff されます。末尾の空白を除去する設定ファイルの保存は、触れた各行を変更済みに見せます。
  • タブ vs 空白。 タブを空白 (またはその逆) に入れ替える再フォーマットは、厳密一致モードでインデントされた各行を異なって見せます。空白を無視を切り替えるか、先に両側を同一に再フォーマットしてください。
  • バイトオーダーマーク (BOM)。 BOM 付き UTF-8 として保存されたファイルは見えない  で始まります。その最初の「行」は BOM なしファイルと diff されるとき常に変更済みに見えます。貼り付ける前にエディタまたはヘックスエディタで BOM を剥がしてください。
  • スマートクォートまたはノーブレークスペース。 ワープロから貼り付けると " が " に、通常の空白がノーブレークスペースに置き換わることがあります。同一に見えますが異なるコードポイントです。diff する前にテキストをプレーン ASCII に正規化してください。
  • 大文字小文字のみの違い。 大文字小文字を無視をオンにしない限り、API と api は異なる文字列です。基礎のマッチングは元のテキストを表示し、比較のみが緩和されます。
よくある質問

行モードと単語モードの違いは何ですか?

行モードはテキストを 1 行ずつ比較します — 行のどの文字が変わっても、その行全体が A から削除され B に追加されたとマークされます。単語モードは空白で分割し、より粒度の細かい diff を示すので散文に適しています。ソースコードや設定ファイルには、行モードがほぼ常に望ましいです。

見た目が同じ行が変更済みと表示されるのはなぜ?

通常 3 つの見えない違いの 1 つです: 行末 (Windows の CRLF vs Unix の LF)、末尾の空白、ファイル先頭のバイトオーダーマーク (BOM)。「空白を無視」をオンにして最初の 2 つをスキップします。BOM には、ファイルをヘックスエディタで開くか、貼り付ける前に先頭バイトを剥がしてください。

文字単位で diff しますか?

いいえ。行モードは行ごとに、単語モードは空白区切りのトークンごとに diff します。文字レベルの diff はほとんどの実際のテキストでノイズの多い出力を生みます。短い文字列で文字レベルの比較が必要なら、単語モードに貼り付けてください — 空白がなければ各文字が事実上自分のトークンになります。

入力はどれくらい大きくできますか?

Diff はメモリで動作するので、実用的な上限はブラウザの RAM です。片側数 MB までは問題なく動作します。数十 MB はハイライト HTML のレンダリングが diff 自体より遅いためタブが一時的にフリーズすることがあります。非常に大きなファイルには、GNU diff または git diff でローカルに diff を実行してください。

大文字小文字や空白を無視できますか?

はい — どちらもツールバーのトグルです。「空白を無視」は空白の連続を等価として扱い、再フォーマットされたコードに便利です。「大文字小文字を無視」は "Hello" と "hello" を同じとして扱います。基礎のマッチングは元のテキストを表示し、比較のみが緩和されます。

2 つのボックスに貼り付けたテキストを保存しますか?

いいえ。ここに貼り付けたものは何も保持しません — 「前」テキストも「後」テキストも。比較したものはページを閉じるか更新するとすぐに破棄されます。ログなし、コンテンツに対する分析もなし。追加の安心が欲しければ、ブラウザの developer tools が何が起こっているかを見せてくれます。