構造を超えて、効果的なプロンプトエンジニアリングは原則によって導かれます。これらはモデル、タスク、コンテキストを問わず適用される基本的な真理です。これらの原則をマスターすれば、あらゆるプロンプティングの課題に対応できるようになります。

<Callout type="info" title="8つの核心原則">
これらの原則はすべてのAIモデルとすべてのタスクに適用されます。一度学べば、どこでも使えます。
</Callout>

## 原則1：巧みさよりも明確さ

最良のプロンプトは巧みではなく、明確です。AIモデルは文字通りの解釈者であり、与えられたものをそのまま処理します。

### 明示的に伝える

<Compare 
  before={{ label: "暗黙的（問題あり）", content: "これをもっと良くして。" }}
  after={{ label: "明示的（効果的）", content: "このメールを以下の点で改善してください：\n1. 件名をより魅力的にする\n2. 段落を最大2〜3文に短縮する\n3. 最後に明確なコールトゥアクションを追加する" }}
/>

### 曖昧さを避ける

言葉には複数の意味があります。正確な言葉を選びましょう。

<Compare 
  before={{ label: "曖昧", content: "短い要約をください。\n（どのくらい短く？1文？1段落？1ページ？）" }}
  after={{ label: "正確", content: "正確に3つの箇条書きで、各項目20語以内で要約してください。" }}
/>

### 当たり前のことも述べる

あなたにとって当たり前のことは、モデルにとっては当たり前ではありません。前提を明確に示しましょう。

```
カバーレターの作成を手伝ってください。

重要なコンテキスト：
- GoogleのSoftware Engineerポジションに応募しています
- Pythonと分散システムで5年の経験があります
- リーダーシップ経験が必要な役割です（4人のチームをリードしてきました）
- オープンソースへの貢献を強調したいです
```

## 原則2：具体性が品質を生む

曖昧な入力は曖昧な出力を生みます。具体的な入力は具体的で有用な出力を生みます。

### 具体性の階段

<SpecificitySpectrum levels={[
  { level: "レベル1", text: "気候変動について書いて" },
  { level: "レベル2", text: "気候変動の影響についての記事を書いて" },
  { level: "レベル3", text: "気候変動がサンゴ礁にどのように影響するかについて500語の記事を書いて" },
  { level: "レベル4", text: "海水温の上昇がサンゴの白化を引き起こす仕組みを説明する500語の記事を書いてください。対象は高校生で、グレートバリアリーフからの具体例を2つ含め、魅力的でありながら科学的に正確なトーンで" }
]} />

各レベルが具体性を追加し、出力品質を劇的に向上させます。

### 指定すべき要素

<div className="my-4 grid gap-2">
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-24">対象者</span>
    <span className="text-muted-foreground">誰がこれを読む/使うのか？</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-24">長さ</span>
    <span className="text-muted-foreground">どのくらいの長さ/短さが必要か？</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-24">トーン</span>
    <span className="text-muted-foreground">フォーマル？カジュアル？テクニカル？</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-24">フォーマット</span>
    <span className="text-muted-foreground">文章？リスト？表？コード？</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-24">範囲</span>
    <span className="text-muted-foreground">何を含める/除外するか？</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-24">目的</span>
    <span className="text-muted-foreground">これで何を達成すべきか？</span>
  </div>
</div>

## 原則3：コンテキストは王様

モデルには記憶がなく、あなたのファイルにアクセスできず、あなたの状況を知りません。関連するすべての情報はプロンプトに含める必要があります。

### 十分なコンテキストを提供する

<Compare 
  before={{ label: "コンテキスト不足", content: "なぜ私の関数が動かないの？" }}
  after={{ label: "十分なコンテキスト", content: "特定のキー値で辞書のリストをフィルタリングするPython関数があります。3つのアイテムを返すべきところで空のリストを返しています。\n\n関数：\ndef filter_items(items, key, value):\n    return [item for item in items if item[key] = value]\n\n呼び出し：filter_items(items, 'status', 'active')\n期待値：2アイテム、実際：空のリスト" }}
/>

### コンテキストチェックリスト

<Callout type="tip" title="送信する前に">
自問してください：賢い見知らぬ人がこのリクエストを理解できるだろうか？できないなら、コンテキストを追加しましょう。
</Callout>

<Checklist 
  title="コンテキストチェックリスト"
  items={[
    { text: "モデルは私が何に取り組んでいるか知っているか？" },
    { text: "モデルは私の目標を知っているか？" },
    { text: "モデルは必要な情報をすべて持っているか？" },
    { text: "モデルは制約を理解しているか？" },
    { text: "賢い見知らぬ人がこのリクエストを理解できるか？" }
  ]}
