すべての比較がGitリポジトリ内で行われるわけではありません。設定ファイルは手動で編集され、APIレスポンスはSlackのスレッドに貼り付けられます。SQLクエリはスプレッドシート内でバージョン間で調整されます。2つのテキストの間で実際に変更された内容を確認する必要がある場合、差分ツールが必要です——ただし、必ずしもGitが必要とは限りません。
適切なツールを選ぶ方法を紹介します。
Git以外での差分が必要な場合
Gitの差分は、ファイルがバージョン管理されている場合にワークフローに組み込まれています。しかし、多くの状況はそれとは異なります:
- 設定ファイル — 変更前と変更後の比較、特にファイルがリポジトリに入っていない場合
nginx.confAPIレスポンスのスナップショット - — 1週間前と比較した2つのJSONパラメータの間の変更を確認 SQLクエリ
- — 開発環境で実行されるクエリと、プロダクション環境で実行されるクエリの間の比較 — 手動で編集されたドキュメントを渡す前にレビュー
- ドキュメント このような場合、コミットやステージされたファイルを必要としない、シンプルな比較が求められます。
Unix
コマンド:重要なフラグ diff LinuxまたはmacOS上で、このコマンドはすでにインストールされています。基本的な使い方は次の通りです:
ただし、デフォルトの出力は簡潔です。以下のフラグで読みやすくなります: diff 統合出力の例:
diff file1.txt file2.txt
が削除されました,
# Unified format (same as Git's diff output — most familiar)
diff -u file1.txt file2.txt
# Side-by-side comparison
diff -y file1.txt file2.txt
# Ignore whitespace differences (useful for formatting changes)
diff -w file1.txt file2.txt
# Combine: unified format, ignore whitespace
diff -uw file1.txt file2.txt
が追加されました。前後の行は変更されていません。
--- file1.txt 2026-03-01 10:00:00
+++ file2.txt 2026-03-05 14:30:00
@@ -1,4 +1,4 @@
server {
- listen 80;
+ listen 443;
server_name example.com;
}
から始まる行 - 3つのバージョンを比較する場合 + 標準的な差分は2つのファイルを比較します。3つのバージョンを比較する3段階差分は、共通の祖先を扱います。これはGitの外でも、マージ衝突の解決に使われます。
コマンドはこれを処理します:
これは、
の diff3 の変更と、
diff3 mine.txt base.txt theirs.txt
の変更を示し、衝突をフラグ付けします。2人の人が独立して同じ開始ドキュメントを編集した場合や、Gitマージを使わずにそれらを調整する必要があるときに役立ちます。 mine.txt vs base.txtプログラムによる差分:PythonとNode.js theirs.txt vs base.txt スクリプト内で差分を必要とする場合、またはアプリケーションに差分出力を組み込む場合、コマンドを呼び出すのではなく、ライブラリを使用します。
Python —
もしくは diff.
を用いて、並列表示のHTML出力を生成し、 difflib:
import difflib
text1 = open("file1.txt").readlines()
text2 = open("file2.txt").readlines()
diff = difflib.unified_diff(text1, text2, fromfile="file1.txt", tofile="file2.txt")
print("".join(diff))
difflib は2つの文字列間の類似度を計算するためのライブラリです。これは、近似マッチングに便利です。 HtmlDiff Node.js — SequenceMatcher パッケージ:
ライブラリは、文字、単語、行、文、JSON、CSSの差分を標準でサポートしています。 diff オンラインツールが適切な場合
npm install diff
const Diff = require('diff');
const one = 'SELECT id, name FROM users WHERE active = 1;';
const two = 'SELECT id, name, email FROM users WHERE active = 1 LIMIT 100;';
const changes = Diff.diffWords(one, two);
changes.forEach(part => {
if (part.added) process.stdout.write('\x1b[32m' + part.value + '\x1b[0m');
else if (part.removed) process.stdout.write('\x1b[31m' + part.value + '\x1b[0m');
else process.stdout.write(part.value);
});
の diff ディスクにすでに2つのファイルがある場合、CLIは速いですが、2つのソースからコピーされたテキスト(Slackスレッド、2つのAPIレスポンス、クリップボードコンテンツ)を比較する場合、ターミナルを開いて一時ファイルを作成するのは過剰です。
ブラウザベースのテキスト比較ツールが最も速い方法です:
ディスクにファイルがない一時的な比較
ターミナルを使わない人向けに差分を共有
- 設定なしで前後を確認
- IO Tools テキスト比較
- ブラウザ内で差分を直接処理し、シンタックスハイライトを提供し、ファイルアップロードを必要としません。2つのテキストを貼り付け、すぐに差分を確認できます。
構造化データの差分:JSONとYAMLは異なります プレーンテキスト差分は行単位で動作します。JSONとYAMLは構造を持ち、フォーマットの違い(インデント、キー順序)は標準差分では意味のないノイズになります。
JSONの場合、まず標準化します:
これはフォーマットの変化を除去し、実際のコンテンツ変更のみを表示します。YAMLの場合、
のようなツールは構造を理解し、行単位ではなく意味的に差分を報告します。
jq --sort-keys . file1.json > file1_normalized.json
jq --sort-keys . file2.json > file2_normalized.json
diff -u file1_normalized.json file2_normalized.json
最も適したツール dyff プレーンテキストファイル
| 用途 | 標準化、どこでも動作 | 注記 |
|---|---|---|
| ターミナルでの並列表示 | diff -u | 広い出力、短いファイルに適している |
| マージ衝突(Gitなし) | diff -y | 3つのバージョンの比較 |
| スクリプトまたは自動化された差分 | diff3 | またはNode.js |
| パイプラインやアプリに組み込む | パイソン difflib 一時的なペースト比較 diff | ブラウザベース、設定不要 |
| フォーマットノイズのあるJSON | 構造化データの差分:JSONとYAMLは異なります | 標準化 + |
| キーを並べ替え、その後差分を取る | jq 構造を理解したツール、より良い信号 diff | どのツールを使うべきか |
| ヤム | dyff, yamldiff | ディスクにある2つのファイル |
スペースを無視する必要がある
- 3つのバージョンを調整する必要がある →
diff -u - パイプラインやスクリプトを構築する →
diff -uw - npmパッケージ →
diff3 - ブラウザ内で2つのペーストを比較する →
difflibまたはdiffJSONの差分 - → を使用して標準化し、その後 → 構造化データの差分:JSONとYAMLは異なります
- YAMLの差分 → を使用する
jq最も速い方法は、あなたのスタートポイントに合うツールです。テキストがすでにクリップボードにある場合、ブラウザベースの差分ツールはターミナルワークフローを上回ります。ファイルに存在する場合、diff - はすでにあなたのマシンにインストールされています。 Gitなしでのテキスト差分:ファイルと文字列の変更を確認 2
dyff
Gitなしでのテキスト差分:ファイルと文字列の変更を確認 1 diff すでにあなたのマシンにあります。
