はじめに
現在勤務している開発現場で GitHub Copilotをたっぷり使用させてもらっています。
特に不具合解析にGitHub Copilotを使用しています。
なんとなくですが、いい使い方(自分に合った使い方)が確立されてきたので、備忘録としてまとめてみました。
というわけで
本記事では、私が普段行っている「バグ解析の流れ」についてまとめています。
バグ解析の基本フロー
基本は「いきなり直させず、思考と調査の壁打ち相手にする」というスタンスでAIを使用しています。
バグ解析の基本フローは、大まかに以下の4つに分類しています。
- 調査範囲の絞り込み
- 仮説検証
- 修正、動作確認
- コミット・プルリクエスト作成
もう少し細かくすると、具体的に以下のような手順で解析を行うことが多いです。
- バグ再現手順・状況を伝える
- 考えられる可能性(仮説)を提案させる
- それぞれの可能性に対して切り分けを行う
- 最も可能性の高い原因に対して暫定実装
- 修正内容の効果確認(テスト・動作確認)
- 変更コードの精査
- コミット・プルリクエスト作成
各手順について具体的に
調査範囲の絞り込み
1. バグ再現手順・状況を伝える
バグ解析を開始する際に、まずは調査範囲の絞り込みを行っています。
そのために、以下の情報をAIに渡しています。
- 再現手順
- 期待する挙動 と 実際の挙動
workspaceにソースコード(Gitクローンしたディレクトリ)や仕様を入れておくと便利と教えていただいたので、それも実践しています。
Gitの履歴とかも参照してくれるので、正直なところかなり便利です。
バグ調査着手時に、当然自身でもバグ再現するのですが、この時のログを投げるとより円滑に調査できると思います。
仮説検証
2. 考えられる可能性(仮説)を提案させる
まずは、調査範囲の絞り込みで絞りこんだ調査範囲に関連するファイルや関数を提示しておきます。
そして、改めて以下2つの情報を伝え、原因として考えられる仮説を3~5つほど提示してもらいます。
- 再現手順
- 期待動作と実際の動作
複数の選択肢を提案してもらうことで、視野が狭くなりにくいと感じています。
また、バグ再現時に取得したログをCopilotに読ませ、関連機能のログだけを抜粋してもらうことも多いです。
いまのところ抜粋だけ任せていて、その後は目視で確認するようにしています。
3. それぞれの可能性に対して切り分けを行う
Copilotが出した仮説に対して、1つずつ検証を進めます。
基本的には、怪しいところにログを差し込み、バグ再現しログ取得を行っています。
そして、そのログをもとに原因の切り分けを行っています。
条件Aのときはバグ発生 / 条件Bのときもバグ発生 / 条件Cのときはバグ発生せず
👆のように、少しずつ条件を変化させて絞り込みを行う時もあります。
修正、動作確認
4. 最も可能性の高い原因に対して暫定実装
絞り込んだ原因に対して修正案を出させ、ローカル環境で動作確認を行います。
まずは「仮説通りの修正で事象が解決するか」の確認を最優先にしています。
ここで変な詮索をして、目的があいまいになってしまわないよう注意してます。
余計なことは考えず、仮説に対しての修正コードのみを入れるようにしています。
5. 修正内容の効果確認(テスト・動作確認)
実際に変更したコードを動かし、以下を確認します。
- バグは発生しないか?
- 関連機能への影響はないか?
6. 変更コードの精査
AIが書いてくれたコードを私自身でレビューするようにしています。
具体的には、以下を意識して精査しています。
- 変更スコープの局所化: 影響範囲を限定するため、可能な限り
if/caseなどの狭いスコープに収める - 既存関数の再利用: 余計な独自ロジックを増やさず、既存の仕組みを活用する
この手順で、不要なコード変更を防ぐと同時に、自分自身のコード理解を深めることも狙っています。
コミット・プルリクエスト作成
7. コミット・プルリクエスト作成
コミット・プルリクエスト作成は、AIで出力させたものを手動で書き直すようにしています。
この手順で、内容の理解や知識の定着を狙っています。
AIを使うことも効率化ですが、開発者自身の知識や第六感を鍛えることも効率化につながると考えています。
おわりに
バグ調査において、Copilotを使用することで壁打ちと調査の効率化を実現できると感じています。
基本的には、以下のような任せ方をすることが多いです。
- 仮説出し、仮実装など、調査の効率化はCopilotに任せる
- 採用するコードの最終判断や、チームメンバーへの説明は自身で行う
この役割分担によって、調査のスピードアップとコード品質を両立するという意識を持てていると感じています。
やってもらおうとすると他人ごとになってしまう気がしています。
記事作成からしばらく経って
この記事を書いてから、以前よりもAIをうまく活用するために考えるようになりました。
その中で、AIを活用するために甘え上手になることが大切なのだと感じるようになりました。
面倒事はお願いしつつ、自分のやりたいことを実現するという意味では甘えると共通していると感じています。