テキストを比較して違いを見つける方法
文書、設定ファイル、コードの2つのバージョンの間で何が変わったかを見つけるのは、よくある作業です。両方のバージョンを読んで手動で違いを見つけるのは遅く信頼できません、特に長いテキストでは。差分チェッカーはそれを瞬時に行い、すべての変更をハイライトします。Gitのコミット履歴、GitHubのプルリクエストレビューインターフェース、Unixのdiffコマンドを動かす同じアルゴリズムが、これまで使ったすべてのビジュアル差分ツールの基盤になっています。
テキストを比較する手順
- 両方のバージョンを貼り付ける: 左に元のテキスト、右に修正されたテキストを入力します。
- ハイライトを確認: 追加された行は緑、削除された行は赤で表示されます。変更された行は古いバージョンと新しいバージョンの両方を表示します。
- エクスポートまたはコピー: 差分の結果をコピーするか、レポートをダウンロードします。
比較は両方のペインにテキストが入った時点で行われます。クリックする「比較」ボタンはありません。どちらかの編集が差分をリアルタイムに再実行するため、修正を反復しながら即座に効果を見たいときに便利です。
差分の読み方
差分の出力はシンプルな色システムを使います:
- 緑(追加): 新しいバージョンに存在するが古いバージョンにはない行
- 赤(削除): 古いバージョンに存在したが新しいバージョンには無い行
- 未変更: 両方のバージョンで同一の行
これはGit、GitHub、GitLab、Bitbucket、すべての主要なバージョン管理システムで使われている同じ慣習です。色は恣意的ではありません。追加に緑、削除に赤というのは、最初のビジュアル差分ツール(sdiffコマンドなど)がUnixで出荷された1970年代以降の標準です。モダンなツールは「変更」(両方に存在するが異なる行)を示すために黄色やオレンジを追加することがありますが、赤と緑は普遍的な追加/削除のままです。
diffの簡単な歴史
diffアルゴリズムは1976年にBell LabsのDouglas McIlroyによって初めて発表され、Eugene Myersによる後の改良(1986年のO(ND)アルゴリズム)に基づいています。これがインタラクティブな使用に十分な速度をdiffに与えました。McIlroyの元のアルゴリズムは1979年のUnix V7リリースとともに発表され、それ以降すべてのUnix系オペレーティングシステムの一部になっています。Myersアルゴリズムはモダンなdiff実装を動かすものです。Gitのdiff、GitHubのWebインターフェース、Beyond CompareからVS Codeまでのすべての差分GUI。
ビジュアルなサイドバイサイド差分形式はアルゴリズムより古いです。出版での手動校正の慣習(2列のテキストを表示し、変更を余白に印付ける)にまで遡ります。1970年代のソフトウェアは、編集者が何世紀も紙でやっていたことを自動化しただけです。「unified diff」形式(パッチファイルで見る---と+++ヘッダーのもの)は1990年にGNU diffで導入され、今ではテキストで変更を共有する事実上の標準です。
差分チェックが役立つ場面
- コードレビュー: コミット前に変更を元と比較して、何を修正したかを正確に確認します
- 文書の改訂: 契約、記事、ポリシーの2つのバージョンで何が変わったかを見つけます
- 設定のデバッグ: 動作する設定ファイルと壊れたものを比較して違いを発見します
- データ検証: 2つのデータエクスポートが同一かを確認するか、どこで分岐しているかを見つけます
- マージコンフリクト: 解決前にコンフリクトの両側を理解します
- 翻訳レビュー: 元の文書と翻訳を比較して、セクションがスキップされていないことを確認します
- メールやメッセージの比較: 誰かが「修正版を送りました」と言ったら、両方のメッセージで実際に何が変わったかを差分します
- データベースエクスポートの検証: データベースからの2つのCSVエクスポートを比較して、ETL実行が同一の出力を生成したことを確認します
行ベース対文字ベースの差分
差分チェッカーは行ベースの比較を使います。つまり、各行を最小の差分単位として扱います。1行に1単語を変更すると、行全体が変更として表示され(古い行が赤、新しい行が緑)、単語レベルの違いは自分で見つける必要があります。
行ベースの差分は、コードと設定ファイルの標準です。これらは典型的に行指向(1行に1ステートメント、1行に1設定オプション)だからです。速く、予測可能で、Gitとすべてのコードレビューツールの動き方と一致します。
行レベルの変更が粗すぎる散文の比較には、行内の変更された単語だけをハイライトする単語レベルや文字レベルの差分を提供するツールもあります。それはより精密ですが、コードでは読みにくくなります。単語レベルの差分が必要なら、「word diff」や「intra-line diff」と明記されたツールを探してください。
プライバシーと機密コンテンツ
差分チェッカーは完全にブラウザ内で動作します。両方のテキストはデバイス上に留まり、何もアップロードされません。これは差分したいテキストがしばしば機密だからです。交渉中の契約、プレスリリースの下書き、内部ポリシー文書、NDA下のソースコードなど。クラウドの差分ツール(DiffChecker.com、JsonDiff.com、オンラインマージツール)は両方のテキストを第三者のサーバーにアップロードする必要があり、これは機密コンテンツに対してまさに避けたいことです。ブラウザベースの差分にはその露出が一切ありません。
セッションもステートレスです。タブを閉じた後は何も残りません。差分の記録を残す必要があるなら、出力をコピーするか、移動する前にスクリーンショットを撮ってください。
よくある落とし穴
- 空白のノイズ: 末尾のスペース、タブとスペースの混在、異なる改行コード(UnixのLF対WindowsのCRLF)は、見えるテキストが同一でも「変更」として現れることがよくあります。ほとんどの差分ツールはこのケースに「空白を無視」の切り替えを持ちます。
- 改行コードの不一致: Windowsの改行コード(CRLF)対Unixの改行コード(LF)は、すべての行を変更として表示させます。異なるオペレーティングシステムからのファイルを差分する場合、まず改行コードを正規化してください。
- エンコーディングの違い: UTF-8対UTF-16対Windows-1252のテキストは、同じように見えても完全に異なるものとして比較されることがあります。差分前にUTF-8にエンコーディングを正規化してください。
- 並べ替えられた同一コンテンツ: 3ページ目から段落を切り取って1ページ目に貼り付けると、コンテンツが変わっていなくても、差分は段落を「3ページ目から削除、1ページ目に追加」と表示します。一部のツールはこれを扱う「ブロック移動の検出」を提供します。基本的な差分はそうしません。
- 大きなファイルのパフォーマンス: 10,000行を超えるファイルの比較はブラウザを遅くすることがあります。非常に大きな差分には、コマンドラインの
diffやBeyond Compareのようなデスクトップツールを使ってください。
使いこなしのヒント
- クリーンなテキストを貼り付ける: 比較したくないヘッダー、フッター、メタデータを取り除きます。余分なノイズは本当の違いを見つけにくくします。
- サイドバイサイドビューを使う: 行番号が揃った両バージョンを並べて見る方が、インラインビューよりも違いを追跡しやすくなります。
- 空白をチェック: ときには「同一」のテキストにも、末尾スペース、異なる改行コード(LF対CRLF)、タブ対スペースのような目に見えない違いがあります。差分チェッカーはこれらをキャッチします。
- 散文では先に正規化: 自然言語の比較には、両方のテキストを空白正規化ツールに通すか、プレーンエディタに貼り付けてから差分してください。これにより、WordやPDFから持ち越されたフォーマットからの偽の差分を避けられます。
- 記録が必要なら差分を保存: ハイライトされた出力をコピーするか、スクリーンショットを撮ります。差分は自動的に保持されません。
- オフラインで動作する: ページを一度読み込めば、比較はインターネット不要でブラウザ内でローカルに実行されます。
よくある質問
差分は文字ごとに比較しますか?
Gitとほとんどのプロの差分ツールと同じアプローチで、行ごとに比較します。1文字でも変更されると、行全体が変更済みとして強調表示されます。
サイズ制限はありますか?
厳密な制限はありませんが、非常に大きなテキスト(10,000行以上)は、比較がブラウザ内で完全に実行されるため、処理に時間がかかる場合があります。
コードファイルを比較できますか?
はい。差分はソースコードを含む任意のテキストで動作します。シンタックスハイライトはコード差分をより簡単に読むのに役立ちます。
テキストはサーバーに送信されますか?
いいえ。比較はブラウザ内で行われます。テキストがデバイスを離れることはありません。