QAエンジニアをやっていると、不具合の根本原因となっているコードを探すことがちょいちょいあります。
エラーログから当たりをつけてすぐに見つかることもあれば、ロジック上の問題の場合、愚直にコードを追っていってようやく見つかるという場合もあります。
そんな作業でもすごく役に立っているのがVSCodeの拡張機能 GitLens です。
どのようにログを追えばよいか、今回は radix-uiのリポジトリを仮に使って説明していきます。
ログを見て直接原因を探る
まずはログを見ます。Railsの場合は logs/error.log
あたりにあるか、あるいは自社のログ基盤でErrorで検索すれば引っかかると思います。NodeやNext.jsだとSentryあたりでしょうか。ここは環境によりけりだと思います。
ログにはエラーがおきた直接的な原因のコード行が表示されているはずなので、そこのコードを参照します。
例えば以下の41行目が問題の箇所だとします。
見えづらいかもですがカーソルをフォーカスすると、コードの隣にコミットした日付とコミットしたユーザー名画表示されているのがわかるかと思います。
ここの処理自体は「3 years ago」なのでおそらく根本原因ではないことがわかりますね。
ソースコードから処理の流れをひたすら追う
次に直接の問題となった処理の含まれるメソッドあるいはクラスの名前で検索します。
先程の例だと DialogTriggerProps
が怪しいので単語をダブルクリックすると、色が変わります。
すぐ上にあるのでハイライトする必要もないのですね。また、Macなら Cmdを押しながら単語をクリック(タップ)すると定義ジャンプすることができま。こちらも活用すると良いでしょう。
gitlensを使ってコードの変更を見る
定義ジャンプ、コードジャンプ、検索でようやく 2days ago なCommitを見つけたとします。最近の変更なので、おそらくこの修正が影響しているでしょう。
コードの右側に表示されているGitのコミットメッセージにカーソルを合わせると以下のような画面が出てきます。
さらに詳しくコミット内容を見たい場合、地球儀マークにカーソルを合わせます。(Open Commit on Github」と表示される)そしてクリックします。
Githubで当該コードの修正を含むコミットを閲覧することができます。
大抵の場合はこのコミットが根本原因なので、コミットメッセージと他のコード変更をみて内容を把握します。
できない場合は実装したエンジニアのユーザー名がわかっているので、直接確認しにいくと良いでしょう。
GithubのPull Requestを確認する
コミットだけだとまれに「fix」とか「修正」だけのコミットの場合もあり、結局何を修正したのかわからないということもあります。そういうときは当該コミットが含まれているPull Requestを参照します。
この作業はGithub側で実施します。
開いたコミットのコミット番号をコピーします。以下の場合だと 06de2d4 です。
これをGithub右上の検索欄に貼り付けて検索します。
そうすると左側に「Pull requests」と表示されるのでこれをクリックします。
これで該当するPull Requestをあぶり出すことができます。
まとめ
不具合調査は時に地道で根気が必要な作業ですが、適切なツールを使うことで効率を大幅に向上させることができます。GitLensは、コードの変更履歴や開発の意図を把握する上で非常に便利な拡張機能です。
今後の調査作業でも引き続き活用して、より迅速かつ正確に問題を解決していきたいと思います。