テキスト差分比較ツール【無料・登録不要】2つの文章・ファイルの違いを色分け表示|diff・空白無視対応
2 つのテキストやファイルを貼り付けるだけで、違いを行単位で色分けして表示する無料の差分比較ツールです。会員登録は不要です。変更された行の中でどの文字が変わったかも強調するので、設定ファイルの見比べや、文章の修正箇所の確認がすぐにできます。
入力したテキストやファイルはお使いのブラウザの中だけで処理され、サーバーには一切送信されません。
変更前のファイルをドラッグ&ドロップ(5MB まで)
変更後のファイルをドラッグ&ドロップ(5MB まで)
- 削除された行(変更前だけ) + 追加された行(変更後だけ) 濃い色/濃い色:行の中で違う文字
unified diff 形式のテキストを表示(クリックで開く / もう一度クリックで閉じる)
入力したテキストやファイルは、お使いのブラウザ内だけで処理されます。サーバーへの送信や保存は一切行いません。
使い方
2 つのテキストを比べる
- 「変更前(左)」の欄に、元のテキストを貼り付けます。
- 「変更後(右)」の欄に、比べたいテキストを貼り付けます。
- 入力が止まると自動で比較され、下に結果が表示されます。「違いが 2 か所あります:追加 2 行・削除 2 行」のように、違いの数も表示されます。
結果の見方は次のとおりです。まず試したいときは「サンプルを入れる」を押すと、設定ファイルの例で表示を確かめられます。
- 赤い行(-):削除された行。変更前にだけある行です
- 緑の行(+):追加された行。変更後にだけある行です
- 行の中の濃い色の部分:書き換えられた行で、実際に違う文字です。たとえば「timeout: 30」が「timeout: 60」になった場合は、「3」と「6」だけが濃く表示されます
- 色のない行:両方に同じ内容がある行です
行の中の違いは、絵文字(👨👩👧 など)や濁点を組み合わせた文字のように、複数の文字コードでできた「見た目の 1 文字」を分けずに比べます。ただし、共通する部分がほとんどない行や、3,000 文字を超える長い行では、行全体を変更として表示します。
ファイルを比べる
- 左右それぞれの点線の枠に、ファイルをドラッグ&ドロップします。「ファイルを選択」から選んでもかまいません(1 ファイル 5MB まで)。
- 読み込んだファイルの名前・大きさ・文字コード・改行コードが表示され、比較の結果が出ます。
2 つのファイルをまとめて左側の枠にドロップすると、1 つ目が変更前、2 つ目が変更後に読み込まれます。文字コードは UTF-8・Shift_JIS・UTF-16 を自動で判定します(BOM 付きの UTF-8 にも対応)。比べられるのはテキストファイルだけで、Excel や Word のファイルは比べられません。
表示とオプション
| 項目 | 内容 |
|---|---|
| 表示:左右に並べる | 変更前を左、変更後を右に並べて、行番号付きで表示する。書き換えられた行は同じ高さに並ぶ |
| 表示:上下にまとめる(統合) | 1 つの列の中に、削除した行(-)と追加した行(+)を順に並べる。git diff と同じ見せ方で、スマートフォンでも読みやすい(画面の幅が狭いときは最初からこの表示になる) |
| 空白:行末の空白を無視 | 行の最後にあるスペースやタブの違いを無視する(git diff の –ignore-space-at-eol と同じ考え方) |
| 空白:空白の数の違いを無視 | スペース 1 個と 2 個のような、空白の数の違いと行末の空白を無視する。ただし「a b」と「ab」のように、空白があるかないかの違いは区別する(git diff の -b と同じ考え方) |
| 空白:すべての空白を無視 | 空白をすべて取り除いてから比べる。インデント(字下げ)だけを直したファイルの比較に便利(git diff の -w と同じ考え方) |
| 大文字・小文字を無視 | 「ABC」と「abc」を同じとみなす |
| 最後の行の改行の有無を無視 | ファイルの最後に改行があるかないかの違いを無視する |
| 変更のない行を省略 | 変更された行の前後 3 行だけを表示し、それ以外は「変更のない ○ 行を省略」とまとめる。長いファイルで違いだけを見たいときに使う |
このツールでは、半角スペース・タブに加えて全角スペースも空白として扱います(git diff は全角スペースを空白として扱いません)。また、空白を無視するオプションを選んだときは、最後の行の改行の有無も無視します。これは、git diff の -b・-w や、diff コマンド(GNU diffutils)の -b・-w・-Z と同じ結果になるように合わせたものです(このツールのテストで、両方のコマンドと結果の行数が一致することを確かめています)。
改行コード(CRLF / LF)の扱い
このツールは、改行コードの違い(Windows の CRLF と、Linux・Mac の LF)を無視して、行の内容だけを比べます。改行コードだけが違う 2 つのファイルは「違いはありません」と表示されます。ファイルを読み込んだときは、それぞれの改行コードを表示し、左右で違う場合はそのことも知らせます。改行コードの違いが問題になる場面(シェルスクリプトを Linux で動かすときなど)では、この表示で確認してください。
unified diff 形式でコピー・保存する
「unified diff 形式でコピー」を押すと、比較の結果を diff コマンドの -u オプションと同じ形のテキストでコピーできます。「unified diff 形式で保存」を押すと、text-diff.diff という名前のファイル(UTF-8・改行 LF)で保存されます。チャットやメールで「どこを変えたか」を伝えるときや、記録として残すときに使えます。中身は「unified diff 形式のテキストを表示」を開くと確認できます。
比べられる大きさの上限
比べられるのは、それぞれ 5 万行・約 500 万文字まで(ファイルは 5MB まで)です。差分の計算はブラウザの中で行うため、大きすぎるテキストを比べるとブラウザが長い時間固まってしまうおそれがあるからです。また、2 つのテキストがほとんど違う場合は計算量が大きく増えるため、2 秒たっても終わらないときは厳密な計算を打ち切り、そこから先を簡略化した方法で比べます。その場合も表示する違いは正しいものですが、最小の差分(もっとも少ない行数)にはならないことがあり、画面にそのことを表示します。画面に表示する行は 2 万行までで、それを超える部分は unified diff 形式で保存すると確認できます。
差分(diff)とは?
差分(さぶん)は、2 つのテキストの「違い」のことで、英語の difference を略して diff(ディフ)とも呼びます。プログラマーの間では、違いを調べることを「diff を取る」と言います。
差分は、ふつう行単位で、「どの行を削除し、どの行を追加すれば、変更前が変更後になるか」という形で表します。1 行の中の一部だけを書き換えた場合も、行単位では「古い行を削除して、新しい行を追加した」と表します。このツールが行の中の違う文字を濃い色で示しているのは、その「書き換え」の中身を見やすくするためです。
最小の差分と Myers のアルゴリズム
同じ 2 つのテキストでも、違いの表し方は何通りもあります。極端な例では「変更前をすべて削除して、変更後をすべて追加する」も正しい差分ですが、それでは何が変わったのかわかりません。そこで、削除と追加の行数がもっとも少ない差分(最小の差分)を求めるのが基本になります。これは「2 つのテキストに共通する行の並び(最長共通部分列)をできるだけ長く残す」ことと同じ意味です。
このツールは、最小の差分を効率よく求める Myers(マイヤーズ)のアルゴリズムを使っています。Eugene W. Myers が 1986 年に論文「An O(ND) Difference Algorithm and Its Variations」(学術誌 Algorithmica 第 1 巻)で発表した方法で、違いが少ないほど速く計算できるのが特徴です。git diff も、標準ではこのアルゴリズム(myers)を使います。
なお、最小の差分が 1 通りとは限りません。同じ行が何度も出てくるテキストでは、削除と追加の行数は同じでも、どの行を「変更あり」と表示するかが、ツールによって違うことがあります。どれも正しい差分です。
unified diff 形式の読み方
unified diff(ユニファイド・ディフ)は、差分をテキストで表すときにもっともよく使われる形式です。たとえば、次の 2 つの設定ファイルを比べたとします。
| old.txt(変更前) | new.txt(変更後) |
|---|---|
| host=localhost port=8080 user=admin log=debug timeout=30 | host=0.0.0.0 port=8080 user=admin log=debug timeout=60 |
このツールで比べて「unified diff 形式でコピー」を押すと、次のテキストになります(ファイルを読み込んで比べたので、ファイル名が入っています)。
--- old.txt
+++ new.txt
@@ -1,5 +1,5 @@
-host=localhost
+host=0.0.0.0
port=8080
user=admin
log=debug
-timeout=30
+timeout=60
- — と +++ の行:変更前(—)と変更後(+++)のファイル名
- @@ -1,5 +1,5 @@:ここから先の部分(ハンク)が、変更前の 1 行目から 5 行分、変更後の 1 行目から 5 行分にあたるという意味
- 先頭が – の行:削除された行、先頭が + の行:追加された行、先頭が空白の行:変わっていない行(変更箇所の前後 3 行まで、場所の目印として入る)
- \ No newline at end of file:この行のあとにファイル最後の改行がない、という印(片方にだけ最後の改行がないときなどに出る)
git diff の出力も同じ unified diff 形式ですが、先頭に「diff –git a/old.txt b/new.txt」と「index …」の 2 行が付き、ファイル名に a/ と b/ が付く点が違います。diff コマンドの -u オプションでは、ファイル名のあとに更新日時が付きます。このツールの出力は、日時を付けない形です(それ以外は、diff -u と同じになることをテストで確かめています)。
仕事での使いどころ
設定ファイルの比較
「検証環境では動くのに、本番環境では動かない」というときは、両方の設定ファイルを比べるのが近道です。インデントだけが違う行が多いときは「すべての空白を無視」を、行末の余分なスペースが気になるときは「行末の空白を無視」を選ぶと、本当に意味のある違いだけを見られます。パスワードなどを含む設定ファイルも、このツールならサーバーに送信されないので安心して比べられます(それでも、共有の PC では作業後に「クリア」を押してください)。
文章・資料の修正箇所の確認
仕様書や手順書、メールの文面などを修正したときに、どこを直したかを確認したり、レビューする人に伝えたりできます。日本語の文章でも、行の中の変わった文字が強調されるので、1 文字の修正も見落としにくくなります。
Git を使っている場合:git diff
Git で管理しているファイルなら、git diff で変更内容を確認するのが基本です。Git で管理していない 2 つのファイルも、–no-index を付ければ比べられます。
git diff --no-index old.txt new.txt
上の old.txt と new.txt で実行すると、前の節で紹介した unified diff 形式の結果(先頭に「diff –git a/old.txt b/new.txt」と「index …」の行が付いたもの)が表示されました。違いがあると終了コードは 1、違いがなければ 0 になるので、スクリプトの中で「ファイルが同じかどうか」の判定にも使えます。空白の違いを無視したいときは、-w や -b を付けます。
Windows のコマンドプロンプト:fc
Windows には、ファイルを比べる fc コマンドが最初から入っています。コマンドプロンプトで次のように実行します(PowerShell では fc が別のコマンドの別名になっているので、fc.exe と書きます)。
fc /n old.txt new.txt
実際に実行すると、次のように表示されました(/n は行番号を付けるオプション)。違う行だけでなく、違いのあとで最初に一致した行(ここでは port=8080 と log=debug)も一緒に表示されるのが fc の特徴です。
ファイル old.txt と NEW.TXT を比較しています
***** old.txt
1: host=localhost
2: port=8080
***** NEW.TXT
1: host=0.0.0.0
2: port=8080
*****
***** old.txt
4: log=debug
5: timeout=30
***** NEW.TXT
4: log=debug
5: timeout=60
*****
fc は /c で大文字・小文字を無視、/w で空白をまとめて比べることもできます。ただし、UTF-8 で保存した日本語のファイルを比べると、コマンドプロンプト(コードページ 932)では表示が文字化けしました。日本語のファイルは、このツールで比べるほうが確実です。
PowerShell:Compare-Object
PowerShell では、Get-Content で読み込んだ行を Compare-Object で比べられます。
Compare-Object (Get-Content old.txt) (Get-Content new.txt)
実行すると、次のように表示されました。「=>」は変更後(2 つ目)にだけある行、「<=」は変更前(1 つ目)にだけある行です。
InputObject SideIndicator
----------- -------------
host=0.0.0.0 =>
timeout=60 =>
host=localhost <=
timeout=30 <=
Compare-Object は「片方にしかない行」を探す命令で、行の順番や行番号は表示しません。行を入れ替えただけのファイルは「違いなし」になり、標準では大文字・小文字も区別しません(区別するには -CaseSensitive を付けます)。どの行がどう変わったかを順番どおりに見たいときは、git diff かこのツールを使ってください。
よく比べるならアプリも:WinMerge など
フォルダーごとの比較や、比べながら片方を編集したいときは、WinMerge(Windows 用の無料・オープンソースの比較ソフト)や、Visual Studio Code の比較機能のような専用のアプリが便利です。このツールは、インストールせずにすぐ使いたいとき、会社の PC にソフトを入れられないとき、スマートフォンで確認したいときに向いています。
よくある質問
入力したテキストやファイルは保存されませんか?
保存されません。比較はすべてお使いのブラウザの中で行われ、入力したテキストや読み込んだファイルがサーバーに送信されることはありません。ブラウザのストレージや Cookie にも保存しないので、ページを閉じると内容は消えます。比較結果の表示も、入力をそのまま文字として表示しているため、HTML やスクリプトが含まれていても実行されません。
見た目は同じなのに「違いがある」と表示されます
よくある原因は次の 3 つです。行の中の濃い色の部分を見ると、どこが違うかがわかります。
- 行末の空白やタブ:目に見えません。「空白」で「行末の空白を無視」を選ぶと消えます
- 全角と半角の違い:「A」と「A」、全角スペースと半角スペースなどは別の文字です
- 最後の行の改行:片方だけファイルの最後に改行がないと、最後の行が違うと表示され、「(最後の改行なし)」の印が付きます。「最後の行の改行の有無を無視」で消えます
git diff と表示が違うことがあるのはなぜですか?
削除と追加の行数は、git diff –minimal(最小の差分を求めるオプション)と同じになることを、多数のランダムなテキストで確かめています。ただし、最小の差分が何通りもある場合は、どの行を「変更あり」として表示するかが違うことがあります。また、git diff の標準の設定(–minimal なし)は、最小の差分になることを保証していません(git の説明書には、–minimal は「最小の差分を作るために余分に時間を使う」オプションだと書かれています)。どちらの表示も、差分としては正しい結果です。
Shift_JIS のファイルと UTF-8 のファイルを比べられますか?
比べられます。ファイルを読み込むときに文字コードを自動で判定して文字に直してから比べるので、文字コードが違っても、中身の文字が同じなら「違いはありません」になります。読み込んだファイルの文字コードは画面に表示されます。文字化けしたテキストを元に戻したいときは、下の「文字化け復元ツール」を使ってください。
行の中の違う文字が強調されないことがあります
行の中の強調は、書き換えられた行(削除した行と追加した行の組)にだけ行います。共通する文字がほとんどない行(4 分の 1 未満)は、強調するとかえって読みにくくなるため、行全体を変更として表示します。3,000 文字を超える長い行や、変更された行が多く強調の計算が全体で 1 秒を超えた場合も、強調を省略します(そのときは画面にお知らせを表示します)。
Excel や Word のファイルは比べられますか?
比べられません。Excel(.xlsx)や Word(.docx)のファイルは、文字だけでなく書式などを含んだ特別な形式で保存されているためです。中身の文字を比べたいときは、それぞれの内容をコピーして入力欄に貼り付けてください。Excel の表は、CSV 形式で保存したファイルなら読み込んで比べられます。
関連する記事・ツール
- Gitコマンド検索【無料・登録不要】やりたいことから探せるGitコマンド辞典|取り消し・ブランチ・push
- JSON整形ツール【無料・登録不要】インデント・圧縮・構文チェック|エラー箇所を日本語で表示
- XML整形ツール【無料・登録不要】インデント・圧縮・構文チェック|サクラエディタ用マクロ付き
- 文字化け復元ツール【無料・登録不要】「縺薙s」などを元に戻す|UTF-8・Shift_JIS・EUC-JP変換
- 文字コードとは?UTF-8・Shift_JIS・EUC-JPの違いと文字化けの原因・直し方
- 文字数・バイト数カウント【無料・登録不要】UTF-8・Shift_JIS・UTF-16のバイト数と表せない文字の場所を表示