Skills: プロンプトエンジニアリングの基礎

最終更新:2026-08-31

プロンプトは Skill の魂——良く書けば AI は専門家、下手に書けば AI はオウム返しマシン。


1. プロンプト設計の原則

(1) SPECIFIC 法則

文字 意味
S Specific 具体的 「セキュリティをチェック」ではなく「SQL インジェクションをチェック」
P Purpose 目的 「本番環境でのデータ漏洩を防止する」
E Example サンプル 期待する出力の見本を提示
C Constraint 制約 「500字以内」
I Interactive 対話的 「情報不足の場合は質問する」
F Format フォーマット 「Markdown テーブルで出力」
I Iterative 反復的 テスト後、継続的に最適化

(2) 一般的なアンチパターン

アンチパターン 問題 改善
曖昧すぎる 「コードをレビュー」 「セキュリティ/パフォーマンス/可読性の3観点でレビュー」
フォーマットがない 出力制約なし 「テーブルで出力し、深刻度順にソート」
サンプルがない AI の出力が制御不能 1〜2個の参考出力を提供
ロールが曖昧 AI が自分の役割を知らない 「あなたはシニアセキュリティ監査専門家です」
複雑すぎる 一度に多くを要求 ステップに分け、各ステップで1つの明確なタスク

2. ロール設定のテクニック

(1) 基本的なロール

MARKDOWN
あなたは Python バックエンド開発の専門家です。

(2) 強化されたロール

MARKDOWN
あなたは10年の経験を持つ Python バックエンド専門家で、FastAPI と Django を専門としています。
特に以下が得意です:
- データベース最適化と ORM チューニング
- RESTful API 設計
- 非同期プログラミングと並行処理
あなたのコードスタイル:シンプル、型安全、十分なコメント

(3) マルチロール切り替え

MARKDOWN
# マルチロール Skill

タスクタイプが「アーキテクチャ設計」の場合、あなたはシステムアーキテクトで、スケーラビリティとパフォーマンスに注目します。
タスクタイプが「コード実装」の場合、あなたはシニアエンジニアで、コード品質と保守性に注目します。
タスクタイプが「デバッグ」の場合、あなたはトラブルシューティング専門家で、根本原因分析と迅速な修正に注目します。

3. タスク分解のテクニック

(1) 単一ステップタスク

シンプルなタスクは直接記述:

MARKDOWN
指定された Python ファイルを読み込み、type hints が含まれているかチェックする。
なければ、すべての関数に型アノテーションを追加する。

(2) マルチステップフロー

複雑なタスクはステップに分割:

MARKDOWN
以下の手順でデータベースマイグレーションレビューを実行:

## ステップ 1:マイグレーションファイルを理解
- マイグレーションファイルの内容を読み込む
- 操作タイプを特定(CREATE/ALTER/DROP)

## ステップ 2:リスク評価
- データ損失リスクがあるかチェック(DROP COLUMN、DROP TABLE)
- テーブルロックリスクがあるかチェック(ADD COLUMN without default)
- パフォーマンスリスクがあるかチェック(大規模テーブル ADD INDEX)

## ステップ 3:提案の生成
- 高リスク操作には段階的実行案を提案
- 低リスク操作は直接実行可能と確認

(3) 条件分岐

MARKDOWN
## 条件ロジック

- Python プロジェクトの場合 → `ruff check` を実行
- TypeScript プロジェクトの場合 → `eslint` を実行
- Go プロジェクトの場合 → `go vet` を実行
- 技術スタックが不明な場合 → 先に package.json / pyproject.toml / go.mod を読み込む

4. 出力制約のテクニック

(1) フォーマット制約

MARKDOWN
## 出力フォーマット

厳密に以下の JSON フォーマットを使用:

```json
{
  "summary": "一言でまとめる",
  "issues": [
    {
      "severity": "high|medium|low",
      "location": "file:line",
      "description": "問題の説明",
      "suggestion": "修正提案"
    }
  ],
  "score": 85
}

### (2) 長さの制約

```markdown
## 出力制約

- 要約は3文以内
- 各問題は100字以内
- 修正提案にはコードサンプルを含める
- 総出力は1000字以内

(3) 品質制約

MARKDOWN
## 品質要件

- 修正提案は直接使用可能なコードでなければならず、擬似コードではない
- 深刻度には明確な基準が必要:high=セキュリティ脆弱性/crash、medium=パフォーマンス低下/保守性不良、low=スタイル/提案
- 不確実な問題は「要人工確認」と注記し、推測しない

5. サンプル駆動の手法

Few-shot サンプルは出力品質を制御する最も効果的な手段です:

MARKDOWN
## サンプル

### 入力
```python
def get_user(id):
    db = connect()
    result = db.execute(f"SELECT * FROM users WHERE id = {id}")
    return result

出力

📍 src/db.py:12 🔴 深刻:SQL インジェクション脆弱性 📝 f-string で SQL を結合しており、ユーザー入力から悪意のある SQL を直接注入可能 ✅ 修正:

PYTHON
def get_user(user_id: int) -> dict:
    db = connect()
    result = db.execute(
        "SELECT * FROM users WHERE id = ?",
        (user_id,)
    )
    return result.fetchone()

Alice はプロンプトに3つのサンプルを追加した後、AI 出力の一貫性が60%から95%に向上しました。Bob は言います:「サンプルは最良の先生——AI に何が欲しいか伝えることは、何が欲しいかを説明するより10倍効果的です。」

---

## ❓ よくある質問

> **Q:プロンプトはどのくらいの長さが適切ですか?** **A:必要十分であれば OK です。通常 50〜200 行です。重要なのは具体的で操作可能であることで、長ければ良いわけではありません。長すぎるプロンプトは AI の焦点をぼやけさせます。**
> **Q:ネガティブ制約(「〜するな」)は書くべきですか?** **A:必要ですが、少なく抑えましょう。ポジティブな事前制約(「X だけをする」)はネガティブ制約(「Y をするな」)より効果的です。AI は「するな」という指示を見落としやすいです。**
> **Q:サンプルはいくつ書くべきですか?** **A:1〜3個で十分です。1個のサンプルでフォーマットを示し、2〜3個でエッジケースをカバーします。5個を超えると品質が低下します。**

---

## 📖 まとめ

- SPECIFIC 法則:具体的、目的、サンプル、制約、対話的、フォーマット、反復的
- ロール設定は具体的に:専門分野、スタイル、経験レベル
- タスク分解の3段階:単一ステップ記述、マルチステップフロー、条件分岐
- 出力制約:フォーマット、長さ、品質の3本柱
- Few-shot サンプルは最も効果的な品質管理手法

---

## 📝 練習問題

1. **基礎問題(難易度⭐)**:SPECIFIC 法則を使って以前書いたシンプルなプロンプトを書き直し、効果の違いを比較してください。
2. **応用問題(難易度⭐⭐)**:「API インターフェースドキュメント生成」Skill の完全なプロンプトを作成し、ロール、フロー、制約、サンプルを含めてください。
3. **チャレンジ問題(難易度⭐⭐⭐)**:変数注入で異なるロールとルールをサポートしながら、出力フォーマットの一貫性を保つ汎用プロンプトテンプレートフレームワークを設計してください。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%