1. ホーム
  2. 記事一覧
  3. コードを書いたのが誰かわかる超便利コマンド「git blame」の使い方を解説

2024.05.08

コードを書いたのが誰かわかる超便利コマンド「git blame」の使い方を解説

アプリ開発において「Git」は必須スキルとなってきます。Gitの基本コマンドは知っているけど他のコマンドはよく知らない、Gitコマンドをもっと知って便利に使いたい!と思っている方、また コードの変更を誰が行ったのか簡単に確認したい! という方向けに、この記事では「git blame」を解説します。

GitについてはエンベーダーのLinux応用コースで詳しく学ぶことができます。

https://envader.plus/course/5/scenario/1055

様々なGitコマンドを習得し、Gitマスターを目指しましょう!

「git blame」でできること

  • ファイルの各行が最後に変更されたコミットとその作者、日時を表示
  • コードの特定の部分がいつ、誰によって変更されたかを追跡
  • バグの原因となった変更を特定し、責任者を見つける

「git blame」コマンドの開発現場での活用例

  • バグの原因究明

    アプリケーションにバグが発生した際、git blameを使ってバグのある行がいつ、誰によって 変更されたかを特定します。また、見つけたコミットIDの詳細情報をgit show コマンドを用いて表示することにより、バグの原因となった変更を見つけ出し、修正に役立てることができます。(「git show」コマンドについては下記ページをご覧ください。)

    https://envader.plus/article/369

  • コードレビューでの活用

    コードレビューの際、レビュアーがgit blameを使ってコードの各部分の変更履歴を確認します。これにより、コードの意図や背景を理解し、的確なフィードバックを行うことができます。

  • リファクタリングの準備

    リファクタリングを行う前に、git blameを使ってコードの各部分がいつ、どのように変更されてきたかを調査します。これにより、リファクタリングによる影響範囲を把握し、適切な方針を立てることができます。

「blame」という単語は英語で「非難する」や「〜のせいにする」といったネガティブな意味合いがありますが、実際にはむしろコードの変更履歴を知ることでチームメンバーへの理解を深め、円滑なコミュニケーションにつなげていくことができるコマンドです。git blameを味方につけて、ぜひより良い開発チームを目指してください!

「git blame」の使い方

基本操作

指定したファイルの各行が最後に変更されたコミットとその作者や日時を表示します。

git blame <ファイル名>

コマンド実行例

例としてsrc/App.jsファイルのgit blameを実行した結果

git blame src/App.js

0e33522f (Taro Yamada 2024-04-15 14:32:10 +0900 1) import React from 'react';
0e33522f (Taro Yamada 2024-04-15 14:32:10 +0900 2) import { NavigationContainer } from '@react-navigation/native';
0e33522f (Taro Yamada 2024-04-15 14:32:10 +0900 3) import { createNativeStackNavigator } from '@react-navigation/native-stack';
c1a8e2b0 (Risa 2024-05-01 09:15:45 +0900 4) import HomeScreen from './src/screens/HomeScreen';
c1a8e2b0 (Risa 2024-05-01 09:15:45 +0900 5) import DetailScreen from './src/screens/DetailScreen';
...

出力内容の詳細

  • 0e33522f
    • コミットのハッシュ値の一部(先頭8文字)を表します
  • (Taro Yamada 2024-04-15 14:32:10 +0900
    • コミット作者の名前、コミット日時、タイムゾーンを表します
  • 1), 2) ...
    • ファイル内の行番号を表します

「git blame」のオプション

git blameにはいくつかのオプションがありますが、今回は以下の3つを紹介します。

  • -L
  • --since / --until
  • --ignore-rev

-L

指定した行番号の範囲のみを表示します。特定の行や行の範囲に絞ってblameの結果を確認したい場合に便利です。

Copy codegit blame -L 10,14 src/App.js
c1a8e2b0 (Risa 2024-05-03 09:15:45 +0900 10)   return (
c1a8e2b0 (Risa 2024-05-03 09:15:45 +0900 11)     <NavigationContainer>
c1a8e2b0 (Risa 2024-05-03 09:15:45 +0900 12)       <Stack.Navigator>
c1a8e2b0 (Risa 2024-05-03 09:15:45 +0900 13)         <Stack.Screen name="Home" component={HomeScreen} />
c1a8e2b0 (Risa 2024-05-03 09:15:45 +0900 14)         <Stack.Screen name="Detail" component={DetailScreen} />

since=”<start_date>” —-until=”<end_date>”

指定した期間の範囲で表示します。<start_date> / <end_date> に入る文字列は、こちらの記事を参考にしてください。

git blame --since="3 weeks ago" --until="1 week ago" example.py

--ignore-rev

指定したコミットをblameの対象から除外します。-rev は「revision」の略です。

(リビジョンとはコミットによって定義されているそれぞれの状態のことを指す言葉で、コミットIDと呼んでいるものが示すソースコードの状態、またその別名と考えていただければと思います。)

git blame --ignore-rev <コミットID> example.go

※ このオプションで除外するコミットとして指定しても、その行の変更分が唯一そのコミットのみであれば表示されます。

また、git config を利用することで常にファイルに記載したコミットを除外することができます。(「git config」コマンドについては下記ページをご覧ください。)

https://envader.plus/article/370

まず、任意の場所(通常はプロジェクトのルート)にファイルを作成してその中にコミットIDを記載します。複数ある場合は行ごとに1つのコミットIDを記載してください。

# ドキュメントとレイアウトの変更 機能には影響しないため、blameの結果からは除外する
590b6c1d8e7f4g5h6i3j2k1l0m9n8o7

# リファクタリングのコミット 前後でコードの動作は変わらないため、blameの結果を簡潔にするために除外する
p1q2r3s4t5u6v7w8x9y0z1a2b3c4d5

ファイルを作成したら、git config コマンドを実施します。

git config blame.ignoreRevsFile <ファイル名(階層が異なる場合はそのパスを含む)>

これで、毎回オプションを指定せずとも除外できるようになります。

どのファイルに設定を記載したか確認する場合や、設定を削除する際は以下のコマンドで行えます。

# 指定しているファイルの確認
git config --get blame.ignoreRevsFile
# 設定を削除
git config --unset blame.ignoreRevsFile

Tips

  • ファイルに記載するコミットIDは省略できません。
  • コミットIDの上の行に、先頭に#をつけて除外する理由を書いたコメントを記載できます。
  • ファイル名は自由ですが、「.git-blame-ignore-revs」や「.gitblame-ignore」のような名前がわかりやすく一般的です。

まとめ

この記事ではGitコマンドの中のgit blameについて学びました。git blameは、ファイルの各行の最終変更コミットと作者を表示し、コードの変更履歴を追跡するのに役立ちます。バグの原因究明やコードレビューなど、開発現場で活用できるシーンは多くあります。また、オプションを使いこなすことで、より効率的にgit blameを活用できるようになるでしょう。この記事を参照しながら実際にコマンドを何度も実行して、ぜひ使いこなせるようになってください!

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事