/>

## 原則4：質問だけでなく、導く

答えを求めるだけでなく、望む答えへとモデルを導きましょう。

### 指示的なフレーミングを使う

<Compare 
  before={{ label: "質問するだけ", content: "マイクロサービスの長所と短所は何ですか？" }}
  after={{ label: "導く", content: "マイクロサービスアーキテクチャの利点5つと欠点5つをリストアップしてください。\n\n各ポイントについて：\n- ポイントを1文で明確に述べる\n- 簡単な説明（2〜3文）を提供する\n- 具体例を挙げる\n\n以下の視点を考慮してください：小規模スタートアップ、大企業、モノリスから移行中のチーム。" }}
/>

### 推論の足場を提供する

複雑なタスクでは、推論プロセスを導きましょう：

<TryIt 
  title="推論の足場の例"
  description="このプロンプトはAIを体系的な意思決定プロセスに導きます。"
  prompt={`私のeコマースプロジェクトでPostgreSQLとMongoDBのどちらを選ぶべきか決める必要があります。

これを体系的に考えてください：
1. まず、eコマースデータベースの典型的な要件をリストアップする
2. 次に、各要件に対して各データベースを評価する
3. 私のユースケースに特有のトレードオフを考慮する
4. 明確な根拠とともに推奨を示す`}
/>

## 原則5：反復と改良

プロンプトエンジニアリングは反復的なプロセスです。最初のプロンプトが最良であることはめったにありません。

### 反復サイクル

```
1. 最初のプロンプトを書く
2. 出力を確認する
3. ギャップや問題を特定する
4. プロンプトを改良する
5. 満足するまで繰り返す
```

### よくある改良

<div className="my-4 grid gap-2">
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">冗長すぎる</span>
    <span className="text-muted-foreground">「簡潔に」または長さ制限を追加</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">曖昧すぎる</span>
    <span className="text-muted-foreground">具体例や制約を追加</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">フォーマットが違う</span>
    <span className="text-muted-foreground">正確な出力構造を指定</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">要素が足りない</span>
    <span className="text-muted-foreground">「必ず含めてください...」を追加</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">トーンが違う</span>
    <span className="text-muted-foreground">対象者とスタイルを指定</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">不正確</span>
    <span className="text-muted-foreground">引用やステップバイステップの推論を要求</span>
  </div>
</div>

### プロンプトジャーナルをつける

うまくいったことを記録しましょう：
```
タスク：コードレビュー
バージョン1：「このコードをレビューして」→ 一般的すぎる
バージョン2：具体的なレビュー基準を追加 → 改善
バージョン3：良いレビューの例を追加 → 優秀
最終版：[成功したプロンプトをテンプレートとして保存]
```

## 原則6：モデルの強みを活用する

モデルがどのように訓練されているかに沿って、逆らわずに作業しましょう。

### モデルは助けたがっている

リクエストを、助けたがっているアシスタントが自然に行うことのようにフレーミングしましょう：

<Compare 
  before={{ label: "逆らう方向", content: "できないとは思いますが、試してみて..." }}
  after={{ label: "沿う方向", content: "...を理解するのを手伝ってください\n私はXに取り組んでいて、...の支援が必要です\n...を順を追って説明していただけますか" }}
/>

### モデルはパターンが得意

一貫した出力が必要な場合は、パターンを示しましょう：

<TryIt 
  title="パターンの例"
  description="このプロンプトは、本の推薦にどのフォーマットを求めているかAIに正確に示します。"
  prompt={`SF小説を3冊推薦してください。各推薦を以下の形式でフォーマットしてください：

📚 **[タイトル]** 著：[著者]
*[ジャンル] | [出版年]*
[2文の説明]
おすすめの理由：[1文のフック]

---`}
/>

### モデルはロールプレイができる

異なる「モード」の応答にアクセスするためにペルソナを使いましょう：

```
悪魔の代弁者として、私の提案に反論してください...
支援的なメンターとして、私の改善を手伝ってください...
懐疑的な投資家として、このビジネスプランに疑問を呈してください...
```

## 原則7：出力構造を制御する

構造化された出力は、自由形式のテキストよりも有用です。

### 特定のフォーマットを要求する

```
分析結果を以下の形式で返してください：

要約：[1文]

主な発見：
• [発見1]
• [発見2]
• [発見3]

推奨：[1〜2文]

確信度：[低/中/高] 理由：[理由]
```

### 区切り文字を使う

プロンプトのセクションを明確に分けましょう：

```
### コンテキスト ###
[コンテキストをここに]

### タスク ###
[タスクをここに]

### フォーマット ###
[希望するフォーマットをここに]
```

