Skip to content

テキスト比較と差分検出

2 つのテキストをブラウザ内で即座に比較。並列ビュー、行内の単語レベルハイライト、統一 diff のエクスポート、大文字小文字・空白・空行の無視に対応。完全ブラウザ内処理でアップロード不要、テキストは端末から出ません。

トラッキングなし ブラウザで動作 無料
すべての比較はブラウザ内ローカルで動作します。テキストはこの端末から出ません。
無視オプション
`diff -u` 出力との整合性、行内 LCS の正確性、アクセシビリティ(ARIA ロール、スクリーンリーダーの変更アナウンス、RTL/LTR 処理)についてレビュー済みです。 — Go Tools テキストツールチーム · May 21, 2026

テキスト比較とは?

テキスト比較とは、2 つのテキスト文書を構造的に比較し、一方を他方に変換するために必要な最小限の挿入と削除の集合を求める処理です。出力は変更を可視化します。追加行は緑、削除行は赤、並列表示または `git`、GitHub、Unix の `patch` コマンドが使う `---/+++/@@` 統一パッチ形式で表示されます。

内部的に、現代の diff はほぼすべて最長共通部分列(LCS)アルゴリズムです。Eugene Myers の 1986 年の O((N+M)D) 論文は効率的実装の定番で、本ツールが用いる古典的な動的計画法(前後の共通部分を切り落とす最適化付き)はよりシンプルで、典型的な Web 入力には十分機能します。行単位で揃った後、隣接する削除 + 追加ペアは 2 段目のトークンレベル LCS にかけられ、レンダラは行内で実際に変わった単語だけをハイライトできます。これがレビュアーが言う行内 diff、または単語レベル diff です。

なぜ文字単位の比較で済まないか? 編集は通常フラットではないからです。200 行のファイルの中央に 1 行挿入すると、それ以降の全行がずれます。素朴な `===` は 199 行すべてを「異なる」と判定します。LCS は真実を伝えます。追加は 1 行、199 行は変わっていません。

このツールはすべての比較をブラウザ内で実行します。アップロードなし、一時ファイルなし、ログなし。専有コード、赤入れ中の契約書、機密のログ —— 第三者サーバーに貼り付けたくないものに対して安全です。代わりに JSON を diff したい? 構造化された JSON Diff をご利用ください。キーの順序や空白がノイズになりません。YAML や CSV の設定ファイルを比較する場合は、まず YAML → JSONJSON → CSV で変換し、形式に合った diff ツールを使ってください。

// Two strings that look 'mostly the same' but a naïve check disagrees
const a = 'hello world';
const b = 'hello, world!';

// Character equality
a === b; // false — but only 3 characters actually changed.

// LCS-style diff (this tool, at line + word granularity)
// → 1 line modified, inline highlight: 'hello[, ]world[!]'
// → unified patch:
//   --- original
//   +++ modified
//   @@ -1 +1 @@
//   -hello world
//   +hello, world!

主な機能

並列表示 + 統一表示

人間のレビュー向けの 2 列ビジュアルビューと、`git apply`、コードレビューツール、バグレポート用の標準的な統一 diff パッチ形式を切り替えられます。

行内の単語レベルハイライト

2 つの行が「変更」としてペアになると、変わったトークンだけに色付き背景が付きます。80 文字を目で追わなくても、編集箇所にすぐ気づけます。

大文字小文字 / 空白 / 空行の無視

独立した 4 つのトグル: 大文字小文字、すべての空白、行末空白のみ、空行。`git diff -i -w -b` を数クリックで再現できます。

統一 diff のエクスポート

前後 3 行のコンテキスト付きのクリーンな `---/+++/@@` パッチをコピー。PR コメント、バグレポート、`patch -p1` にそのまま貼り付けられます。

100% ブラウザ内処理

入力は端末から出ません。アップロードなし、テキストに対する解析もなし。ページ読み込み後はオフラインで動作。専有コードや機密文書も安全です。

