blog.dopana

Back

コードの変更を確認するために git diff を実行したとき、package-lock.jsonbun.lock の膨大な変更行に圧倒されたことはありませんか?それは、机の上にある特定の本を探したいのに、山積みのメモ用紙に埋もれているようなものです。

この記事では、変更を比較する際に Git にこれらのファイルの詳細な内容を「無視」させる方法を紹介します!

ロックファイルの問題点#

npm、yarn、pnpm、bun などのパッケージマネージャーを使用する場合、これらは「ロックファイル」を生成します。このファイルは、プロジェクトが依存するすべてのライブラリのバージョンを正確に記録します。

[!NOTE] ロックファイルの目的は、プロジェクトをクローンした誰もが全く同じ依存関係をインストールできるようにし、「私の環境では動くのに」という典型的な問題を未然に防ぐことです。

問題は、1 つのライブラリをインストールまたは更新しただけでも、ロックファイルが数百、数千行変更される可能性があることです。git diff を実行すると、これらの変更がソースコードの実際の変更をかき消してしまい、コードレビューが困難になります。

解決策:.gitattributes の使用#

ロックファイルの内容を隠す最も簡単で効果的な方法は、.gitattributes を使用することです。この設定により、Git に「このファイルが変更されたことは知っているけど、詳細な行ごとの比較は出力しないで!」と指示できます。

.gitattributes の設定#

ステップ 1: プロジェクトのルートディレクトリに .gitattributes ファイルを作成または開きます。

ステップ 2: ファイルに次の行を追加します。

.gitattributes
*.lock -diff
text

または、特定のファイル名を指定したい場合は、次のように記述します。

.gitattributes
package-lock.json -diff
bun.lockb -diff
bun.lock -diff
composer.lock -diff
text

ステップ 3: ファイルを保存します。-diff 属性は、これらのファイルが変更されたときに Git が差分を生成しないように指示します。

[!TIP] git status を実行するとロックファイルは「変更済み (modified)」として表示されますが、git diff では詳細な内容が隠されます。

コマンドラインで直接隠す#

.gitattributes を変更したくない場合は、git diff コマンドで直接ファイルを除外できます。

Terminal
git diff -- . ':(exclude)*.lock'
bash

この長いコマンドを何度も入力しなくて済むように、~/.gitconfig ファイルに短いエイリアスを作成できます。

~/.gitconfig
[alias]
  d = diff -- . ':(exclude)*.lock'
ini

これで、git d と入力するだけで、ロックファイルのノイズなしに変更を確認できるようになります!

参考資料#