### 機械可読な出力を要求する

プログラムで使用する場合：

```
有効なJSONのみを返してください、説明は不要です：
{
  "decision": "approve" | "reject" | "review",
  "confidence": 0.0-1.0,
  "reasons": ["文字列の配列"]
}
```

## 原則8：検証と確認

特に重要なタスクでは、モデルの出力を盲目的に信頼しないでください。

### 推論を求める

```
この問題を解いて、ステップバイステップで作業を示してください。
解いた後、[確認方法]で答えを検証してください。
```

### 複数の視点を要求する

```
この問題を解決するための3つの異なるアプローチを教えてください。
それぞれについて、トレードオフを説明してください。
```

### 自己チェックを組み込む

```
コードを生成した後、以下についてレビューしてください：
- 構文エラー
- エッジケース
- セキュリティの脆弱性
見つかった問題をリストアップしてください。
```

## まとめ：原則の一覧

<PrinciplesSummary />

<Quiz 
  question="プロンプトにすべての関連する背景情報を含めるべきと示唆している原則はどれですか？"
  options={[
    "巧みさよりも明確さ",
    "具体性が品質を生む",
    "コンテキストは王様",
    "反復と改良"
  ]}
  correctIndex={2}
  explanation="「コンテキストは王様」は、AIモデルにはセッション間の記憶がなく、あなたの心を読むことができないことを強調しています。関連する背景、制約、目標を含めることで、モデルがあなたのニーズを理解するのに役立ちます。"
/>

## 練習：空欄を埋める

このプロンプトテンプレートを完成させて、核心原則の理解をテストしましょう：

<FillInTheBlank
  title="原則を適用する"
  description="空欄を埋めて、構造化されたプロンプトを作成してください — 自由に書いてください！"
  useAI={true}
  openEnded={true}
  template={`あなたは{{expertise}}の専門知識を持つ{{role}}です。

コンテキスト：私は{{context}}に取り組んでいます。

タスク：{{task}}

制約：
- 回答を{{length}}語以内に収めてください
- {{focus}}のみに焦点を当ててください

フォーマット：回答を{{format}}として返してください。`}
  blanks={[
    { id: "role", correctAnswers: [], hint: "AIはどのような専門的役割を担うべきですか？", context: "職種や専門的役割" },
    { id: "expertise", correctAnswers: [], hint: "どのような特定のドメイン知識が必要ですか？", context: "役割に合ったスキルやドメイン" },
    { id: "context", correctAnswers: [], hint: "プロジェクトや状況は何ですか？", context: "この専門知識を持つ人が取り組むプロジェクト" },
    { id: "task", correctAnswers: [], hint: "AIはどのような具体的なアクションを取るべきですか？", context: "役割とコンテキストに適したアクション" },
    { id: "length", correctAnswers: [], hint: "回答はどのくらいの長さであるべきですか？", context: "数字（語数）" },
    { id: "focus", correctAnswers: [], hint: "どの側面を優先すべきですか？", context: "タスクに関連する品質や側面" },
    { id: "format", correctAnswers: [], hint: "出力はどのように構造化されるべきですか？", context: "出力フォーマットのタイプ" }
  ]}
  explanation="構造化されたプロンプトには以下が含まれます：明確な役割（原則1）、十分なコンテキスト（原則3）、具体的なタスク（原則2）、制約（原則4）、出力フォーマット（原則5）。AIはあなたの選択が内部的に一貫しているかどうかを確認します。"
/>

<InteractiveChecklist
  title="原則チェックリスト"
  items={[
    { id: "clarity", label: "巧みさよりも明確さ", description: "プロンプトは明示的で曖昧さがありませんか？" },
    { id: "specificity", label: "具体性が品質を生む", description: "対象者、長さ、トーン、フォーマットを含めましたか？" },
    { id: "context", label: "コンテキストは王様", description: "プロンプトに必要な背景情報がすべて含まれていますか？" },
    { id: "examples", label: "説明より例が効果的", description: "説明するだけでなく、望むものを示しましたか？" },
    { id: "constraints", label: "制約が出力を集中させる", description: "範囲とフォーマットに明確な境界がありますか？" },
    { id: "iteration", label: "反復と改良", description: "結果に基づいて改善する準備ができていますか？" },
    { id: "persona", label: "ペルソナが視点を形作る", description: "AIはどの役割を演じるべきか知っていますか？" },
    { id: "verify", label: "検証と確認", description: "正確性のチェックを組み込みましたか？" }
  ]}
/>

これらの原則は、これから続くすべての基礎を形成します。パートIIでは、プロンプトの効果を劇的に高める具体的なテクニックにこれらを適用します。