Unicode と RTL に対応

Unicode の単語境界でトークンを分割。アラビア語、ヘブライ語、CJK のコンテンツもきれいに比較でき、改行コード(CRLF、LF、CR)はすべて正規化されます。

サンプル

コードレビュー — 変数名のリネーム

function getUser(id) {
  const u = db.users.find(x => x.id === id);
  return u;
}
function getUser(userId) {
  const u = db.users.find(x => x.id === userId);
  return u;
}

並列ビューはリネームを含む各行をハイライトし、行内 word diff は変更されていないトークンを薄く表示するため、どの識別子が変わったかが一目で分かります。

契約書の修正 — 条項を 1 つ追加

1. The service is provided as-is.
2. Either party may terminate with 30 days notice.
3. Disputes are resolved in California courts.
1. The service is provided as-is.
2. Either party may terminate with 30 days notice.
2a. Termination notice must be in writing.
3. Disputes are resolved in California courts.

挿入された 1 行(2a 行)が唯一の差分です。前後のコンテキスト行はそのまま保たれ、契約書やポリシー文書の赤入れに最適です。

ログ調査 — リクエスト時間の変化

GET /api/users 200 14ms
POST /api/orders 201 88ms
GET /api/orders/42 200 21ms
GET /api/users 200 14ms
POST /api/orders 201 4200ms
GET /api/orders/42 500 21ms

2 行が変わります。行内ハイライトが 88ms → 4200ms のレイテンシ漂流と 200 → 500 のステータスコード変化を示します。インシデント対応の定石です。

行末空白 — 「行末を無視」を切り替え

  margin: 0;  
  padding: 0;
  border: none;
  margin: 0;
  padding: 0;
  border: none;

オプションを使わないと、1 行目は行末スペースのせいで差分と判定されます。「行末スペース / タブを無視」を有効にすると差分はゼロに。`git diff -b` と同じ挙動です。

使い方

  1. 1

    両方のバージョンを貼り付け

    左に元のテキスト、右に変更後のテキストを貼り付けてください。入力中もライブ diff がレンダリングされ、大きな入力(合計 200 KB 超)では手動 Diff ボタンに切り替わります。

  2. 2

    必要な無視オプションを有効化

    大文字小文字、すべての空白、行末スペース、空行を無視 —— いずれも独立して動作し、訪問間で保持されます。

  3. 3

    差分を読むかパッチを取得

    並列表示は人間のレビュー用、統一表示は `---/+++/@@` パッチ形式用です。「統一 diff をコピー」で、コードレビューや `patch -p1` 用のクリーンなパッチをクリップボードに送れます。

よくある Diff の落とし穴

Windows と Unix 間でコピーしたらファイル全体が「変わった」

Unix で編集された原文に Windows の Notepad から貼り付けると、すべての行で \r の差分が出ます。「行末スペース / タブを無視」を有効にして CR 文字を黙らせましょう。

✗ 誤り
Diff: 200 件の変更(すべて行末 \r が原因)
✓ 正しい
行末スペース / タブを無視 → 実際の変更は 2 件

インデントだけの差分が騒がしい

タブ ↔ スペースの再フォーマットは行単位の差分を爆発させます。「すべての空白を無視」で本当の意味的変更だけに絞れます。

✗ 誤り
Diff: 87 件の変更(すべてインデント変更)
✓ 正しい
すべての空白を無視 → 実際の変更は 4 件

空行 1 行のせいで同じ段落が変更扱い

文章に空行を 1 行追加 / 削除するだけで、領域全体がずれることがあります。「空行を無視」なら本文に触れずに直せます。

✗ 誤り
Diff: 段落 2 が「完全に変わった」(空行が移動しただけ)
✓ 正しい
空行を無視 → 段落 2 には変更なし

diff は「同一」と言うのにファイルが違う

ほぼ常に、前のセッションの大文字小文字や空白の無視オプションが残っているケースです。「無視オプション」パネルを開けば、すべてのトグルが見えます。バイト厳密に比較したい場合はすべてオフにしてください。

