Git blameの使い方を初心者向けに解説【変更履歴を行単位で追跡】

Git blameの基本的な使い方と実践的な活用方法を初心者向けに解説します。誰がいつどの行を変更したかを追跡できるblameコマンドは、バグ調査やコードレビューで欠かせないツールです。

git blameとは?

git blameは、ファイルの各行が「誰によって」「いつ」「どのコミットで」変更されたかを表示するコマンドです。コードの変更履歴を行単位で追跡できるため、バグの原因調査やコードの理解に非常に役立ちます。

「blame」は英語で「責める」という意味ですが、このコマンドは決して誰かを責めるためのものではありません。むしろ、コードの経緯を理解し、適切な人に質問するための「調査ツール」として使います。

git blameの基本的な使い方

ファイル全体の変更履歴を確認する

最も基本的な使い方は、ファイルパスを指定して実行することです:

git blame ファイル名

実行例:

git blame src/app.ts

出力例:

a1b2c3d4 (山田太郎 2025-12-01 10:30:45 +0900  1) import express from 'express';
e5f6g7h8 (鈴木花子 2025-12-15 14:20:30 +0900  2) import cors from 'cors';
a1b2c3d4 (山田太郎 2025-12-01 10:30:45 +0900  3)
i9j0k1l2 (佐藤次郎 2026-01-03 09:15:00 +0900  4) const app = express();
e5f6g7h8 (鈴木花子 2025-12-15 14:20:30 +0900  5) app.use(cors());

各行には以下の情報が含まれています:

項目説明
コミットハッシュ変更を行ったコミットの短縮IDa1b2c3d4
作成者名変更を行った人の名前山田太郎
日時変更が行われた日時2025-12-01 10:30:45
行番号ファイル内での行番号1
コード内容実際のコードの内容import express...

特定の行範囲だけを確認する

ファイルが大きい場合、特定の行範囲だけを確認したいことがあります。-Lオプションで行範囲を指定できます:

# 10行目から20行目までを表示
git blame -L 10,20 src/app.ts

# 10行目から15行分を表示
git blame -L 10,+15 src/app.ts

メールアドレスを表示する

作成者の情報としてメールアドレスを表示したい場合は、-eオプションを使います:

git blame -e src/app.ts

出力例:

a1b2c3d4 (<yamada@example.com> 2025-12-01 10:30:45 +0900 1) import express from 'express';

便利なオプション一覧

git blameには多くの便利なオプションがあります。よく使うものを紹介します。

オプション説明使用例
-L 開始,終了行範囲を指定git blame -L 10,20 file.ts
-eメールアドレスを表示git blame -e file.ts
-w空白の変更を無視git blame -w file.ts
-M同一ファイル内の移動を検出git blame -M file.ts
-C他ファイルからのコピーを検出git blame -C file.ts
--date=short日付のみ表示(時刻なし)git blame --date=short file.ts
-s作成者と日時を省略git blame -s file.ts

空白の変更を無視する(-wオプション)

インデントの修正やフォーマット変更だけを行ったコミットは、コードの本質的な変更ではないことが多いです。-wオプションを使うと、空白の変更を無視して、実質的な変更者を特定できます:

git blame -w src/app.ts

コードの移動・コピーを追跡する(-M、-Cオプション)

リファクタリングでコードを別の場所に移動した場合、通常のblameでは移動先のコミットが表示されます。しかし、-M-Cオプションを使うと、元々のコードを書いた人を追跡できます:

# ファイル内でのコード移動を追跡
git blame -M src/app.ts

# 他のファイルからのコピーも追跡
git blame -C src/app.ts

# より積極的にコピー元を探す
git blame -C -C src/app.ts

実践的な活用シーン

シーン1: バグの原因を調査する

バグが発見されたとき、該当箇所がいつ、誰によって変更されたかを調べることで、問題の原因を特定しやすくなります。

# バグがある行を特定したら、その周辺をblameで確認
git blame -L 45,55 src/utils/validation.ts

見つかったコミットの詳細を確認したい場合は、git showを使います:

git show a1b2c3d4

これで、そのコミットで行われた全ての変更と、コミットメッセージを確認できます。

シーン2: コードの意図を理解する

