[実践] 番外編:KLiPでNullPointerExceptionが不自然に使われている場所を探してみる - krugle-jp/Krugle-Library GitHub Wiki
— KLiP の検索コンテキスト + AI 解析を組み合わせる —
前回はKrugle Searchで類似コード横断検索ということで、NullPointerException の実装状況を Krugle Search で横断調査する流れを見てきました。
今回は少し番外編です。
テーマは次の通りです。
null 以外の条件に対して NullPointerException が使われている場所を探す
実務上、そこまで頻繁に必要になるケースではないかもしれません。
ただ、もし必要になった場合、こういう調査は最終的には人の目で確認する工程が必要になります。
とはいえ、せっかくなので AI の力も使ってみる というアプローチは十分ありです。
そこで今回は、KLiP を使って試してみました。
やりたいこと
今回やりたいのは、単なる NullPointerException の検索ではありません。
単純な検索であれば、
-
throw new NullPointerException
-
functioncall:NullPointerException
のような形で候補を集めることはできます。
ただし今回の目的はもう一歩先です。
その中から、「null チェック以外の条件」で NullPointerException が使われている箇所だけを見つけたい
この時点で、単なる検索だけでは少し厳しくなります。
なぜなら見たいのは文字列一致ではなく、「その例外がどういう条件文の中で使われているか」 という意味的な観点だからです。
こういうときに、検索で候補を集めて、その結果を AI に読ませて解析させる という流れが効いてきます。
今回使うのは KLiP
今回は VS Code 上の KLiP を使います。
まず、対象リポジトリを VS Code 上で開きます。
そのうえで、KLiP のチャットウインドウを使って、検索と AI 解析を組み合わせます。
最初の操作: 検索コンテキストを呼び出す
KLiP のチャットウインドウで、まず @ を入力します。 すると、コンテキストプロバイダーのメニューが表示されます。
その中から 検索 を選択して Enter を押します。
この操作で、「AI に何を参照させるか」のうち、検索結果をコンテキストとして渡す準備ができます。
次に検索語を入れる
続いて表示される検索窓に、次のキーワードを入力します。
NullPointerException
そして Enter を押します。
これで、コードベース内の NullPointerException 使用箇所が検索され、検索結果が KLiP の AI コンテキストに取り込まれます。
この段階では、まだただの検索結果です。
本番はここからです。
AI に解析を依頼する
続けて、プロンプトを入力します。
null以外の条件でこの例外クラスが使われている箇所を教えて
これで何が起きるかというと、
-
コードベース内の NullPointerException 使用箇所が検索される
-
その検索結果が AI にコンテキストとして渡される
-
そのコンテキストに対して、プロンプトで指定した観点で解析が行われる
という流れになります。
つまり、検索で候補を集めて、AI にその候補群を読ませて条件付きで絞り込ませる、ということです。
検索結果そのものも確認できる
なお、AI が参照した検索結果自体も確認できます。
チャット欄の下に表示される 1個のコンテキスト項目を使用 を開き、
その中の Search results をクリックすると、AI がどの検索結果を見ていたかを参照できます。
(長いので以下省略)
ここは大事です。
AI に丸投げするのではなく、AI が何を材料に答えたのかを人が確認できるからです。
この「検索結果を人も見られる」という構造は、実務で使ううえでかなり重要です。
どういう価値があるのか
この流れの価値は、単に「AI が答えてくれる」ことではありません。
本質は、検索と AI を役割分担させていることです。
検索がやること
-
候補を広く集める
-
コードベース全体から関連箇所を抽出する
-
AI に渡すための材料を揃える
AI がやること
-
検索結果を読んで意味的に仕分ける
-
今回のような「null 以外の条件かどうか」を判定する
-
人が見たい観点で要約・整理する
つまり、
検索だけでは意味判定が弱い
AI だけでは材料が足りない
両方を組み合わせることで初めて実用的になる
ということです。
実際に得られたもの
この操作によって、NullPointerException の利用箇所のうち、
-
本当に null チェックに基づくもの
-
やや特殊?不自然?な条件で使われているもの
-
条件の意味と例外クラスの意味がズレているように見えるもの
といった観点で、AI から整理された回答を得ることができました。
少し説教じみたコメントも含まれていましたが、それも含めて、
「単に検索結果を羅列するだけでは得にくい視点」 が得られたのは面白いところです。
もちろん、これはあくまで AI の解釈なので、最終判断は人が行うべきです。
ただし、確認すべき候補を絞る補助としてはかなり有効です。
こういう使い方が向いている
このやり方は、今回の NullPointerException に限らず、いろいろ応用できます。
たとえば次のような問いです。
-
IllegalArgumentException が妥当でない場面で使われていないか
-
ログ出力だけで握りつぶしている例外処理がないか
-
権限チェックが抜けている実装パターンはないか
-
標準化ルールに反した書き方がどこにあるか
-
類似コードのうち、危ないものだけを拾えないか
いずれも、まず検索で候補を集めて、その後 AI に観点付きで解析させるという形が相性の良いパターンです。
ポイントは「AI にいきなり全部考えさせない」こと
ここで重要なのは、いきなり AI に
「コードベース全体を見て問題点を探して」
と投げるのではなく、
-
検索で対象を絞る
-
その結果をコンテキストとして渡す
-
観点を明示して解析させる
という順番を踏むことです。
この流れにすると、AI の答えがかなり実務的になります。
まとめ
今回の番外編では、KLiP を使って
-
NullPointerException を検索し
-
その検索結果を AI に読ませ
-
null 以外の条件で使われている箇所を解析させる
という流れを試しました。
ポイントは、検索と AI を組み合わせることです。
このアプローチの価値
-
検索で候補を集められる
-
AI が意味的な仕分けをしてくれる
-
人はその結果を確認しながら判断できる
-
「大量候補の中から、観点付きで絞り込む」用途に強い
これはあくまで一例ですが、
検索と AI を組み合わせることで、単なるキーワード探索を一段上の調査作業に進化させることができる と言えます。
ぜひこの考え方も応用して、日々のコード調査や標準化確認に役立ててみてください。