プログラマーのためのプロンプトエンジニアリング・プレイブック
(addyo.substack.com)- AIコーディング支援ツールはプロジェクトの意図を自力で把握できないため、開発者が 文脈・目標・例 をどれだけ適切に与えるかで結果の品質が大きく変わる
- デバッグではコードとエラーだけを投げるのではなく、期待する動作、実際の動作、実行環境をあわせて示し、行ごとの追跡 や最小再現例で問題の範囲を絞り込むべき
- リファクタリングと最適化では「もっと良く」ではなく、重複排除、並列処理、エラー処理の維持、バージョン制約といった 成功基準 を明確にする必要がある
- 新機能の実装は全体を一度に任せるより、計画、骨組み、状態管理、API連携、エッジケースを 小さな段階 に分けて確認しながら拡張する方法が安全
- 曖昧な質問、過剰な要求、質問のないコードの丸投げ、不明確な参照は結果を不安定にし、AIは一回きりの生成器より 反復的な対話型ペアプログラマー として扱うべき
AIコーディング支援ツールをうまく使うための基本原則
- AIコーディング支援ツールは関数の自動補完、バグ修正の提案、モジュールやMVPの生成まで支援できるが、プロジェクトの具体的な意図はユーザーが提供する情報に依存する
- 良いプロンプトはAIを「言葉どおりに受け取る協業相手」のように扱い、望む結果と形式を明確に案内する
- 基本原則は次のとおり
- 豊富な文脈を与える: 言語、フレームワーク、ライブラリ、関連する関数やコード断片、正確なエラーメッセージ、期待する動作を含める
- 目標を具体化する: 「なぜ動かない?」より「このJavaScript関数が期待値ではなくundefinedを返す理由と修正方法」のように質問を絞る
- 複雑な作業を分解する: 大きな機能を一度に依頼せず、Reactコンポーネントの骨組み生成、状態管理の追加、API呼び出しの統合のように順番に進める
- 入出力例を示す:
[3,1,4]の入力が[1,3,4]を返すべきだというような例は、要件の曖昧さを減らす - 役割を指定する: 「senior React developer」「JavaScript performance expert」「code reviewer」のように役割を与えると、回答の深さやスタイルを調整できる
- 反復して修正する: 最初の回答が合わなければ、再帰の代わりに反復文を使う、変数名を改善する、コメントを追加する、といった追加入力で方向を調整する
- コードの明確さを保つ: 意味のある関数名と変数名、一貫したフォーマット、コメントやdocstringは、AIがコードの意図を把握する手がかりになる
デバッグプロンプトのパターン
- デバッグ依頼には、そのコードが何をすべきか、実際には何が問題なのか、どのようなエラーが発生しているのかをあわせて含める必要がある
- 良いデバッグプロンプトには通常、次の情報が含まれる
- 使用言語と実行環境
- 問題のコード
- 正確なエラーメッセージまたは誤った出力
- 期待する出力
- 入力例
- すでに試した方法
- 複雑なロジックバグでは、AIに 行ごとの実行追跡 を依頼して状態変化を追わせることができる
- 例: 「この関数で total の値が各段階でどう変化するかを追跡し、どこで累積が誤っているか見つけてほしい」
- コードベースが大きくても、バグを再現する小さなコード断片を作れるなら、最小再現例 として提示するほうがよい
- 最初の回答が部分的にしか役立たなかった場合は、「修正後のコードを見せて」「なぜこの変更で問題が解決するのか説明して」のように追加質問を続けられる
デバッグ例: 曖昧な質問と改善された質問
- 例のコードは
mapUsersById(users)がユーザー配列をIDベースのオブジェクトに変換しようとする Node.js/JavaScript 関数 - バグは `for (let i = 0; i
まだコメントはありません。