Claude Codeの出力品質は、指示(プロンプト)の設計で決まります。曖昧な指示は曖昧な結果を生み、具体的な指示は正確な結果を生みます。本記事で解説する7つのテクニック「ゴールファースト」「制約の明示」「Before/Afterの提示」「段階的タスク分解」「検証手順の組み込み」「CLAUDE.mdとの連携」「コンテキストウィンドウの最適化」を実践すれば、Claude Codeの初回正答率を大幅に向上させ、やり直しの回数を最小化できます。
Claude Codeの出力品質は、指示(プロンプト)の設計で決まります。曖昧な指示は曖昧な結果を生み、具体的な指示は正確な結果を生みます。本記事で解説する7つのテクニック「ゴールファースト」「制約の明示」「Before/Afterの提示」「段階的タスク分解」「検証手順の組み込み」「CLAUDE.mdとの連携」「コンテキストウィンドウの最適化」を実践すれば、Claude Codeの初回正答率を大幅に向上させ、やり直しの回数を最小化できます。
ブログ目次
HubSpot導入、AI活用、CRM整備、業務効率化までをまとめて支援しています。記事で気になったテーマを、そのまま相談ベースで整理できます。
Claude Codeの出力品質は、指示(プロンプト)の設計で決まります。曖昧な指示は曖昧な結果を生み、具体的な指示は正確な結果を生みます。本記事で解説する7つのテクニック「ゴールファースト」「制約の明示」「Before/Afterの提示」「段階的タスク分解」「検証手順の組み込み」「CLAUDE.mdとの連携」「コンテキストウィンドウの最適化」を実践すれば、Claude Codeの初回正答率を大幅に向上させ、やり直しの回数を最小化できます。
Claude Codeの出力品質は、指示の設計で大きく変わります。この記事では、初回正答率を上げてやり直しを減らすための7つの実践テクニックを、Before/Afterの具体例とともに解説します。
対象読者: Claude Codeを使い始めたエンジニアで、出力品質のばらつきを減らしたい方、チームでの利用品質を標準化したい方
Claude Codeは高度なコード理解力とファイル操作能力を持つAIエージェントですが、最終的な出力品質はユーザーの指示に大きく依存します。同じタスクでも、指示の出し方によって結果は大きく変わります。
# 曖昧な指示
ログイン機能を修正して
# 具体的な指示
src/auth/login.ts の handleLogin 関数で、
パスワード入力が空の場合に500エラーが返る問題を修正して。
空文字チェックを追加し、空の場合は400エラーと
「パスワードを入力してください」のメッセージを返すようにして。
修正後に既存のテスト(src/auth/__tests__/login.test.ts)を実行して、
全テストがパスすることを確認して。
曖昧な指示では、Claude Codeは「どのファイルのどの関数を」「どのようなバグを」「どう修正するか」を推測しなければなりません。推測が正しければ結果は良好ですが、推測が外れると意図しない修正が行われ、やり直しが発生します。
プロンプト設計は「AIに正しく推測させる」技術ではなく、「推測の余地をなくす」技術です。以下の7つのテクニックで、Claude Codeが正確に意図を理解し、初回で期待通りの結果を出すための指示設計を解説します。
最も重要なテクニックは、指示の冒頭に「最終的にどうなっていてほしいか」を書くことです。Claude Codeは指示文を上から順に処理するため、ゴールが先頭にあれば全体の方向性を正しく把握した上で作業を開始します。
| 観点 | 悪い例(手順先行) | 良い例(ゴールファースト) |
|---|---|---|
| 指示の冒頭 | 「まずpackage.jsonを開いて」 | 「ESLintの設定を更新して、未使用importを自動検出・削除できる状態にして」 |
| Claude Codeの理解 | 何のためにpackage.jsonを開くのか不明 | 最終目標が明確なので最適な手順を自律的に判断 |
| 結果 | 指示された手順だけ実行し、目的から外れる可能性 | 目的達成に必要な全ステップを自動で実行 |
実践例
# 悪い例
package.json を開いて eslint-plugin-unused-imports を追加して。
次に .eslintrc.js を開いて rules に unused-imports/no-unused-imports を追加して。
最後に npm run lint を実行して。
# 良い例
ESLintの設定を更新して、未使用のimport文を自動で検出・削除できる状態にして。
具体的には:
- eslint-plugin-unused-imports を導入
- .eslintrc.js に検出ルールを追加
- npm run lint で動作確認
- 既存コードで検出された未使用importがあれば自動修正
ゴールファーストの指示では、Claude Codeが「未使用import削除」という目的を理解しているため、パッケージの追加だけでなく、設定ファイルの更新、動作確認、既存コードの自動修正まで一貫して実行します。
Claude Codeは指示を忠実に実行しますが、「やってはいけないこと」が明示されていなければ、最適解として意図しない操作を行う可能性があります。
実践例
# 制約なし(リスクあり)
データベースのマイグレーションファイルを作成して、
usersテーブルにemail_verified カラムを追加して。
# 制約あり(安全)
データベースのマイグレーションファイルを作成して、
usersテーブルにemail_verified(boolean, default: false)カラムを追加して。
制約:
- 既存のマイグレーションファイルは絶対に変更しない
- DROP TABLE / DROP COLUMN は使用しない
- 本番データベースへの直接接続は行わない
- マイグレーションファイルの命名は YYYYMMDD_add_email_verified_to_users.sql
制約の明示は、特に以下のシーンで重要です。
Claude Codeに「こう変えてほしい」ではなく「この入力がこの出力になるべき」と具体例を示すことで、変換パターンを正確に伝えられます。
実践例
# 抽象的な指示
全てのAPIレスポンスに統一的なエラーハンドリングを追加して。
# Before/After付きの指示
APIレスポンスのエラーハンドリングを統一して。
以下のBefore/Afterのパターンに従って、src/api/ 配下の全ファイルを修正して。
Before:
try {
const data = await fetchUser(id);
return res.json(data);
} catch (error) {
return res.status(500).json({ message: "Internal Server Error" });
}
After:
try {
const data = await fetchUser(id);
return res.json({ success: true, data });
} catch (error) {
const statusCode = error instanceof AppError ? error.statusCode : 500;
const message = error instanceof AppError ? error.message : "予期しないエラーが発生しました";
logger.error({ error, endpoint: "fetchUser", userId: id });
return res.status(statusCode).json({ success: false, error: { code: statusCode, message } });
}
Before/Afterを1つ示すだけで、Claude Codeは変換ルール(レスポンス構造の統一、AppError対応、ログ出力の追加)を正確に理解し、全ファイルに同じパターンを適用します。
1回の指示で多くのことを依頼すると、後半のタスクほど品質が低下する傾向があります。大きなタスクは段階的に分解し、各段階の完了を確認してから次に進む設計にします。
実践例
# 一括指示(品質低下リスクあり)
新しい認証システムを実装して。JWT認証、リフレッシュトークン、
パスワードリセット、メール認証、二要素認証、セッション管理を全部作って。
# 段階的な指示(品質を維持)
認証システムのPhase 1として、JWT認証の基盤を実装して。
Step 1: 認証用のデータベーススキーマ設計
- users テーブルに必要なカラムを追加
- refresh_tokens テーブルを新規作成
- マイグレーションファイルを作成
Step 2: JWT発行・検証ロジック
- src/auth/jwt.ts にトークン生成・検証関数を実装
- アクセストークン有効期限: 15分
- リフレッシュトークン有効期限: 7日
Step 3: 認証ミドルウェア
- src/middleware/auth.ts にJWT検証ミドルウェアを実装
- 認証不要のルートをホワイトリストで管理
Step 4: テスト
- 各関数のユニットテストを作成
- 認証フロー全体のインテグレーションテストを作成
- 全テストがパスすることを確認
Phase 1完了後に、Phase 2(パスワードリセット・メール認証)に進みます。
段階的な分解には3つのメリットがあります。第一に、各ステップの出力品質を個別に確認できます。第二に、問題が発生した場合に該当ステップだけをやり直せます。第三に、Claude Codeのコンテキストウィンドウを有効に使えます。
「実装して」で指示を終えると、Claude Codeは実装だけで作業を終了します。検証手順を指示に含めることで、品質を保証した上で作業を完了させます。こうしたClaude Codeの活用に関心のある方は、経営データの可視化やコンテンツマーケティングの効率化もぜひご覧ください。
実践例
# 検証なし
ユーザー一覧APIを実装して。
# 検証手順あり
ユーザー一覧API(GET /api/users)を実装して。
実装仕様:
- ページネーション対応(page, limit パラメータ)
- name での部分一致検索(search パラメータ)
- レスポンス形式: { success: true, data: [], pagination: { page, limit, total } }
検証手順(全てパスすること):
1. npm run test で既存テスト含め全件パス
2. npm run lint でエラー0件
3. curl http://localhost:3000/api/users でレスポンスが返ること
4. curl http://localhost:3000/api/users?page=1&limit=5 でページネーション動作
5. curl http://localhost:3000/api/users?search=田中 で検索が動作
6. 存在しないページ(page=9999)で空配列が返ること(500エラーにならないこと)
検証手順を含めると、Claude Codeは実装後に自動でテスト・lint・curl実行まで行い、全ての検証をパスした状態で作業完了を報告します。問題が見つかった場合は自律的に修正して再検証します。
CLAUDE.md はプロジェクトルートに配置する設定ファイルで、Claude Codeがセッション開始時に自動で読み込みます。プロジェクト固有のルール・規約・コンテキストをCLAUDE.mdに記述しておくと、毎回の指示で繰り返し書く必要がなくなります。
# プロジェクト概要
ECサイトのバックエンドAPI。Next.js App Router + Prisma + PostgreSQL。
# コーディング規約
- TypeScript strict mode必須
- 関数はアロー関数で統一
- コメントは日本語で記述
- エラーハンドリングはAppErrorクラスを使用
# ディレクトリ構造
- src/app/api/ — APIルート
- src/lib/ — ユーティリティ関数
- src/services/ — ビジネスロジック
- src/repositories/ — データベースアクセス
- prisma/schema.prisma — DBスキーマ
# テストルール
- テストファイルは __tests__/ ディレクトリに配置
- テストフレームワーク: Vitest
- テスト名は日本語で「〜すべき」形式
# やってはいけないこと
- prisma/schema.prisma の既存モデルの変更(新規追加のみ)
- .env ファイルの変更・コミット
- node_modules/ 配下のファイル操作
CLAUDE.mdを設定することで、以下の変化が生まれます。
| 観点 | CLAUDE.mdなし | CLAUDE.mdあり |
|---|---|---|
| 毎回の指示量 | 長い(規約・構造を毎回説明) | 短い(タスクだけ伝えればよい) |
| コーディング規約の遵守 | 不安定(忘れると規約違反) | 自動(セッション開始時に読み込み) |
| チーム間の品質差 | 大きい(指示者の習熟度に依存) | 小さい(ルールが統一) |
| 禁止事項の遵守 | 依頼者が毎回明示する必要あり | 自動で制約が適用 |
CLAUDE.mdの設計パターンについては「Claude CodeのCLAUDE.md設計パターン」で詳しく解説しています。
Claude Codeには処理できる情報量の上限(コンテキストウィンドウ)があります。コンテキストが増えすぎると、指示の重要な部分を見落とすリスクが高まります。
長時間の作業セッションではコンテキストが肥大化します。/compact コマンドを実行すると、それまでの会話を要約して圧縮し、コンテキストの空き容量を確保できます。
# セッション中にコンテキストが肥大化したら
/compact
# 特定のテーマに焦点を絞って圧縮
/compact 認証機能の実装に集中してコンテキストを整理して
コンテキスト管理の詳細は「Claude Codeのメモリとコンテキスト管理」をご覧ください。
使用していないMCPサーバーが有効になっていると、そのサーバーのツール定義がコンテキストを消費します。作業に不要なMCPサーバーは /mcp disable で無効化してください。
# 今はSlack連携が不要な場合
/mcp disable slack
# 必要になったら再度有効化
/mcp enable slack
Claude Codeに「全ファイルを確認して」と指示すると、大量のファイル内容がコンテキストに読み込まれ、重要な指示が埋もれます。対象ファイルを明示的に絞り込みましょう。
# 悪い例(コンテキスト消費大)
プロジェクト全体のコードを確認して、パフォーマンス問題を探して。
# 良い例(コンテキスト消費小)
src/services/orderService.ts の calculateTotal 関数が遅い問題を調査して。
N+1クエリが発生していないか、src/repositories/orderRepository.ts と
合わせて確認して。
| テクニック | 効果が高いシーン | 優先度 |
|---|---|---|
| 1. ゴールファースト | 全ての指示 | 必須 |
| 2. 制約の明示 | DB操作・本番環境・リファクタリング | 必須 |
| 3. Before/After提示 | コード変換・フォーマット統一 | 高 |
| 4. 段階的タスク分解 | 大規模実装・複数ファイル変更 | 高 |
| 5. 検証手順の組み込み | API実装・バグ修正・テスト作成 | 高 |
| 6. CLAUDE.md連携 | 継続的なプロジェクト開発 | 必須 |
| 7. コンテキスト最適化 | 長時間セッション・大規模プロジェクト | 中 |
テクニック1(ゴールファースト)、2(制約の明示)、6(CLAUDE.md連携)は全ての作業で適用すべき基本テクニックです。テクニック3〜5はタスクの性質に応じて使い分けます。テクニック7は、セッションが長引いたときやプロジェクト規模が大きいときに意識してください。
Claude Codeのプロンプト設計は、AIの性能を引き出す最も費用対効果の高い投資です。本記事の要点をまとめます。
~/.claude/CLAUDE.md に切り出し、プロジェクト共通ルールと個人設定を分離するより網羅的なコマンド活用はClaude Codeチートシートを参照してください。
プロンプトの長さとClaude Codeの処理速度は直接的には関係しません。具体的な指示を書くことで「推測→試行→修正」のサイクルが減るため、トータルの作業時間はむしろ短縮されます。ただし、不必要に冗長な説明(同じことを何度も繰り返す、関係ない背景情報を大量に書くなど)はコンテキストを消費するため、「簡潔かつ具体的」を心がけてください。
はい、CLAUDE.mdはプロジェクトルートに配置してGitリポジトリにコミットすることが推奨されます。チーム全員が同じルール・規約・制約条件のもとでClaude Codeを使用できるため、出力品質のばらつきを抑制できます。個人固有の設定は ~/.claude/CLAUDE.md(グローバル設定)に書くことで、プロジェクトの共通ルールと個人の好みを分離できます。
応用できます。本記事で解説した7つのテクニックは、「AIに正確な指示を出す」という普遍的なスキルに基づいています。ゴールファースト、制約の明示、Before/Afterの提示、段階的タスク分解、検証手順の組み込みは、GitHub Copilot、Cursor、ChatGPT、Geminiなど、あらゆるAIツールに対して有効です。CLAUDE.md連携はClaude Code固有の機能ですが、他のツールでも同様の設定ファイル(.cursorrules、copilot-instructions.md など)が用意されています。
株式会社StartLinkは、事業推進に関わる「販売促進」「DXによる業務効率化(ERP/CRM/SFA/MAの導入)」などのご相談を受け付けております。 サービスのプランについてのご相談/お見積もり依頼や、ノウハウのお問い合わせについては、無料のお問い合わせページより、お気軽にご連絡くださいませ。
株式会社StartLink 代表取締役。累計150社以上のHubSpotプロジェクト支援実績を持ち、Claude CodeやHubSpotを軸にしたAI活用支援・経営基盤AXのコンサルティング事業を展開。
HubSpotのトップパートナー企業や大手人材グループにて、エンタープライズCRM戦略策定・AI戦略ディレクションを経験した後、StartLinkを創業。現在はCRM×AIエージェントによる経営管理支援を専門とする。