「なぜこのコードがこうなっているのか」を理解したいとき、blameで変更者とコミットを特定し、コミットメッセージから意図を読み取ることができます。

# 気になるコードの変更履歴を確認
git blame -L 100,110 src/services/auth.ts

# 関連するコミットメッセージを確認
git log --oneline a1b2c3d4

シーン3: コードレビューの準備

プルリクエストをレビューする際、変更箇所の背景を理解するためにblameを活用できます。

# 変更されたファイルの履歴を確認
git blame src/components/Button.tsx

初心者が混乱しやすいポイント

「blame」は責めることではない

「blame」という言葉から、誰かのミスを追及するツールと誤解されがちですが、実際は違います。git blameの目的は以下のとおりです:

  • コードの経緯を理解する
  • 質問すべき適切な人を見つける
  • バグの原因となった変更を特定する
  • リファクタリングの影響範囲を把握する

コードを書いた人を非難するためではなく、チームでのコミュニケーションを円滑にするためのツールとして使いましょう。

blameとlogの使い分け

git blameとgit logは似ているようで、用途が異なります:

コマンド用途出力内容
git blame特定の行の変更者を調べる行ごとの作成者・日時・コミット
git logファイルの変更履歴を見るコミット一覧(時系列)
git showコミットの詳細を見る差分とコミットメッセージ

リネーム・移動されたファイルの追跡

ファイルがリネームや移動された場合、通常のblameでは移動後の履歴しか表示されません。移動前の履歴も追跡したい場合は、-Cオプションを使うか、git log --followでファイル履歴を確認してから該当コミットを調べます。

# ファイルのリネーム履歴を含めて確認
git log --follow --oneline src/newName.ts

# コピー元も追跡してblame
git blame -C -C src/newName.ts

マージコミットの表示

マージコミットが表示された場合、それは「その行がマージで取り込まれた」ことを意味します。実際にコードを書いたコミットを知りたい場合は、マージ元のブランチを確認するか、git logで詳しく調べましょう。

GUIツールでのblame確認

コマンドラインでのblameに慣れない場合、GUIツールを使うとより直感的に確認できます。

多くのGitクライアントやIDEには、blameを視覚的に表示する機能があります:

  • VS Code: GitLens拡張機能で、エディタ上に直接blame情報を表示
  • GitHub: ファイル表示画面で「Blame」ボタンをクリック
  • GitKraken / Sourcetree: ファイルを右クリックして「Blame」を選択

特にGitHubのblame表示は、コミットへのリンクが簡単にたどれるため便利です。

よくある問題と対策

問題1: フォーマット変更で全行が同じ人になる

コードフォーマッタを適用すると、多くの行が変更されたことになり、blameで元の作成者が分からなくなることがあります。

対策: -wオプションで空白変更を無視するか、.git-blame-ignore-revsファイルを設定して特定のコミットを除外します。

# .git-blame-ignore-revsファイルを作成
echo "# フォーマット適用コミット" > .git-blame-ignore-revs
echo "abc123def456..." >> .git-blame-ignore-revs

# 設定を有効化
git config blame.ignoreRevsFile .git-blame-ignore-revs

問題2: 出力が多すぎて見づらい

大きなファイルでblameを実行すると、出力が多すぎて見づらいことがあります。

対策: -Lオプションで行範囲を絞るか、lessコマンドと組み合わせてページング表示します。

git blame src/largeFile.ts | less

問題3: 古いコミットが表示されない

リポジトリをshallow clone(履歴を制限してclone)した場合、古いコミットの情報が取得できません。

対策: 完全な履歴を取得します。

git fetch --unshallow

まとめ

git blameは、コードの変更履歴を行単位で追跡できる強力なツールです。

覚えておきたいポイント:

  • git blame ファイル名で各行の作成者・日時・コミットを確認できる
  • -Lオプションで特定の行範囲に絞れる
  • -wオプションで空白変更を無視できる
  • -M-Cオプションでコードの移動・コピーを追跡できる
  • 「責める」ためではなく、「調査・理解する」ためのツール

バグ調査やコードレビューの際にblameを活用することで、効率的に問題の原因を特定し、適切な人に質問できるようになります。ぜひ日常の開発で活用してみてください。

編集部

編集部