Vol.05

プロンプトエンジニアリングの基本

はじめに

AI開発の成否は、AIへの指示の出し方で決まります。同じAIを使っても、プロンプト(指示文)の質によって結果は大きく異なります。本コラムでは、効果的なプロンプトエンジニアリングの基本を解説します。

プロンプトの基本原則

原則1:具体的に指示する

抽象的な指示は抽象的な結果を生みます。可能な限り具体的に伝えましょう。

✗ 悪い例
「ユーザー管理機能を作って」

◯ 良い例
「以下の仕様でユーザー管理APIを実装してください:
- エンドポイント: POST /api/users
- リクエスト: { email, password }
- レスポンス: { user_id, email, created_at }
- パスワードは8文字以上必須
- 重複メールはエラー」

原則2:コンテキストを与える

AIは現在のプロジェクトの状況を知りません。必要な背景情報を提供しましょう。

【プロジェクト情報】
- Node.js + Express でバックエンド構築中
- データベースは SQLite を使用
- 認証は JWT トークン方式

【現在の状況】
- ユーザー認証機能は実装済み
- 次は学習記録機能を追加したい

【今回の依頼】
学習記録を保存するAPIを実装してください

原則3:制約条件を明示する

やってほしくないことも明確に伝えます。

【制約条件】
- 外部ライブラリの追加は禁止
- 既存のAPIClient.jsを必ず使用すること
- インラインイベントハンドラは使用しない
- 変数名はスネークケースで統一

実践テクニック

テクニック1:ロールを設定する

「あなたは経験豊富なバックエンドエンジニアです。
セキュリティを重視し、保守性の高いコードを書きます。」

テクニック2:出力形式を指定する

「以下の形式で回答してください:

## 実装方針
[ここに方針を記載]

## コード
[ここにコードを記載]

## テスト方法
[ここにテスト手順を記載]」

テクニック3:例示を活用する

「既存のユーザーAPIを参考にして、
同じパターンで商品APIを実装してください。

【参考:既存のユーザーAPI】
app.get('/api/users/:id', async (req, res) => {
    const user = await db.get('SELECT * FROM users WHERE id = ?', [req.params.id]);
    res.json({ success: true, data: user });
});」

よくある失敗パターン

失敗1:一度に多くを求める

✗ 「ユーザー管理、商品管理、注文管理、
    決済機能を全部実装して」

◯ 「まずユーザー管理機能から実装しましょう。
    最初にログイン機能を作ってください」

失敗2:前提条件を省略する

✗ 「エラーを直して」

◯ 「以下のエラーが発生しています:
    [エラーメッセージ]

    発生条件:ログイン後にダッシュボードを開いたとき
    期待する動作:ユーザー情報が表示される
    実際の動作:画面が真っ白になる」

失敗3:フィードバックなしで進める

✗ 次々と新しい機能を依頼し続ける

◯ 実装 → 確認 → フィードバック → 次の実装
  というサイクルを回す

まとめ

効果的なプロンプトエンジニアリングのポイント:

  1. 具体的に:曖昧さを排除する
  2. コンテキストを:背景情報を提供する
  3. 制約を明示:やってほしくないことも伝える
  4. 段階的に:一度に多くを求めない
  5. フィードバック:結果を確認して改善する

プロンプトエンジニアリングは練習で上達します。日々の業務でAIを使いながら、効果的な指示の出し方を磨いていきましょう。


次回:「Claude Codeとは何か - AI開発ツールの実態」