皆さん、こんにちは!日本のDevOps・インフラエンジニアです。
共同開発をしていると、コードの変更履歴を追うことは非常に重要ですよね。特に `git blame` コマンドは、特定のコード行を「いつ」「誰が」変更したのかを知るのに役立ちます。しかし、大規模なコードフォーマット変更(例えば、Prettierのようなコードフォーマッターを導入したときなど)があると、その変更が `git blame` の結果にノイズとして現れ、本来追いたいロジックの変更履歴が見えにくくなってしまうことがあります。
今回は、そんな悩みを解決してくれる `.git-blame-ignore-revs` という設定ファイルについて、初心者の方にも分かりやすく解説していきます!
`git blame` とは?
まず、`git blame` コマンドについて簡単に復習しましょう。
`git blame` は、ファイル内の各行について、その行を最後に変更したコミットのハッシュ、著者名、コミット日時を表示してくれるコマンドです。コードの意図を理解したり、バグの原因を特定したりする際に非常に役立ちます。
例えば、以下のようなコマンドを実行すると、`your_file.py` というファイルの内容と、各行の変更履歴が表示されます。
git blame your_file.py
大規模フォーマット変更の落とし穴
ところが、プロジェクトの途中でPrettierのようなコードフォーマッターを導入したり、既存のコードスタイルを大幅に変更したりするコミットが入ると、どうなるでしょうか?
それまで数年かけて行われてきた、機能追加やバグ修正といった「意味のある変更」の履歴が、一括フォーマットによる「見た目の変更」で埋め尽くされてしまうのです。本来探したいコードのロジック変更履歴が、フォーマット変更のノイズに隠れてしまい、非常に探しにくくなってしまいます。
`.git-blame-ignore-revs` の登場!
ここで登場するのが `.git-blame-ignore-revs` ファイルです。
このファイルに、`git blame` の対象から除外したいコミットのハッシュを記述しておくことで、`git blame` コマンドを実行した際に、それらのコミットによる変更を無視することができます。まるで、タイムマシンのように、フォーマット変更という「ノイズ」を過去に送り届けて、現在の `git blame` 結果をクリーンに保つことができるのです。
設定方法
`.git-blame-ignore-revs` ファイルの設定はとても簡単です。
1. ルートディレクトリにファイルを作成: プロジェクトのルートディレクトリ(`.git` フォルダがある場所)に `.git-blame-ignore-revs` という名前のファイルを作成します。
2. 除外したいコミットハッシュを記述: ファイル内に、`git blame` から除外したいコミットのハッシュを1行に1つずつ記述します。
例えば、大規模なフォーマット変更を行ったコミットのハッシュが `abcdef123456` と `789012fedcba` の2つだとすると、ファイルの内容は以下のようになります。
abcdef123456
789012fedcba
コミットハッシュは `git log` コマンドなどで確認できます。
git log –oneline
Git の設定
この `.git-blame-ignore-revs` ファイルを有効にするには、Git の設定が必要です。
以下のコマンドを実行して、Git にこのファイルを認識させます。
git config blame.ignoreRevFile .git-blame-ignore-revs
この設定は、リポジトリごとに適用されます。一度設定すれば、そのリポジトリで `git blame` を実行するたびに、`.git-blame-ignore-revs` ファイルに記述されたコミットが自動的に無視されるようになります。
サンプルプログラム(設定コマンド)
上記で説明した設定コマンドをまとめておきます。
1. プロジェクトのルートディレクトリに移動してください
cd /path/to/your/project
2. .git-blame-ignore-revs ファイルを作成し、除外したいコミットハッシュを記述します。
例: echo “abcdef123456” > .git-blame-ignore-revs
例: echo “789012fedcba” >> .git-blame-ignore-revs
(上記はファイルに追記する例ですが、実際にはエディタで作成・編集するのが一般的です)
3. Git にこのファイルを認識させる設定を行います
git config blame.ignoreRevFile .git-blame-ignore-revs
4. 設定が反映されているか確認するために、git blame を実行してみましょう
(※ 実際に除外したいコミットハッシュをファイルに記述してから実行してください)
git blame your_file.py
応用・注意点
- コミットハッシュの取得: 除外したいコミットのハッシュは、`git log –oneline` や `git log –grep=”大規模フォーマット変更”` のように、コミットメッセージで検索して探すこともできます。
- 複数人での開発: この設定はローカルの Git 設定に保存されます。チームメンバー全員が同じように `git blame` の結果を見たい場合は、各メンバーがこの設定を行う必要があります。あるいは、`.gitconfig` ファイル(ユーザーレベルの設定ファイル)ではなく、リポジトリ固有の設定ファイルである `.git/config` に `[blame]` セクションとして記述することで、リポジトリをクローンした際に自動的に設定されるようにすることも可能です。ただし、`.git-blame-ignore-revs` ファイル自体はリポジトリに含める必要があります。
- 解除方法: 設定を解除したい場合は、以下のコマンドを実行します。
git config –unset blame.ignoreRevFile
- 時系列の維持: `.git-blame-ignore-revs` を使うと、`git blame` の結果はクリーンになりますが、これはあくまで `git blame` コマンドの表示上の話です。実際のコミット履歴はそのまま残っていますので、必要に応じて `git log` などで確認することは可能です。
`.git-blame-ignore-revs` を活用することで、コードの履歴をより効率的に、そして正確に追跡できるようになります。大規模なコード変更があった後でも、チーム開発の質を維持するために、ぜひ活用してみてください!

コメント