AIへの指示の出し方:プロンプト入門
ChatGPTによるコードレビューを効率化するプロンプト
書いたコードを貼って「レビューしてください」と頼むと、返ってくるのは変数名をもう少し分かりやすくしましょう、コメントを足しましょう、といった話です。間違ってはいませんが、知りたいのはそこではありません。
AI が表面的な指摘で止まるのは、何を見てほしいのかを伝えていないからです。人間のレビュアーなら、この関数が決済に関わると知っているので、勝手に金額の丸め方を疑います。AI はその前提を持っていません。
観点を先に渡すと、返ってくる場所が変わる
見てほしいところを、コードより前に書きます。
プレーンテキスト
あなたはシニアエンジニアです。以下の Node.js のコードを、次の観点だけでレビューしてください。
# 見てほしい観点
1. 外部からの入力をそのまま SQL に渡している箇所
2. 例外が起きたときに処理が途中で止まる箇所
3. 同じ処理が 2 箇所以上に書かれている箇所
# 返し方
観点ごとに、該当する行、なぜ問題か、直し方の順で書いてください。
該当が無い観点は「該当なし」とだけ書いてください。
(ここにコードを貼る)観点を書いた瞬間に、AI は探す場所を絞ります。「該当なし」と書かせる一行も効きます。これが無いと、指摘を出すことが目的になり、無理やり何かを見つけようとします。
観点は毎回ゼロから考える必要はありません。チームのレビューで実際に指摘されたことを 3 つ書き出せば、それがそのまま観点になります。過去の指摘は、そのチームで壊れやすい場所の記録だからです。人に見てもらう前に同じ観点を AI に通しておけば、レビューで同じ話を繰り返さずに済みます。
観点は 3 つまでにする
思いつく観点を 10 個並べたくなりますが、増やすほど一つあたりが浅くなります。全部を平均的に見た結果、どれも表面をなでただけの指摘が 10 個返ってきます。
観点と一緒に、そのコードが何に使われるかを一行だけ添えると精度が上がります。「この関数は決済の金額計算に使われます」と書いてあれば、AI は丸め方や桁あふれを自分から疑い始めます。人間のレビュアーが勝手に持っている前提を、ここで渡しているわけです。
3 つに絞り、目的ごとに差し替えてください。外部に公開する処理なら入力の検証と権限まわり、大量のデータを回す処理なら計算量と無駄な繰り返し、チームで長く持つコードなら名前と関数の分割です。1 回で全部を見ようとせず、目的を変えて 2 回投げるほうが、結局は深い指摘が集まります。
指摘が正しいとは限らない
AI は自信のある口調で、実際には存在しない問題を指摘してきます。「この書き方は非推奨です」と言われたら、その場で公式のドキュメントを引いてください。指摘を鵜呑みにして直したせいで壊れる、というのが最も痛い失敗です。
一度に貼るのは、1 つの関数か 1 つのファイルまでにします。長いコードを貼るほど、後半への注意が薄くなり、指摘が冒頭に偏ります。
そして貼る前に、そのコードを外部のサービスに渡してよいかを確かめてください。接続情報や顧客データが混ざっていないか、会社の決まりで許されているか。この確認だけは、毎回の習慣にしてください。
復習ミニクイズ
ChatGPTに質の高いコードレビューを依頼するために、プロンプトに含めるべき要素を最もよく満たしているものはどれですか?