テキスト差分

二つの文章を行ごとに比べます。まず最長共通部分列を求め、そこから外れたものを足された行・消された行として印を付けます。設定ファイルがいつどう変わったのかを調べるのに向きます。

+2 −1 変わらず 2

11name: Ada Lovelace
2−age: 30
2+age: 31
33city: London
4+phone: 020-0000-0000

行ごとに比べています。

どう比べているか

二つの文章を行に分けたあと、先頭から同じ行と末尾から同じ行を先に取り除きます。残った真ん中の区間でだけ最長共通部分列を求めるので、長いファイルの一か所だけを直した場合はほぼすぐに出ます。逆に最初から最後まで違う二つの文章は、行数の積の大きさの表を作らなければならず、数千行になると遅くなります。同じ行が両側の別の位置にあっても移動とは見なさず、片方で消され、もう片方で足されたものとして二度出ます。

空白を無視すると実際に何が起きるか

入れると、行の前後の空白を落とし、行の中の続いた空白・タブを一つにまとめてから比べます。使うのは比較だけで、表には元の文章がそのまま出ます。字下げだけ変わった行や、タブを空白に置き換えた行は、これで同じになります。行末の CR も空白なので、Windows から来たファイルと Mac から来たファイルもこれで揃います。ただし空白を消し去るわけではないので、a b と ab は依然として別物です。

表の読み方

左の二列が元の文章と変更後の文章の行番号です。消された行は元の番号だけ、足された行は変更後の番号だけを持ちます。上の数字は足された行・消された行・同じ行の数です。一行を直すと消去一つと追加一つに数えられるので、「直した行数」ではなくその倍に見えます。入力のたびに比べ直すので、押すものはありません。

よくある質問

文字単位で比べられますか

行単位です。行の中で数文字変えると、その行全体が変わったものとして印が付きます。字下げや空白だけの違いが邪魔なら、空白を無視する設定を入れてください。

一文字変えただけで行全体に印が付きます

比較は行ごとです。行が違うことは分かりますが、その中の何が変わったかは示しません。一行が長いファイル — 圧縮されたJSONなど — が丸ごと違って見えるのはそのためで、先に整形すれば違いが見えるようになります。

同じに見えるのに全部が変わったと出ます

たいていは改行の違いです。Windowsで書いたファイルは行末が CRLF、macOSとLinuxは LF で、見た目は同じでも別物です。字下げのタブと空白の違いでも同じことが起きます。

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

空白は「空白を無視」を有効にすればできます — 行の前後を切り、続く空白を一つに畳んで比べます。大文字小文字は無視できません。既定がそのままの文字なのは、設定ファイルやコードでは空白一つで意味が変わることがあり、黙って見過ごす道具は見るべきだった違いを隠してしまうからです。

ファイルを二つ上げて比べられますか

ファイルを開く欄はありません。エディタで開いて貼り付けてください。大きなファイルは丸ごと入れるより、変わったあたりだけを入れたほうが速いです — 両側が違うほど、計算量は行数の積で増えます。

JSON を二つ比べるには

先に両方を同じ規則で整形してください。一行に潰された JSON は一行が丸ごと違って見え、キーの順序が違えば同じ内容でも違って出ます。この道具は文字だけを見て、意味は読みません。

貼り付けたものはサーバへ送られますか

送られません。すべてブラウザの中で動き、送信も保存もしません。だからこそ、ふつうならウェブページに貼り付けない社内の設定ファイルや本番のクエリにも使えます。通信を切ったままでも動きます。