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

2つのテキストを貼り付けて、どの行が追加、削除、または変更されていないかを正確に確認できます — ブラウザ内でのクリーンな行単位の差分表示。

1,144回閲覧

比較の仕組み

このツールは両方のテキストを行に分割し、Gitやコードエディタが「差分」表示に使用しているのと同じ基本ロジックである最長共通部分列(LCS)アルゴリズムを実行します。行を位置で比較する(1行目と1行目、2行目と2行目)のではなく、LCSは両方の文書に同じ順序で現れる最長の行の並びを見つけます。この共通の並びに含まれるものはすべて変更なしとしてマークされ、元のテキストに残ったものは削除、修正後のテキストに残ったものは追加としてマークされます。

この違いが重要なのは、単純な位置ベースの比較は、文書の先頭付近で1行が挿入または削除された瞬間に破綻してしまうからです — 実際に変わったのはその1行だけなのに、それ以降のすべての行が異なって見えてしまいます。具体例:元のテキストが「A / B / C / D」で、修正後のテキストが「A / X / B / C / D」の場合、単純な行単位の比較ではB、C、Dがすべて変更されたと判定されます(それぞれ1つ下の位置にずれているため)。一方LCSは、A、B、C、Dが両方のテキストで依然として同じ相対順序で現れていることを認識し、新しい行Xという1つの追加のみを正しく報告し、残りは変更なしとしてマークします。

知っておくべきこと

  • 単語単位ではなく行単位: 比較は行全体を対象に行われます。長い行の中の1つの単語を変更しただけでも、その行全体が1つの削除行+1つの追加行としてマークされます — これはコードや文書の差分表示における標準的な慣習で、結果を見やすく保つためのものです。
  • 空白と大文字・小文字は区別されます: 末尾の空白や文字の大文字・小文字の違いだけで、本来同じである2つの行が異なるものとして記録されます — それが望む比較でない場合は、事前にテキストを正規化しておく価値があります。
  • 並べ替えられた内容も正しく照合されます: LCSは正確な位置ではなく最長共通の並びを探すため、別の場所に移動しても内部の行順序が保たれている段落は、削除してから追加したペアではなく変更なしとして認識されます。
  • 大きな文書でも問題なく処理できます: このアルゴリズムは数千行を問題なく処理します。非常に大きなファイル(数万行)では、ブラウザが整列の計算にもう少し時間がかかることがありますが、何もアップロードされることはなく、計算は常にローカルで行われます。

同じ技術は、プログラミング以外の「変更履歴」スタイルのレビューの基盤にもなっています。契約条項の2つの草案を比較する法務チーム、共著者が章のどこを書き直したかを正確に確認する編集者、あるいは文書の2つのローカライズ版の間でどの文が変わったかを確認する翻訳者などです。このアルゴリズムは行の意味ではなく並び順だけを気にするため、ソースコード、設定ファイル、詩、あるいはプレーンテキストとして書き出されたスプレッドシートに対しても同じようにうまく機能します。

よくある質問

単語単位で比較しますか、それとも行単位ですか?

行単位です — 文書やコードにおける標準的な方式で、ほとんどのエディタやバージョン管理ツールがすでにファイルをそのように捉えているためです。そのため、変更された行は単語レベルの入り組んだハイライトではなく、1つの削除行と1つの追加行として表示され、長い文書でも結果を見やすく保ちます。

サイズの制限はありますか?

このアルゴリズムは数千行を問題なく処理でき、契約書、記事、ソースファイルの大多数をカバーします。非常に大きなファイル(数万行)の場合、ブラウザが整列の計算にもう少し時間がかかることがありますが、いずれの場合も処理は完全にお使いの端末内で行われるため、アップロードを待つ必要はありません。

私の文書はアップロードされますか?

いいえ。両方のテキストはJavaScriptを使用してブラウザ内でローカルに比較され、ページを閉じるか更新した瞬間に入力内容と結果の両方が消えます — 何も保存または送信されません。

移動または並べ替えられた行はどのように扱われますか?

LCSアルゴリズムは位置に関係なく両方のテキストに共通する最長の並びを照合するため、移動していても内部の行順序が保たれている段落は、誤った削除・追加のペアではなく変更なしとして表示されます。内容または相対的な位置が実際に異なる行だけがマークされます。

なぜ1つの単語を変更しただけで2行が変更されたと表示されるのですか?

差分は個々の単語ではなく行全体を比較します。行内の1つの単語を編集すると、その行全体が1つの削除行(古いバージョン)と1つの追加行(新しいバージョン)としてカウントされます — これはGitやコードレビューツールで見られるのと同じ動作で、行内の編集がどれほど小さくても視覚的な結果を一貫させます。

コメント

まだコメントはありません — 最初のコメントを書いてみましょう!

関連ツール