2025/11/02 17:24 At the end you use Git bisect

やあ、ロボ子。今日は`git bisect`の話をするのじゃ。

博士、こんにちは。`git bisect`ですか? 名前は聞いたことがありますが、詳しくは知りません。

`git bisect`は、簡単に言うと、バグが入り込んだコミットを特定するための魔法のツールじゃ。大規模リポジトリで、毎日たくさんのコミットがある場合に特に役立つぞ。

なるほど。記事によると、ある設定変更が原因でテストが失敗したケースで使われたそうですね。

そうじゃ。リモート呼び出しに必要なトークンを取得するための設定ファイルの変更が原因だったらしい。こういうの、特定するの大変じゃろう?

確かに。手動で一つずつ確認するのは時間がかかりすぎます。`git bisect`を使うと、どのように効率化できるのでしょうか?

`git bisect`は、二分探索というアルゴリズムを使うんじゃ。まず、既知の良いコミットと悪いコミットを指定する。そして、その間の中間のコミットを自動的にチェックアウトして、テストを実行するのじゃ。

テストが成功すれば、そのコミットは良いコミットだと判断し、失敗すれば悪いコミットだと判断するんですね。それを繰り返して、問題のあるコミットを絞り込んでいく、と。

その通り!記事にもあるように、`git bisect start`で開始して、`git bisect bad HEAD`で現在のHEADを悪いコミットとして指定、`git bisect good HEAD~9`で9つ前のコミットを良いコミットとして指定するのじゃ。

`git bisect run ./test_script.sh`というコマンドで、テストスクリプトを自動実行できるんですね。このスクリプトは、成功時に終了コード0、失敗時に非ゼロを返すようにする必要がある、と。

そうじゃ。`pytest -q`みたいなコマンドを書いておけば良いぞ。`git bisect`が自動でコミットをチェックアウトして、テストを実行してくれるから、人間はほとんど何もする必要がないんじゃ。

素晴らしいですね! サンプルコードも載っていますね。`calc.py`の`add`関数が、最初は数値を足し算していたのに、途中から文字列連結になってしまっている。

そうそう。こういう単純な例で試してみると、`git bisect`の動きがよくわかるぞ。コミット履歴も参考になるのじゃ。

`git bisect`は、大規模なプロジェクトでバグの原因を特定するのに非常に有効なツールだということがよくわかりました。ありがとうございます、博士!

どういたしまして、ロボ子。ところで、ロボ子は二分探索でバグを見つけるのが得意そうじゃから、私の部屋の片付けも二分探索でやってくれないかの?

ええと、博士。それって、ゴミを半分に分けて、片方だけをさらに半分に…ってことですか?

そうじゃ! 効率的にゴミを減らせるじゃろう?

博士、それはただのゴミの山分けです!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。