✗ 誤り
差分 0 件と表示されるが、`cmp` はファイルが違うと言う
✓ 正しい
すべての無視オプションをオフ → 本当の差分が出る

貼り付けた JSON が「全部変わった」ように見える

テキスト diff はキーの順序を意味あるものとして扱いますが、JSON ではそうではありません。JSON のペイロードには専用の JSON Diff を使ってください。キー順序を無視し、型の厳密性を尊重します。

✗ 誤り
JSON にテキスト diff: 行の 100% が変更(実はキーの並び替えだけ)
✓ 正しい
<a href="/ja/tools/json-diff">JSON Diff</a>: 差分 0 件

「diff が切り詰められた」警告を無視

片側 5,000 行を超えると入力はクリップされます。警告が出たらコマンドラインの `diff -u file1 file2` や `git diff --no-index` に切り替えてください。どちらもストリーミングで GB 級を扱えます。

✗ 誤り
20,000 行のログを貼り付け —— 最初の 5,000 行しか diff されない
✓ 正しい
ターミナルで `diff -u a.log b.log` を実行してファイル全体を処理

主なユースケース

コードレビューの断片
同じ関数の 2 つのバージョンを左右に貼ると、リネーム、削除された分岐、新しいガード句が一目で分かります。1 行の変更を確認するには、GitHub の diff をスクロールするより行内単語ハイライトのほうが速いです。
契約書 / ポリシーの赤入れ
昨日の契約書と今日の改訂版を貼り付け。挿入された条項が浮かび上がり、変わっていない段落はグレーに沈みます。法務レビューの証跡として統一パッチを書き出せます。
ログのタイムライン調査
SRE のインシデント前のログスライスと、発生中のスライスを比較。レイテンシ、ステータスコード、頻度の漂流が `awk` なしですぐに浮かび上がります。
原稿 / 草稿の改訂
草稿と編集者のバージョンを貼り付け。行内単語 diff がどの文が書き直されたかを正確に示し、修正の採用 / 却下を 1 つずつ判断するのに非常に役立ちます。
翻訳レビュー
旧訳と再翻訳を diff して、新訳が意味、構造、プレースホルダーを保っているか確認。「行末スペースを無視」をオンにすると、翻訳者がよく持ち込む末尾のノイズを抑えられます。
設定 / .env ファイルの監査
2 つの `.env`、`docker-compose.yaml`、シェル rc ファイルを比較。「空行を無視」をオンにすれば、書式の揺れではなく機能的な差分に集中できます。

技術詳細

前後トリム付きの LCS
動的計画法の LCS を実行する前に、共通の先頭・末尾の行を取り除きます。「2,000 行の設定で 1 行だけ変わった」ような diff は 1×1 の DP テーブルに収まり、1 ミリ秒未満でレンダリングされます。
トークンレベルの行内 diff
隣接する削除 + 追加のハンクをペアにし、Unicode の単語 / 非単語 / 空白の連なりでトークン化します。2 回目の LCS が緑 / 赤のトークンスパンを生成し、変更行を読みやすくします。
統一 diff は git / patch 互換
出力は GNU patch 用に定義され、Git、GitHub、すべてのコードレビューツールが使う `---/+++/@@ -L,C +L,C @@` 形式に従います。`pbpaste | patch -p0` で適用できます。
片側 5,000 行の入力上限
上限を超えると diff は切り詰められ、警告が出ます。数 MB の入力にはコマンドラインの `diff -u` や `git diff --no-index` をご利用ください。ストリーミングで GB 級にも対応します。

ベストプラクティス

