diff コマンド情報まとめ
ターミナルの diff コマンドについて、基本的な使い方から便利なオプション、git diff や colordiff との違いなどを紹介しています。
diffとは
diff(ディフ)は、2つのファイルやディレクトリの内容を比較し、その「差分(変更箇所)」を抽出して表示するためのLinux/macOSコマンドです。
ファイルの更新前後でどこが書き換えられたかを視覚的に確認したり、プログラムのデバッグをしたりする際に重宝されます。
主要オプションの意味
| オプション | 意味 |
|---|---|
-u | Unified形式で差分を出力する(追加された行を +、削除された行を - で表示する最も一般的な形式) |
-y, --side-by-side | 2つのファイルを左右2列に並べて比較表示する |
-r, --recursive | ディレクトリ同士を再帰的に比較し、中の全ファイルを対象にする |
-q, --brief | ファイルの中身に差分があるかどうか(異なるか同一か)のみを報告する |
-w, --ignore-all-space | すべての空白文字(スペースやインデント)の差異を無視して比較する |
-B, --ignore-blank-lines | 空行の追加・削除だけの変更を無視して比較する |
-u オプションは、Gitなどのバージョン管理システムでも標準的に採用されているUnified(ユニファイド)形式で出力するため、変更箇所の可読性が格段に上がります。
よく使う組み合わせ
Unified形式で差分を確認する
diff -u file_old.txt file_new.txt
指定したファイルの差分をUnified形式で出力します。
行の先頭に -(削除)や +(追加)が付くため、一目でどの部分が変更されたのかを判別できます。
左右に並べて変更箇所を比較する
diff -y -W 120 file_old.txt file_new.txt
画面を左右に分割し、行同士を並べて比較します。
-W 120 は表示する全体の横幅(文字数)を指定しており、広い画面でソースコードの違いを細かく見比べたい場合に最適です。
ディレクトリ同士を再帰的に比較する
diff -ur dir_old/ dir_new/
2つのディレクトリ内に含まれるすべてのファイルを再帰的に比較します。
プロジェクト全体のバージョン移行時の変更点を確認する際などに非常に役立ちます。
diff vs 類似コマンド の違い
差分を調べるコマンドやツールには、以下のような違いがあります。
| コマンド | 対象・特徴 | 主なメリット |
|---|---|---|
diff | 通常のローカルファイル・ディレクトリの比較 | 標準搭載されているため、どんな環境でも即座に使用可能 |
git diff | Gitで管理されているリポジトリの変更差分比較 | ステージング前後の変更点や特定のコミット間を素早く比較可能 |
colordiff | diff の出力を色分け(カラー表示)するコマンド | 標準の diff より追加・削除がカラフルで視覚的にわかりやすい |
ユースケース
設定ファイルのバックアップとの整合性確認
diff -u config.conf config.conf.bak
サーバーの設定変更を行ったあとに、元のバックアップファイルと比較して変更箇所が意図したものだけになっているかを検証できます。
差分の有無のみを判定する
diff -q file1.txt file2.txt
-q を使うことで、詳細な差分データを出力する代わりに、「2つのファイルが同一かどうか」を素早く判定させることができます。
AIエージェントが実行しようとした場合
AIエージェントの目的
AIエージェントは主に次のような目的で diff を実行しようとすることがあります。
- コード修正の前後の差分を確認し、ユーザーへの変更箇所の報告や動作検証を行うため
- バックアップファイルと現在のファイルを比較し、修正箇所の整合性を検証するため
危険性
diff コマンドは、ファイルの読み取り専用の比較操作であり、システムに変更を加えたり破壊的な処理を行ったりすることはありません。
そのため、危険性はなく、AIエージェントが実行しても問題ありません。
自動実行の許可設定
このコマンドは情報の取得や閲覧のみを行う安全な操作であるため、AIエージェントの自動実行(許可)設定をオンにしても問題ありません。