はじめに:コードはあなたの気分に左右されない
大規模言語モデルとコードについて言えることは、それらは驚くほど自信満々であり、あなたのプログラムがコンパイルされるかどうかには全く無関心であるということです。Claude Haiku 4.5 は、あなたの問題を解決するPythonスクリプトを喜んで作成するでしょう。重要なのは、正確なコード生成のために Claude Haiku 4.5 にプロンプトを出す方法を学ぶことです。それは、気分に左右される余地をなくし、真実のための余地を最大限に残す方法です。コードのように聞こえる散文は必要ありません。コードのように動作するコードが必要です。そこには違いがあります。
人々はプロンプトを神秘的な呪文のように扱います。正しい言葉を言えば、完璧なアプリが得られると。それはカーゴカルト思考です。コードは契約です。Claude Haiku から正確さを得たいのであれば、契約を書かなければなりません。「ウェブアプリを構築する」は契約ではありません。「JSONを受け入れ、Pydantic v2でスキーマを検証し、スキーマエラー時に特定のペイロード形式で422を返すPython 3.12のFastAPIエンドポイントを生成する」は契約です。これが、正確なコード生成のために Claude Haiku 4.5 にプロンプトを出す方法です。つまり、契約を確定させるのです。
これが何であるか(そして何でないか)
- これは、Claude Haiku 4.5 から信頼性の高い、テスト可能なコードを取得するためのハウツーガイドです。
- これは「AIが開発者に取って代わる」という説教ではありません。ツールは思考に取って代わるものではありません。
- 実用的なプロンプト、構造、およびガードレールに焦点を当てています。魔法を機能させる退屈な部分です。
実行されるコードが必要な場合は、Claude に「実行される」の定義を与える必要があります。正確なコード生成が必要な場合は、正確さを平易でテスト可能な用語で定義する必要があります。それがすべてです。
詩人ではなく、弁護士のように正確さを定義する
「正確な」コードは「もっともらしい」コードではありません。正確さとは:
- 構文的な有効性:コンパイルされるか、インタープリターで実行される。
- 意味的な忠実性:仕様書に書かれていることを実行する。
- 決定論的な動作:同じ入力、同じ出力、定義された誤差範囲内。
- バージョン正確性:正しいSDK、APIバージョン、および言語機能を使用する。
Claude はあなたが求めるものを提供します。「リストをソートする関数」を求めれば、おそらくそれを手に入れるでしょう。「O(1) の追加スペースで Timsort セマンティクスを使用して、安定したインプレースソート」を求めれば、それは別の約束です。「正確なコード生成のために Claude Haiku 4.5 にプロンプトを出す方法」は、これらの約束をプロンプトに書き込むことから始まります。
最小限の実行可能なプロンプト、アップグレード版
悪い例:「タスク用の Node API を書く。」
より良い例:「{title: string, dueDate: ISO 8601} フィールドを検証し、作成されたオブジェクトで 201、またはエラー詳細で 400 を応答する /tasks POST ルートを持つ Node 20 Express 4 API を書く。」
正しい例:「単一の /tasks POST エンドポイントを持つ Node 20 Express 4 サーバーを生成します。要件:1) [email protected] で本文を検証する。2) フィールド:title (空でない文字列、最大 140)、dueDate (ISO 8601 の将来の日付)。3) 成功時:{id: ULID, title, dueDate} で 201。4) 無効時:{error: 'VALIDATION', details: array} で 400。5) データベースなし;インメモリ Map。6) 有効、無効(空のタイトル、過去の日付)をカバーする Jest 29 テストファイルを含める。7) test および dev 用の npm スクリプトを提供する。8) ESM を使用する。9) 余計な解説を含めない。」 形状に注目してください:言語バージョン、ライブラリ、制約、出力、エラー、テスト、さらにはパッケージ構造。あなたは曖昧さを取り除きました。Claude の仕事は、要件ではなく、コードを埋めることです。
足場パターン:システム、仕様、テスト、そしてコード
Claude Haiku 4.5 から正確なコード生成を得たい場合は、滑走路を与える必要があります:
- あなた:「あなたは Node 20 用のプロダクション品質の TypeScript を書いています。ファイル名付きのコードブロックのみを出力し、他には何も出力しないでください。」
- 理由:あなたはトーンと出力形式を制御します。それを偶然に任せないでください。
- 言語バージョン、パッケージの選択、エラーセマンティクス、I/O形式、パフォーマンス制限、およびセキュリティ制約を含めます。
- 最初に単体テストを書くように Claude に指示します。テストは形容詞よりも「正確な」をより良く定義します。コードの行がテストに役立たない場合、それは装飾です。
- テストの後のみ。はい、これは基本的にTDDですが、退屈することなくボイラープレートを書き続けるロボットがいます。
- 「テストが失敗するか、インポートが一致しない場合は、失敗した部分のみを更新してください。プロジェクト全体を書き直さないでください。」
Claude はコンテキストとレールがある場合にうまく機能します。レールを与えてください。
バージョンの固定はオプションではない
Claude のトレーニングデータは、新旧のドキュメントでいっぱいです。それは、多くの矛盾するアドバイスを見てきたということの丁寧な言い方です。「React Router を使用する」は曖昧です。「[email protected] とデータルーターを使用する」は指示です。デフォルトを信頼しないでください: - 言語:Python 3.12、Node 20、Go 1.22、Java 21—実際に実行するものを固定してください。
- フレームワーク:正確なメジャーバージョンと、破壊的な変更フラグを指定してください。
- Cloud SDK:バージョンを固定してください。aws-sdk v2 と v3 は重要です。
- リンター/フォーマッター:「スタイルのピンポン」の書き換えを避けるために、ルールを指定してください。
固定しない場合は、5年分のブログ投稿からの最高のヒットメドレーが得られます。正確なコード生成はノスタルジアにアレルギーがあります。
常にスキーマファースト
「ユーザープロファイル」構造を求めないでください。プロンプトでスキーマを定義し、検証を要求します:
- JS/TS の JSON Schema または Zod/Yup タイプ
次に、API入力、データベース書き込み、およびメッセージキューの境界で Claude にスキーマを強制させます。明示的なエラーペイロードとコードを要求します。正確さはスキーマを愛します。曖昧さはそうではありません。
それを観察可能にするか、それが本物であるふりをしないでください
必要な場所にロギング、メトリック、およびトレースを追加するように Claude に指示してください—そして、必要のない場所では静かに保つように指示してください。良いプロンプトには以下が含まれます:
- ロギングポリシー:レベル、PIIの編集、構造(JSONログ、お願いします)
- ヘルスエンドポイント:依存関係が稼働していることを証明する /healthz
Claude はあなたが求めるものを追加します。求めない場合は、運が良ければ print ステートメントが表示されます。
テストファーストのプロンプトは「ただ私を信じて」に勝る
正確なコード生成のために Claude Haiku 4.5 にプロンプトを出す良い方法は、テストを真実の源にすることです。例:
「次のことを行う関数 normalize_email(s) の pytest テストを記述します:
- gmail.com のみのローカル部分のドットを削除する。
- gmail.com のみのサブアドレス (+tag) を削除する。
- 単一の @ がない、またはスペースがある入力を拒否する。
- Unicode ドメイン punycode をそのまま保持します。
エッジケースをカバーします。テストを作成した後、それらに合格するように関数を実装します。」
Claude は、記述したテストを満たすように強制された場合、より良いコードを書くことがよくあります。そうでない場合は、気分的な議論ではなく、具体的な失敗があります。
構築による幻覚なし
幻覚を排除することはできませんが、それらを囲い込むことはできます:
- ソースが存在する場合にのみ、引用またはソースURLを要求します。SDKメソッドについては、ドキュメントリンクを要求し、コードがそれらのドキュメントと一致することを要求します。
- プライベート API の場合は、プロンプトに仕様を貼り付けます。Claude が内部エンドポイントを知っていることを期待しないでください。
- 紛らわしい API を持つライブラリの場合は、公式ドキュメントからのサンプルスニペットを含め、それに従うように Claude に指示します。
正確なコードは、ほとんどが正確な参照です。Claude に参照を与えてください。
スタイルガイド:最も魅力的ではない、最も有用なもの
Claude は推測するスタイルでコードを記述します。それはチャーンのレシピです。スタイルガイドを貼り付けてください。指定してください:
- フォーマット(Prettier、Black、gofmt デフォルト)
また、明白でない選択については、短い理論的根拠のコメントを要求してください。将来のあなたは感謝し、現在の Claude は「修正」PRを減らすでしょう。
長いプロンプト、短い出力
正確なコード生成のために Claude Haiku 4.5 にプロンプトを出す方法について考えるもう1つの方法は、出力ではなくプロンプトに言葉を費やすことです。あなたが欲しいのは:
説明を抑制し、ファイル名と短い README が含まれるコードブロックのみを返すように指示します。解説が必要な場合は、別の実行でそれを要求してください。散文とコードをインターリーブすると、バグがモノクルとシルクハットをかぶって忍び寄る方法です。
改善:実際に機能するタイトループ
信頼性の高いコードへの最も速いパスは「最初に正しく取得する」ではありません。それは短くて修正的なループです:
- ローカルで実行します。失敗したテストの出力とコンパイラエラーをそのまま Claude に貼り付けます。
- 指示:「必要な最小限の行のみを変更します。失敗したテストで必要な場合を除き、関数シグネチャを変更しないでください。」
Claude は、何が壊れたかを正確に伝えると、diff の適用に優れています。失敗ログを言い換えないでください。それらを貼り付けてください。ログは真実です。
セキュリティは機能であり、追伸ではない
モデルはパブリックコード(良い、悪い、そして呪われた)でトレーニングされているため、セキュリティを最優先の要件にする必要があります:
- eval、shell=True、および文字列型 SQL を明示的に禁止します。
- パラメーター化されたクエリ、CSRF 保護、およびレート制限を要求します。
- 環境変数またはシークレットマネージャーを介したシークレットの処理を要求します。
デフォルトで安全なプロンプトは、より安全なコードを生成します。「後でパッチを適用する」プロンプトは、見出しを生成します。
パフォーマンス:「高速」とはどういう意味ですか
「高速にする」は「何でもする」に翻訳されます。代わりに、メトリックを指定してください:
- レイテンシーターゲット(インメモリの場合は p95 < 50ms、DB ops の場合は p95 < 300ms)
- 時間計算量(O(n^2) ではなく O(n log n) でなければなりません)
Claude は、設定した予算に合わせてアルゴリズムを選択します。予算を与えてください。
ドキュメント:見知らぬ人をオンボーディングするのに十分
次のものが含まれる README を Claude に要求します:
「正確なコード」には正確なドキュメントが含まれます。それらは成果物の一部です。
盗むことができる具体的なプロンプトテンプレート
テンプレート:バックエンドエンドポイント
システム:あなたは細心の注意を払う Python 3.12 エンジニアです。ファイル名付きのコードブロックのみを出力します。
ユーザー:
- POST /convert エンドポイントを持つ FastAPI 0.111 アプリを構築します。
- リクエスト:{amount: Decimal as string, from: 'USD'|'EUR', to: same}。
- pydantic v2 で検証します。スキーマエラー時に 422 形状を返します。
- 固定レート {USD:1, EUR:1.1} で純粋な関数 convert(amount, from, to) を使用します。
- {amount: string, currency: string} で 200 を返します。
- 有効、無効(不正な10進数、不明なコード)、およびエッジ(0)をカバーする pytest テストを含めます。
- 依存関係が固定された pyproject.toml を提供します。ruff および mypy 構成を含めます。
テンプレート:CLI ユーティリティ
システム:あなたは Go 1.22 を書いています。ファイル名付きのコードブロックのみを出力します。
ユーザー:
- stdin を読み取り、URL セーフなスラッグを出力する slugify という名前の CLI を作成します。
- ルール:小文字、ASCII のみ、ハイフン区切り、空白を折りたたみ、句読点を削除します。
- テーブルテストを含む main.go および slugify_test.go を提供します。
- テストおよびビルドターゲットを含む Makefile を含めます。
テンプレート:フロントエンドコンポーネント
システム:あなたは React 18 + TypeScript をターゲットとする実用的な React エンジニアです。
ユーザー:
- <DebouncedInput> コンポーネントを実装します。
- プロパティ:value: string, onChange(value): void, delay=300。
- useRef/useEffect を使用します。サードパーティのフックはありません。
- フェイクタイマーを使用した vitest テストを含めます。
- 最小限の Storybook ストーリーを提供します。
これらのテンプレートは、バージョンを固定し、動作を定義し、テストを要求することにより、正確なコード生成のために Claude Haiku 4.5 にプロンプトを出す方法を示しています。
賢くなることを拒否する:「最適化しないでください」と言う場合
時期尚早なマイクロ最適化が必要ない場合(そしてそうでない場合)、そう言ってください:
- 「賢さよりも可読性を優先します。テストで必要な場合を除き、ビット操作は不要です。」
- 「メタプログラミングは不要です。明示的 > 暗黙的。」
Claude は感銘を与えるのが大好きです。それをさせないでください。テストに合格させ、読みやすくしてください。それは十分に印象的です。
生産性儀式のようにランダムなチャットタブでプロンプトをやりくりする人々を見てきました。コードコンテキストを理解するワークスペースを使用してください。たとえば、Sider.AIは、仕様、コード、diff、およびテストログを表示したままにして、「エラーを貼り付け、行を修正する」ループが実際にタイトになるように構築されています。魔法ではありません。プロットを見失うのを防ぐ退屈な足場です。ツールが契約、テスト、およびコードを同じ会話で維持する場合—紙吹雪であなたを悩ませることなく—それを使用してください。Sider はそうします。 チームメイトとして Claude でデバッグする方法、オラクルとしてではない
- 失敗したテストの出力をそのまま貼り付けてください。要約しないでください。
- diff を要求します:「ファイル X に対して統合 diff のみで応答します。」
- ランタイムバグの場合は、最小限の再現可能なスニペットを追加し、パッチに加えて説明を要求します。
- ライブラリエラーの場合は、適用されると思われるドキュメントの抜粋を貼り付けて、「これはバージョン X の正しい API ですか?そうでない場合は、コードを更新し、正しい抜粋を引用してください。」と尋ねます。
目標は、Claude に証拠と議論させることです。あなたは証拠を持ってきます。
落とし穴パレード(とその回避方法)
- 「最新」API トラップ:「最新を使用する」と言わないでください。「バージョン X.Y を使用する」と言い、それに固執してください。
- 空のテストファイル:テストを要求しないと、それらを取得できません。
- 1 回限りの誤謬:2〜3回の短い改善を計画してください。1つの肥大化したプロンプトよりも高速です。
- 曖昧なエラーポリシー:ステータスコードとペイロードを定義します。「エラーを返す」は何の意味もありません。
- 所有されていない依存関係:コードが制御できないサービスに依存している場合は、スタブします。フェイクを要求します。
プロンプトチェックリスト(モニターの近くにテープで固定してください)
- エラーセマンティクスが定義されている(コード、形状)
- 出力形式が制約されている(ファイル名、コードブロック、diff)
これら10個すべてにヒットすると、Claude Haiku 4.5 は一般的に、日中を生き残る正確なコード生成を生成します。
詳細な例:曖昧から検証済み
曖昧なプロンプト:「CSVを安全に解析する関数を記述します。」
結果:おそらく大丈夫、おそらく間違っている、確かにテストされていない。
正確なプロンプト:
「Python 3.12 を記述しています。ファイル名付きのコードブロックのみを出力します。
csvsafe/init.py および csvsafe/reader.py を、関数 read_rows(path: Path) -> list[dict[str,str]] とともに作成します。要件:newline='' および encoding='utf-8' を使用した csv.DictReader を使用します。ヌルバイトを許可しません。>10MB のファイルを拒否します。列を 100 に制限します。BOM を削除します。空のセルを空の文字列として扱います。メッセージコード {FILE_TOO_LARGE, NULL_BYTE, TOO_MANY_COLUMNS} で ValueError を発生させます。ハッピーパス、ヌルバイト、11MB ファイル、101 列、および BOM 処理をカバーする pytest を使用した tests/test_reader.py にテストを含めます。依存関係が固定され、黒色の構成の pyproject.toml を提供します。」
コード、テスト、およびエッジ処理が得られます。次に、テストを実行し、失敗を貼り付け、最小限の差分で反復します。それが実際の正確なコード生成です。
「創造性」およびその他のマーケティング用語について
「創造的な」コードは必要ありません。正しいコードが必要です。猫の名前を付けるために創造性を保存してください。Claude にプロンプトを出す場合、創造性は強固な制約の自然な副産物です。正しいテストと明確な仕様は、エレガントなソリューションを生み出します。間違ったプロンプトは「絵文字で base64 を再発明した」を生成します。誘惑しないでください。
秘密ではない秘密
正確なコード生成のために Claude Haiku 4.5 にプロンプトを出す方法は退屈です。必要なものを書き留め、バージョンを固定し、スキーマを定義し、テストを要求し、実際の失敗で反復します。それでおしまい。神秘主義はありません。非常に高速に入力でき、15 個のほぼ同一のテストケースを記述することを気にしないモデルを備えたエンジニアリングの規律のみです。
そして、それがひねりです。正確さは魅力的ではありません。機能するプロンプトは、TSA チェックリストのように読み取れます。出荷されるコードは、気にかけている人間によって書かれたように読み取れます。明確な要件の下で成長し、曖昧な指示の下でしおれるジュニアエンジニアのようにモデルを扱うことで、両方を取得できます。契約を与えてください。テストに合格させてください。次に、ツールに与える種類の信頼で、預言者ではなく、それを信頼することができます。
結論:魔法の減少、保証の増加
魔法が必要な場合は、マジックショーに行ってください。コンパイルして動作するソフトウェアが必要な場合は、保証のように機能するプロンプトを作成してください。正確なコード生成のために Claude Haiku 4.5 にプロンプトを出す方法は、華やかな言い回しや秘密のキーワードに関するものではありません。それは、制約、テスト、バージョン、およびフィードバックループに関するものです。これら4つのことを行うと、実行されるコードが得られます。それらをスキップすると、美しくフォーマットされたフィクションが得られます。
コードはあなたの気分を気にしません。ありがたいことに、テストも同様です。
FAQ
Q1: Claude Haiku 4.5に正確なコード生成をさせるための最も簡単な方法は?
契約のように扱ってください:バージョンを固定し、スキーマを定義し、エラー形式を指定し、最初にテストを要求します。制約が明確であるほど、コードはより正確になります。
Q2: Claudeがコードを書く際のハルシネーションを減らすには?
信頼できるドキュメントまたは仕様を貼り付け、それらの正確なAPIへの準拠を要求します。プライベートエンドポイントの場合は、独自の仕様を含めてください。推測させることは期待しないでください。
Q3: Claudeにテストを依頼すべきですか、それとも自分で書くべきですか?
まずClaudeにテストを生成させ、次にそれらを満たすようにコードを実装します。テストは形容詞よりも正確さを定義し、モデルを正直に保ちます。
Q4: プロンプトでのバージョン固定はどの程度具体的にすべきですか?
非常に具体的に:言語ランタイム、フレームワークのメジャー/マイナー、およびSDKのバージョン。「最新」は矛盾するパターンを招きます。正確さは安定したターゲットに依存します。
Q5: Sider.AIは、正確なコードを促すプロンプティングにおいてどのように役立ちますか?
Sider.AIを使用して、仕様、コード、差分、およびテストログを1つのループに保ちます。魔法は使いませんが、コンテキストを保持するため、Claudeの修正は実際の失敗を追跡できます。