読む前に無視オプションを選ぶ
行末スペース、CRLF、大文字小文字のノイズは信号を埋もれさせます。先に正しいオプションを切り替えると差分が読みやすくなり、「偽の」変更を読み飛ばす癖を身につけずに済みます。
共有は統一 diff、レビューは並列表示
ビジュアルな列はあなたの目のため、統一パッチは他人の端末のためです。コピーした統一 diff は、Slack のメッセージ、Jira のコメント、`patch -p1` にそのまま貼り付けられます。
一致率 % で健全性チェック
「ほぼ同じ」のはずなのに一致率が 30% なら、改行コードや空白の問題があります。「すべての空白を無視」を有効にして再確認してから差分を読みましょう。

よくある質問

貼り付けたテキストはサーバーに送信されますか?
送信されません。すべての比較はブラウザ内の JavaScript で動作します。テキストはアップロードもログ記録もディスク保存もされず、第三者にも送られません。次回訪問時に設定を覚えておけるよう、UI の好み(ビューモードと無視オプション)だけが localStorage に保存され、テキスト本体は保存されません。DevTools → ネットワークを開いて確認できます。Diff をクリックしてもリクエストは一切発生しません。
テキスト diff と JSON diff の違いは?
テキスト diff は行単位で比較し、文章、コード、ログ、契約書、設定ファイルに最適です。JSON Diff は JSON のデータモデルを理解します。キーの順序は無関係、型は厳密、配列はキーで突き合わせ可能です。JSON をテキスト diff に貼ると、キーの並び替えや空白の違いが変更として検出されますが、JSON Diff はそれらを無視します。非構造化のコンテンツにはテキスト diff、API レスポンスや設定ペイロードには JSON Diff を使ってください。
空白、大文字小文字、空行を無視するには?
差分の上にある「無視オプション」パネルをクリックします。「大文字小文字を無視」で A と a を等価にできます。「すべての空白を無視」は比較前にスペース、タブ、改行をすべて畳み込みます。「行末スペース / タブを無視」は行末の空白だけを取り除き、`git diff -b` と同じ挙動です。「空行を無視」は空 / 空白のみの行を比較前に落とします。各オプションは独立して動作し、訪問をまたいで保持されます。
統一 diff(unified diff)とは? いつコピーすべき?
統一 diff は `patch`、`git apply`、GitHub の PR、ほとんどのコードレビューツールが使う `---/+++/@@` 形式のテキストです。「統一 diff をコピー」を押すと、変更箇所の前後 3 行のコンテキストを含むパッチが取得できます。バグレポート、コードレビューのコメント、または `patch -p1` コマンドに貼り付ければそのまま適用できます。並列表示は人間向け、統一 diff は機械(と機械のように考えるレビュアー)向けです。
1 単語しか変えていないのに、行全体が変わったように表示されるのはなぜ?
実はそうではありません。よく見てください。行全体がハイライトされているのは何かが変わったためですが、ハイライトの中で明るい背景色(追加は緑、削除は赤の取り消し線)が付くのは変わったトークンだけです。これが行内単語 diff です。行のコンテキストは読みやすく保たれたまま、目線は正確な編集箇所に落ちます。隣り合う 2 行が両方変更された場合は、両方とも行内ハイライトが表示されます。
CRLF と LF の改行コードはどう扱われる?
両方とも認識されます。diff は \r\n、\n、単独の \r で行を分割するため、Windows の CRLF、Unix の LF、旧 Mac の CR テキストはすべて正しく揃います。改行コードの変化を明示的に検出したい場合は「行末スペース / タブを無視」をオフにしてください。\r が行末文字として表示されます。改行コードのノイズを完全に消したい場合は「すべての空白を無視」をオンにします。
入力サイズの上限は?
diff はメインスレッドで実行されるため、実用上の上限は片側あたり約 5,000 行または 1 MB です。それを超えるとクリップして警告を出します。合計 200 KB を超えるとライブ diff は無効化され、手動 Diff ボタンに切り替わります。数 MB のファイルにはコマンドラインの `diff -u` や `git diff --no-index` をお使いください。ストリーミング処理で GB 級にも対応します。
コードを diff できる? 言語を認識する?
この diff は言語非依存で、行とトークンだけを見て構文解析はしません。レビュー断片、設定ファイルの編集、貼り付けたパッチの確認にはむしろ強みです。意味的なコード diff(ファイル間の関数リネームや AST レベルの比較)が必要なら、git、GitHub の PR ビュー、専用の構造化 diff ツールを使ってください。とはいえコードレビューの 90% の場面 —— 関数を眺める、2 つのスニペットを比べる —— では行 + 単語 diff で十分です。
1 箇所の編集が、削除 + 追加の 2 行として表示されることがあるのはなぜ?
1 行の中で変化が大きすぎて、単語レベルのハイライトでは読みにくくなる場合、diff は独立した削除行と追加行として表示し、構造をきれいに保ちます。同じヒューリスティクスにより、文章の書き直しや書き換えられたコードブロックも読みやすい出力になります。「統一」ビューに切り替えると、パッチで使われる古典的な `-`/`+` ペア形式が確認できます。
% 一致率はどう計算される?
(無視オプションを適用した後の)未変更行数を、2 つの行数のうち大きい方で割り、100% でクランプします。同一の入力は 100% です。100 行のファイルに 1 行追加すると 99% になります。全行を入れ替えると 0% です。「これは細かい修正か、全面書き直しか」を差分を読む前に素早く判断するのに役立ちます。
diff を同僚と共有できる?
はい、2 通りあります。(1)「統一 diff をコピー」を押してパッチをチャット、Slack、PR コメントに貼り付ければ、ターミナルを持つ人なら誰でも `patch < clip` で適用できます。(2) 並列表示パネルのスクリーンショットを撮って視覚的にレビューしてもらいます。「URL で共有」ボタンを意図的に提供していないのは、それにはテキストをアップロードする必要があり、私たちはそれを行わないからです。
アラビア語やヘブライ語のような右から左の言語に対応している?
テキストコンテンツは対応しています。行とトークンは Unicode を考慮しています。インターフェースは論理 CSS 方向を使っているため、RTL ロケールではガター(行番号列)と各列が自然に反転します。diff セル内のテキスト方向はコンテンツに従うため、アラビア語やヘブライ語の文字列は正しくレンダリングされ、+/- マーカーはガター側に揃ったままです。

