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. **チャレンジ問題(難易度⭐⭐⭐)**:変数注入で異なるロールとルールをサポートしながら、出力フォーマットの一貫性を保つ汎用プロンプトテンプレートフレームワークを設計してください。