Yueseryueser.com

← ガイド一覧

2 つのテキストを行単位で比較し、追加・削除を確認する

左に旧版、右に新版を貼り付けて実行すると、行単位で差分を検出し、追加を +、削除を - で示します。変更のない行はグレーで表示され、行番号はそれぞれの原文に対応します。照合には最長共通部分列(LCS)を使い、すべてブラウザ内で完結します。

ツールを開く:Text Diff

行単位の差分が必要になる場面

設定ファイルや文章、契約条項を直したあとに怖いのは、書き間違いよりも、意図せず 1 段落まるごと消してしまうことです。行単位の差分を見れば、どこを触ったのかが一覧になります。

他人のファイルを引き継いだとき、翻訳で段落が抜けていないか確認するとき、書き出した 2 つの設定の違いを確かめるときも同じです。長い文書 2 つを目で追う方法では、行の抜けを見落とします。

照合の仕様と 2 つのオプション

比較は行単位で、最長共通部分列を使って「変更が最小になる」組み合わせを探します。行番号で機械的に揃える方式ではありません。ただし行単位であるため、1 行の中の 1 語だけを変えても、その行は共通部分に含まれず、削除側と追加側の両方に現れます。行全体が赤と緑で示されるのはこのためです。

「前後の空白を無視」は各行の先頭と末尾の空白を除いてから比較します。「大文字小文字を無視」は両側を小文字にしてから照合し、表示も小文字になりますが、行番号はそれぞれの原文のままです。Windows の CRLF と Unix の LF は同じ改行として扱うため、改行コードの違いで全体が差分になることはありません。

代替手段と規模の限界

片側数百〜数千行ならブラウザでも快適です。それを超えると注意が必要です。LCS は「左の行数 × 右の行数」の表を作るため、両側が 2 倍になると時間もメモリもおよそ 4 倍になります。数万行ではタブが応答しなくなることがあります。

その規模ではコマンドラインに移ってください。任意の 2 ファイルは git diff --no-index、標準的なパッチ形式は diff -u、並列表示は diff -y です。語単位の強調には、行内差分に対応したエディタか git diff --word-diff を使います。

よくある質問

1 語だけ変えたのに、行全体が削除+追加になるのはなぜですか?

照合が行単位で、完全に一致する行だけを「変更なし」とみなすためです。1 語でも違えばその行は共通部分列に含まれず、削除側と追加側の両方に現れます。このツールは文字単位の差分を行いません。語単位で見たい場合は、行内差分に対応したエディタや git diff --word-diff を使ってください。

どのくらいの量まで処理できますか?

両側の行数の積によります。LCS は左の行数 × 右の行数の表を作るため、各 1,000 行なら百万セル程度で通常は高速です。各 10,000 行なら 1 億セルを超え、メモリを圧迫してタブが固まることがあります。両側とも数千行以内に収め、それ以上はコマンドラインツールを使ってください。

空白を無視したのに差分が残るのはなぜですか?

このオプションが影響するのは各行の先頭と末尾の空白だけです。比較前に取り除くため、純粋なインデント変更や行末スペースの違いは差分になりません。それでも差分が残る場合は、行の中身が変わっているか、行自体が追加・削除されています。書式の揺れを完全に除きたいときは、先に両方を同じフォーマッタに通してください。

関連ツール:Text Diff