Yueser

テキスト比較

設定、文言、コード——まずはどの行が変わったのかを確認。

アルゴリズム

最長共通部分列(LCS)で行ごとに比較するため、行番号で単純に揃えるのではなく「最小の変更」を見つけます。数千行のテキストでも高速です。

使う場面

  • 設定ファイルや文案の 2 版が数行だけ違うときに、どの行が変わったのか、段落を誤って消していないかを正確に見たいとき。
  • 引き継いだファイルで、相手がこの版で何を足したのかを、大文字小文字や行末空白だけの変更を無視してざっと確認したいとき。

使わないほうがよい場面

  • 単語レベルの変更だけを見たいとき。行単位の比較なので、1 語の修正でも「1 行削除 + 1 行追加」として表示されます。
  • 両方とも数万行あるファイル(圧縮された JS、DB のダンプ)。LCS の表は行数 × 行数で大きくなるためタブが固まります。git diff --no-index や diff のほうが安全です。
制限とプライバシー

比較はブラウザ内で完結し、2 つのテキストは送信されません。制限:行単位の比較のみで文字単位の差分はなし。空白の無視は行末だけで、行頭のインデントは差分になります。LCS は n×m の表を使うため数万行でメモリを圧迫しタブが固まります。構文や文字コードの検査はせず、CRLF も LF と同じ改行として扱います。

よくある質問

どれくらいの量まで比較できますか?

左の行数 × 右の行数の表を作ります。実測では各 1,000 行が約 100 万セルで数十ミリ秒、各 8,000 行が約 6,400 万セルで 0.5〜1 秒・数百 MB、各 16,000 行が約 2 億 5,600 万セルで 1 GB のヒープではメモリ不足になりました。ブラウザのタブはそれより早く重くなるため、片側数千行までに収めるのが安全です。

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

LCS は行全体を単位に照合し、完全に一致する行だけを未変更とみなします。1 語でも違えばその行は共通部分列から外れ、削除側と追加側の両方に現れます。文字単位の差分は取らないため、語の変更を見たいときは行内ハイライト付きのツールを使ってください。

「前後の空白を無視」は何を無視しますか?

各行の末尾の空白(スペース、タブ、Windows の )だけです。行頭のインデントは比較対象なので、4 スペースを 2 スペースに変えると変更として扱われます。大文字小文字を無視する場合は両側を小文字にしてから照合し、表示される行も小文字になりますが、行番号はそれぞれの元ファイルのままです。