このツールとは?
diff(差分)ツールは、2つのテキストを比較し、一方をもう一方に変えるための最小限の変更点を表示します。これは、Gitのようなバージョン管理システムがコードの変更を表示する方法であり、設定ファイル、契約書、記事、あるいはあらゆるものの2つのバージョンを比較する場合にも同様に役立ちます。
このツールは、従来のdiffユーティリティと同じ基本アルゴリズム群(最長共通部分列)を用いて行単位で差分を比較するため、出力は馴染みのあるコードレビューのような形式になります。追加された行には「+」、削除された行には「−」が表示されます。
なぜこれを使うのか?
- 2つのバージョンを目視で比較するのではなく、実際に何が変更されたかを確認しましょう。
- おなじみのGit形式の出力:追加部分は緑、削除部分は赤、その間にコンテキスト行が表示されます。
- 追加・削除された行数の概要を一目で確認できます。
- コード、設定ファイル、文書、リストなど、あらゆるテキストに対応しています。
- 非公開:両方のテキストはブラウザ内に保存され、何もアップロードされません。
使い方
- 元のテキストを左側のボックスに貼り付けてください。
- 変更した内容を右側のボックスに貼り付けてください。
- 「比較」をクリックしてください。
- 結果をご覧ください:緑色の線は追加され、赤色の線は削除され、実線は変更されていません。
例
入力
Original:
line one
line two
line three
Changed:
line one
line 2
line three出力
line one
− line two
+ line 2
line three中央の行が変更されました。diff では、古い行が削除され、新しい行が追加されたことが示されています。
一般的な利用例
- AIによって書き換えられた段落を確認する際は、全文を読み返して修正箇所を探すのではなく、原文とAIによる書き換え版を並べて貼り付け、どの文が変更されたかを正確に確認しましょう。
- 2つの契約書草案を比較する場合、バージョン間で文書の書式が変更されていると、「変更履歴」機能で表示されるよりも、「行単位の差分表示」の方が、法的な修正箇所を把握しやすいことがよくあります。
- デプロイ後の設定ファイルの確認:.env ファイルや YAML ファイルの「変更前」と「変更後」を貼り付けて、意図した行のみが変更されたことを確認します。
- 翻訳文の修正内容の比較:草案間で、翻訳者や編集者が実際に手を加えた行を確認できます。
知っておくべき制限事項
これは単語単位の差分ではなく、行単位の差分です。つまり、文言を変更せずに段落をドキュメントの上部から下部へ移動させた場合、その変更は「移動」という注釈ではなく、完全な削除と完全な追加として表示されます。 文ごとに変更される単語がわずかしかない、段落の多い文章の場合、単語単位の差分ツールの方がハイライトされるテキストは少なくなりますが、コード、設定ファイル、構造化された文書では行単位の差分が標準であり、本ツールもそこに重点を置いています。
比較アルゴリズムの仕組み
このツールは、2つのテキスト間の最長共通部分列(LCS)を検出します。これは、たとえその間に他の行が挿入されたり削除されたりしていたとしても、両方のバージョンで同じ相対的な順序で現れる行の最大集合のことです。その共通部分列に含まれるすべての部分は「変更なし」として表示され、 それ以外の部分は、「削除された」(元のバージョンにのみ存在する)か「追加された」(新しいバージョンにのみ存在する)のいずれかに分類されます。これは、UnixのdiffユーティリティやGitの行単位比較の根幹となるアルゴリズムと同じものであるため、プルリクエストのレビュー経験がある方なら、この出力形式を一目見てすぐに馴染みのあるものだと感じるでしょう。
これによる実用上の影響として、ある行が文書の別の箇所で重複している場合(まったく同じテキストが2回出現している場合)、アルゴリズムは全体的な差分が最小になるようにその行を照合します。これにより、直感的に予想される組み合わせとはわずかに異なる結果になることもありますが、どの重複行がどの行と照合されたかに関わらず、最終的に追加・削除される行数は常に正確です。
よくある質問
単語単位で比較するのでしょうか、それとも行単位で比較するのでしょうか?
git diffのように、行単位で表示されます。変更された行は、削除された部分と追加された部分として表示されます。行単位の差分表示は、コードや設定ファイルの標準的な形式であり、大規模なテキストでも読みやすさを保ちます。
ほんのわずかな変更なのに、なぜ行全体が変更されたと表示されるのですか?
比較の単位は行であるため、その行内での変更は行全体に影響します。より細かい単位での調整が必要な場合は、長い段落を短い行に分割してください。
空白は重要なのでしょうか?
はい。行は完全に一致する必要があります。そのため、末尾のスペースやインデントの違いがあると、行が別ものとみなされます。これは意図的な仕様です。空白の差異は、コードや設定において実際の違いとなるからです。
サイズの制限はありますか?
厳密な制限はありませんが、テキストが非常に大きい場合(数万行など)、比較処理は端末上でローカルに実行されるため、少し時間がかかることがあります。
私のテキストは比較用にアップロードされていますか?
いいえ。差分アルゴリズムは、JavaScript を使用してブラウザ上で完全に実行されます。両方のテキストはユーザーのデバイス上に残りますので、契約書、社内文書、未公開のコードなどでも安心してご利用いただけます。