使い方
- 「テキストA(変更前)」と「テキストB(変更後)」にそれぞれ比較したい文章を貼り付ける。
- 入力すると即座に行単位で差分が色分け表示される(赤=削除、緑=追加)。内容が一部だけ変わった行は、さらに文字単位で変更箇所が強調される。
- 必要に応じて「空白を無視」「大文字小文字を無視」を切り替えると、比較の判定だけが変わる(表示自体は元のテキストのまま)。
- 下部の unified diff 形式のテキストは「コピー」ボタンでそのままコピーでき、GitHubのPRコメントやチケットへの貼り付けに使える。
仕組み・根拠
行単位の差分には、Eugene W. Myersが1986年に発表した「An O(ND) Difference Algorithm」(Myers差分アルゴリズム)を実装して使っています。これはGit(git diff)や多くのdiffツールが採用しているのと同じ系統のアルゴリズムで、2つの系列間の最短編集距離(挿入・削除の最小回数)を求め、そこから差分を復元します。変更行の文字単位ハイライトも同じアルゴリズムを文字の配列に適用しています。出力する unified diff の書式(--- a / +++ b とハンクヘッダ @@ -旧開始,旧行数 +新開始,新行数 @@)は、GNU diffutilsのunified diff形式に準拠しています。
現場の落とし穴:このツールは比較の便宜上、テキスト末尾の改行1つ分を行数に数えません("a\nb\n" と "a\nb" は同じ2行として扱われます)。しかし実際のGitやdiffコマンドでは「ファイル末尾に改行があるかないか」を明確に区別し、\ No newline at end of file という注記を出します。この差はテキストエディタや言語によって自動で付いたり消えたりするため、CIでdiffが意図せず出る・出ないの原因になりがちです。厳密な改行の有無を確認したい場合は、専用のdiffコマンドと併用してください。また、編集距離が極端に大きい(内容がほぼ無関係な)巨大テキスト同士を比較すると、計算量の上限に達して共通の先頭・末尾だけを検出する簡易表示に自動的に切り替わります。
よくある質問
Q. 行の順番が入れ替わっただけなのに、全部「削除+追加」になります。
A. Myers差分アルゴリズムは連続した行の並びの一致を探すため、行の移動(並べ替え)は「移動」としてではなく「削除された行」と「追加された行」の組み合わせとして表現されます。これはgit diffの標準的な挙動と同じです。
Q. 「空白を無視」はタブとスペースの違いも無視しますか?
A. はい。行内のすべての空白文字(半角スペース・タブなど連続する空白)を比較前に取り除いてから判定するため、インデントの違いだけの行は「一致」として扱われます。
Q. 数万行のテキストでも使えますか?
A. 動作はしますが、差分の内容(編集距離)が大きいほど計算量が増えます。あまりに差が大きい場合は自動的に簡易表示に切り替わり、精度より応答速度を優先します。
関連ツール
最終更新・根拠の確認日: 2026-09-10 · カテゴリ: テキスト