Armoris日記 diffコマンド編

皆さんは、ファイルの古いバージョンと新しいバージョンの変更箇所について、確認したいと思ったことはありませんか?
特に、ソースコードのどの部分が変更されているのかわかると作業が捗りますよね。

今回はそんなときに覚えておくと便利なコマンドを紹介します。

ファイルの差分を確認したい...

実はファイルの差分を確認する方法はいくつかあり、例えばVS Codeや、専用ツールなどがあります。
f:id:Armoris:20200709103029p:plain:w200
しかしLinuxなどのCUI環境や、検証環境などで手軽に差分を取得したい場合があります。
そこで、今回はdiffコマンドを使用して簡単にファイル差分を取得する方法を紹介します。

今回各種オプションに関しての詳しい説明はしません。

diffコマンドを使う

以下二つのファイルについて差分を表示する

  • ファイル1
password
p
pass

hoge
  • ファイル2
password
AA
pass

huga

  • 基本の使い方
$ diff ABC.text DEF.text
2c2
< p
---
> AA
5c5
< hoge
---
> huga
  • これだけでは結果が見にくいのでオプションをつけて実行する
$ diff -u ABC.text DEF.text
--- ABC.text    2020-07-09 13:21:22.000000000 +0900
+++ DEF.text    2020-07-09 13:21:42.000000000 +0900
@@ -1,5 +1,5 @@
 password
-p
+AA
 pass

-hoge
+huga

このオプションをつけることで、結果がGitHubの差分表示に近くなるためわかりやすいと感じる人も多いと思います。


  • ファイルの差分を左右に並べて比較したい場合のオプション
$ diff -y ABC.text DEF.text
password                                                        password
p                                                             | AA
pass                                                            pass

hoge                                                          | huga
  • これに-Wオプションを追加することで横幅の指定も可能になります。
$ diff -y -W 30 ABC.text DEF.text
password        password
p             | AA
pass            pass

hoge          | huga

こうするとぱっと見てどのあたりが変更されたかがわかりやすくなると思います。


最後にプロジェクトファイルなどディレクトリを比較して差分を取りたい場合は-rオプションが使用できます。

$ diff -r ABC/ DEF/
diff -r ABC/ABC.txt DEF/ABC.txt
2c2
< p
---
> AA
5c5
< hoge
---
> huga
diff -r ABC/hoge/hoge.txt DEF/hoge/hoge.txt
2d1
<
3a3
>
diff -r ABC/test.txt DEF/test.txt
3,4d2
< test test
<
5a4,5
>
> test test

再帰的にサブディレクトリも比較してくれる。


今回は私が普段よく使うオプションに絞って紹介しましたが、他にも便利なオプションが多くあります。
また、manコマンドを使用して$ man diffとすることで詳しい使い方を見ることができます。
f:id:Armoris:20200709103038p:plain:w200
また、一見難しく感じてしまうかもしれませんが、コマンドは実際に使うことで慣れていきます。是非一度他のオプションも調べて使ってみてください。