はじめに
LLM(大規模言語モデル)を活用したコード生成ツール(GitHub Copilot、Cursor、ChatGPTなど)を導入したものの、「出力されたコードに非機能要件が含まれていない」「既存システムの制約やエッジケースが考慮されず手戻りが発生する」といった問題に直面することがあります。
AIは指示された内容や与えられたコンテキストに基づいて回答を生成するため、プロンプトの出し方や背景情報の渡し方に漏れがあると、生成結果にも仕様漏れが発生します。
この記事では、AIコーディングにおいて仕様漏れを軽減するためのコンテキストの渡し方、実務で使えるプロンプトテンプレート、および仕様漏れを防ぐためのチェックリストを解説します。
仕様漏れが発生する主な原因
AIコーディングでコードの生成精度が下がる代表的な原因は以下の通りです。
- 暗黙の前提条件の欠落:プロジェクト固有の命名規則、例外処理方針、フレームワークのバージョン指定などの未伝達。
- 境界条件(エッジケース)の未指示:Null/Undefined処理、空配列の受け渡し、大規模データ入力時の挙動などへの言及不足。
- 非機能要件の考慮不足:ログ出力、エラーハンドリング、レスポンス速度やセキュリティ上の制約に関する指示の欠如。
これらを補うためには、AIに対するプロンプトを「単なる命令」ではなく、「明確な仕様書」として定義する必要があります。
コンテキスト設計の3大要素
AIに指示を与える際は、以下の3要素を構造化して渡すことが推奨されます。
| 要素 | 説明 | 具体例 |
|---|---|---|
| 1. 前提コンテキスト (Context) | 開発環境、利用ライブラリ、プロジェクトの制約事項 | Node.js v20, TypeScript v5.2, NestJS, Strictモード使用 |
| 2. タスク定義 (Task) | 作成・修正したい機能の入出力と要件 | ユーザー登録APIの実装、パスワードハッシュ化の必須化 |
| 3. ガードレール (Constraints) | 適用すべきルール、禁止事項、エッジケース | DB直書きの禁止、適切なエラーレスポンス形式の指定 |
実務用プロンプトテンプレート
実際に機能実装をAIに依頼する際に利用できるプロンプト構成例です。必要に応じて改変して利用してください。
## 目的
[実装したい機能の概要を記載]
## 開発環境・前提条件
- 言語/フレームワーク: [例: TypeScript / Express v4.x]
- 該当ファイル構造: [例: src/services/userService.ts]
- 既存の共通エラー定義: [例: AppErrorクラスを使用]
## 要件詳細
1. [入力データとバリデーション要件]
2. [処理ロジックの概要]
3. [出力データおよびレスポンス形式]
## 考慮すべきエッジケース・異常系
- [例: 対象IDが存在しない場合は404エラーを返却]
- [例: 外部APIタイムアウト時はログを出力し再試行を行う]
## 制約事項・ガードレール
- [例: Any型の使用は禁止]
- [例: 既存のDBクライアントインスタンスをDIして使用すること]
## 提出物フォーマット
- 実装コード
- 実装した単体テストのコード例
良いプロンプトと悪いプロンプトの比較
悪い例(抽象的で背景が不足している)
ユーザー一覧を取得するAPIの関数をTypeScriptで書いてください。
この場合、AIは一般的な処理を返しますが、ページネーション、認証、適切な型定義、エラー処理などが漏れる可能性が高くなります。
良い例(コンテキストと制約が明確)
以下条件に基づき、ユーザー一覧取得処理(
getUsers)を作成してください。
- 言語・環境: TypeScript 5.x / Prisma Client使用
- 仕様:
- クエリパラメータとして
page(既定値: 1) とlimit(既定値: 20, 最大: 100) を受け取る- 論理削除済みのレコード(
deletedAt !== null)は除外する- 例外処理:
- DB接続エラー時はカスタム例外
DatabaseExceptionをスローする- 制約:
- 返却型は
PaginatedResult<User>インターフェースに準拠させる
投入前チェックリスト
AIに指示を出す前、または生成されたコードを確認する際に以下の項目をチェックすることで、手戻りを防止できます。
- 利用しているライブラリや言語のバージョンを明示しているか
- 正常系だけでなく、異常系(エラー発生時)の挙動を指定しているか
- 入力の境界値(空値、Null、極端に大きな数値等)の扱いを定義しているか
- プロジェクト固有の型定義や命名規則を提示しているか
- セキュリティ要件(エスケープ処理、認証・認可の検証等)が含まれているか
導入時の注意点
- 機密情報の取り扱い: 社内コードや個人情報、APIキーなどの認証情報を社外のAIサービスに送信する際は、利用規約やセキュリティポリシーを必ず確認してください。
- 最新仕様の確認: AIモデルが学習した時期により、最新のライブラリやAPI仕様と異なるコードが生成される場合があります。実行前に最新の公式ドキュメントを参照してください。
- 生成結果の検証: AIが生成したコードは必ずコードレビューおよびテストを実行し、意図通りの挙動をするか検証してください。
まとめ
AIを活用した開発において、仕様漏れを防ぐ鍵は「指示の正確性とコンテキストの網羅性」にあります。事前に入出力要件、例外処理、プロジェクトの制約条件を整理してプロンプトに組み込むことで、生成コードの精度を高め、開発効率を向上させることができます。