無料の Regex テスター — パターンをオンラインでデバッグ & マッチ

テキスト処理

任意のテキストに対して regex パターンを即座にテストできます。リアルタイムのマッチハイライト、キャプチャグループ、置換プレビュー、分割、パターン解説に対応。JavaScript 系の正規表現を 100% プライベートに、登録不要で利用できます。

無料の文字数カウンター & 単語カウントツール

テキスト処理

単語数、文字数、文の数、段落数、読了時間をリアルタイムで計測できます。Twitter、メタディスクリプション、Instagram の文字数制限チェックにも対応。無料・プライベート・登録不要。

進数変換ツール — 2進数・16進数・10進数・8進数

単位変換

無料オンライン進数変換ツール。2進数、8進数、10進数、16進数および任意の基数(2-36)間で数値を瞬時に変換。BigInt対応で桁数制限なし。登録不要・サーバー送信なし、すべての処理がブラウザ内で完結。コピーボタンやコードリテラル出力で開発作業を効率化。

Base64エンコーダー&デコーダー

エンコーディングとフォーマット

Base64のデコード・エンコードが無料でオンラインで行えます。リアルタイム変換、UTF-8・絵文字対応。100%ブラウザ上で動作しデータは外部に送信されません。登録不要。

Crontab ジェネレーター & cron 式ビルダー

日付/時刻ツール

ブラウザ上で cron 式を生成・検証・デコードできます。ローカルタイムまたは UTC での次回実行プレビュー、POSIX 5 フィールド構文、プリセット、自然言語による説明に対応。無料・プライベート・登録不要。

CSV to JSON 変換ツール

エンコーディングとフォーマット

CSVをブラウザ内で即座にJSONに変換。RFC 4180・型推論・ヘッダー行・大整数安全対応。100%プライベート、アップロード不要。