本記事はRedditで投稿されていた事前・事後プロンプト戦略を参考にしています。
AIを活用したコード生成が一般的になりつつあります。
そして、出力されるコードの品質をいかに向上させるかが重要な課題となっています。
単に「このようなコードを書いて」と指示するだけでは不十分です。
想定外の問題が生じたり、重要な考慮事項が抜け落ちたりするケースが少なくありません。
本記事では、AI(特にClaude)によるコード生成の品質を飛躍的に高める「事前・事後プロンプト戦略」について解説します。
従来のAIコード生成の課題
AIにコードを生成させる際の一般的なアプローチは単純です。
必要な機能を説明し、それを実装するコードを出力してもらうというものです。
しかし、このシンプルなアプローチには以下のような課題があります。
- エッジケースへの考慮漏れ
- 既存システムとの整合性の問題
- セキュリティリスクの見落とし
- パフォーマンスへの影響の無視
- 依存関係の不完全な理解
これらの課題を解決するには、より構造化されたアプローチが必要となります。
事前・事後プロンプト戦略とは
事前・事後プロンプト戦略は、コード生成の前後に特定の質問や指示を行う手法です。
これにより、AIが生成するコードの品質が向上します。
この戦略は次の2つの要素から構成されています。
事前プロンプト(Pre-Prompt)
コード生成前にAIの理解度を確認します。
また、潜在的な問題点を洗い出します。
事後プロンプト(Post-Prompt)
生成されたコードの評価を促します。
そして、改善点の特定を要求します。
この手法を使えば、単発のプロンプトでは見落としがちな問題点を事前に特定できます。
その結果、より堅牢なコードが生成されるのです。
事前プロンプトの実装方法
事前プロンプトでは、AIに本題のコード生成に入る前に質問を行います。
これにより、タスクの理解度を確認します。
以下に事前プロンプトの例を示します。
コードを実装する前に、以下の準備アセスメントを完了してください。 変更内容の理解を確認するため、以下の質問に回答してください: 1. 今回依頼している変更内容の概要を確認してください。 2. 実装に必要な追加パッケージがあれば列挙してください。 必要なパッケージがない場合は「なし」と回答してください。 3. この変更により更新が必要な既存ファイルを列挙してください。 更新が必要なファイルがない場合は「なし」と回答してください。 4. この変更により新規作成が必要なファイルを列挙してください。 新規ファイルが不要な場合は「なし」と回答してください。 リスク評価: 1. この機能実装において重大なリスクは予見されますか? リスクが軽微な場合は「いいえ」と回答してください。重大なリスクがある場合は「はい」と回答し、その詳細と緩和策を提供してください。 2. この変更によりアプリケーションの他の部分が破損する可能性はありますか? 破損の可能性がない場合は「なし」と回答してください。可能性がある場合は、その詳細を提供してください。 3. この変更はアプリケーションのパフォーマンスに重大な影響を与える可能性がありますか? 影響がない場合は「いいえ」と回答してください。影響がある場合は、その詳細を提供してください。 4. この変更に関連するセキュリティリスクはありますか? リスクがない場合は「いいえ」と回答してください。リスクがある場合は、その詳細を提供してください。 実装計画: 1. 作成する新機能/コンポーネント/ファイル間の依存関係を詳述してください。 2. この変更はより小さな安全なステップに分割すべきですか? 分割が不要な場合は「いいえ」と回答してください。 3. すべての必要な変更が正しく行われたことをどのように確認しますか? アーキテクチャ決定記録 (ADR): 上記の質問に回答した後、コード作成に取り掛かる前に、この変更を文書化するためのADRファイルをマークダウン形式で作成してください。以下を含めてください: - 機能の概要: 機能の高レベルな説明。この要件の一部として作成または編集する必要があるすべてのファイルのリストを含めてください。 - 設計決定: 特定のアーキテクチャパターン(コントローラ、サービス、関数など)を選択した理由と、主要な決定(命名規則、フォルダ構造、事前条件のアサーションなど)。 - 直面した課題: 課題や不確実性(Expressリクエストからの信頼できないデータの処理、検証の懸念の分離、テストでの適切なモッキングの確保など)をリストアップ。 - 実装された解決策: これらの課題にどのように対処したかを説明。 - 将来の考慮事項: 将来の変更に関する潜在的な改善点や考慮事項を記載。
このようなプロンプトをAIに提示することで、複数の効果が得られます。
AIは単にコードを生成するだけでなく、タスクの理解度を確認します。
さらに、潜在的な問題点も特定します。
実際の利用シーンでは手順は簡単です。
事前プロンプトの後に本題のコード生成プロンプトを続けます。
そして、AIに両方を順番に処理させるのです。
事後プロンプトの実装方法
コードが生成された後、事後プロンプトを使用します。
これにより、コードの品質と改善点を評価できます。
事後プロンプトの例は以下の通りです。
私が提示したプロンプトとあなたが出力したコードに基づいて、以下の点について評価してください。 1. 依頼した機能を正確に実装できていますか? 2. プロンプトや出力したコードの改善点はありますか? 追加機能の提案は不要です。純粋に依頼した機能の実装とプロンプトの質、出力されたコードの品質について考察してください。 改善の余地がない場合は「なし」とお答えいただいて構いません。
この事後プロンプトには二つの役割があります。
まず、AIは生成したコードを批判的に評価し、改善の余地を特定します。
また、プロンプト自体の品質についても評価を行います。
これは、次回以降のプロンプトの改善にも役立つでしょう。
実際の効果
この事前・事後プロンプト戦略を採用すると、多くの効果が期待できます。
- エッジケースや潜在的な問題点を早期に発見できる
- セキュリティリスクを適切に評価し、対応できる
- 既存システムとの整合性を確保できる
- コードの品質と保守性が向上する
- プロンプト自体が継続的に改善される
実際、バックエンド開発(特にNodeJS)でこの戦略を使用した結果は顕著でした。
AIがプロンプトの指示を無視するケースが減少しました。
また、考慮すべき重要なエッジケースの見落としも大幅に減りました。
導入時の注意点
この戦略を導入する際には、いくつかの注意点があります。
トークン使用量の増加
詳細なプロンプトを使用するため、トークン消費が増えます。
Claude Pro などのサブスクリプションを検討するとよいでしょう。
設定の最適化
Claudeの設定では「アーティファクト」機能をオフにすると効果的です。
これにより、トークンを効率的に使用できます。
また、フォローアップの質問には「簡潔な回答」設定が有効です。
プロジェクト管理
Claudeのプロジェクト機能を活用しましょう。
これらのプロンプトをプロジェクト指示として保存できます。
そうすれば、会話ごとにコピー&ペーストする手間が省けるのです。
まとめ
「一発で完璧なコードを生成してもらう」という期待は現実的ではありません。
AIによるコード生成も、人間のプログラマーと同様です。
詳細な要件の確認やレビュープロセスが重要なのです。
事前・事後プロンプト戦略は効果的な方法といえます。
それは、確認とレビューをAIとの対話の中に組み込むためです。
この戦略は一見すると手間がかかるように思えるかもしれません。
しかし、最終的には高品質なコードを効率的に生成することにつながるのです。
特に複雑なプロジェクトや本番環境で使用するコードでは、この追加の労力は価値があります。
AIツールを使ったプログラミングでも大切なことがあります。
それは、品質と堅牢性を優先する姿勢です。
この点を忘れないようにしましょう。