コードの変更を確認するために git diff を実行したとき、package-lock.json や bun.lock の膨大な変更行に圧倒されたことはありませんか?それは、机の上にある特定の本を探したいのに、山積みのメモ用紙に埋もれているようなものです。
この記事では、変更を比較する際に Git にこれらのファイルの詳細な内容を「無視」させる方法を紹介します!
ロックファイルの問題点#
npm、yarn、pnpm、bun などのパッケージマネージャーを使用する場合、これらは「ロックファイル」を生成します。このファイルは、プロジェクトが依存するすべてのライブラリのバージョンを正確に記録します。
[!NOTE] ロックファイルの目的は、プロジェクトをクローンした誰もが全く同じ依存関係をインストールできるようにし、「私の環境では動くのに」という典型的な問題を未然に防ぐことです。
問題は、1 つのライブラリをインストールまたは更新しただけでも、ロックファイルが数百、数千行変更される可能性があることです。git diff を実行すると、これらの変更がソースコードの実際の変更をかき消してしまい、コードレビューが困難になります。
解決策:.gitattributes の使用#
ロックファイルの内容を隠す最も簡単で効果的な方法は、.gitattributes を使用することです。この設定により、Git に「このファイルが変更されたことは知っているけど、詳細な行ごとの比較は出力しないで!」と指示できます。
.gitattributes の設定#
ステップ 1: プロジェクトのルートディレクトリに .gitattributes ファイルを作成または開きます。
ステップ 2: ファイルに次の行を追加します。
*.lock -difftextまたは、特定のファイル名を指定したい場合は、次のように記述します。
package-lock.json -diff
bun.lockb -diff
bun.lock -diff
composer.lock -difftextステップ 3: ファイルを保存します。-diff 属性は、これらのファイルが変更されたときに Git が差分を生成しないように指示します。
[!TIP]
git statusを実行するとロックファイルは「変更済み (modified)」として表示されますが、git diffでは詳細な内容が隠されます。
コマンドラインで直接隠す#
.gitattributes を変更したくない場合は、git diff コマンドで直接ファイルを除外できます。
git diff -- . ':(exclude)*.lock'bashこの長いコマンドを何度も入力しなくて済むように、~/.gitconfig ファイルに短いエイリアスを作成できます。
[alias]
d = diff -- . ':(exclude)*.lock'iniこれで、git d と入力するだけで、ロックファイルのノイズなしに変更を確認できるようになります!