Claudeがコードを書くときに何を参考にしているか知ると、プロンプトが変わる

記事タイトルとURLをコピーする

はじめに

「Claudeにコードを書いてもらったけど、なんか微妙にズレてる……」

そんな経験をしたことはないでしょうか。指示した通りのコードは書いてくれるのに、プロジェクトのスタイルと合わなかったり、使っているライブラリのバージョンと噛み合わなかったり。

実はこれ、Claudeの能力の問題ではなく、Claudeに渡す情報の問題であることがほとんどです。

Claudeがコードを生成するときに何を参考にしているかを理解すると、自然と「伝えるべきこと」が見えてきます。この記事ではその仕組みと、すぐに使えるプロンプトのコツを紹介します。


Claudeがコードを書くときに参照しているもの

1. 学習済みのコード知識(プレトレーニング)

AnthropicのClaudeシステムカードによると、Claudeの学習は2段階で行われています。まず膨大なデータセットから言語能力を身につけるプレトレーニング、その後に「役に立つ・正直である・害を与えない」アシスタントとして振る舞えるよう調整するポストトレーニングです。(System Card: Claude Opus 4.6)。

"After the pretraining process, Claude Opus 4.6 underwent substantial post-training and fine-tuning, with the intention of making it a helpful, honest, and harmless assistant."

プレトレーニングでは、インターネット上の公開コンテンツや第三者から取得したデータセットを学習し、言語の構造・単語間のパターン・世界についての基礎知識を習得しています。これにより、主要な言語・フレームワーク・ライブラリの一般的な書き方や慣習をすでに知った状態でコードを生成できます。

なお、AnthropicのPrivacy Centerでは学習の仕組みについてこう明記されています。

"Models do not store text like a database, nor do they simply 'mash-up' or 'collage' existing content. Models identify general patterns in text in order to help people create new content, and they do not have access to or pull from the original training data once the models have been trained."

Anthropic Privacy Center

つまり、学習データをそのまま再現しているわけではなく、パターンを学んで新しいコードを生成しています。ただし、学習データには時間的な限界があるため、最新バージョンのAPIやライブラリの細かい仕様は古い情報を参照してしまう可能性があります。

2. コンテキストウィンドウ(これが一番大事)

Anthropicの公式ドキュメントでは、コンテキストウィンドウについてこう説明されています。

"The 'context window' refers to the entirety of the amount of text a language model can look back on and reference when generating new text plus the new text it generates. This is different from the large corpus of data the language model was trained on, and instead represents a 'working memory' for the model."

Anthropic API Docs - Context Windows

つまりコンテキストウィンドウは、学習データとは別の「作業メモリ」です。会話の中で渡された情報こそが、Claudeがコードを書く際の直接的な参照元であり、貼り付けた既存コード、エラーメッセージ、使用ライブラリの指定など、すべてがここに含まれます。

逆に言えば、会話の中に情報がなければ、Claudeは推測で補うしかありません。

3. コンテキストの量と質のトレードオフ

ただし、コンテキストは多ければ良いわけではありません。Anthropicのエンジニアリングブログでは "context rot"(コンテキストの劣化) という概念が説明されており、トークン数が増えるほど精度が低下するとされています。

"Studies on needle-in-a-haystack style benchmarking have uncovered the concept of context rot: as the number of tokens in the context window increases, the model's ability to accurately recall information from that context decreases. While some models exhibit more gentle degradation than others, this characteristic emerges across all models. Context, therefore, must be treated as a finite resource with diminishing marginal returns."

Anthropic - Effective context engineering for AI agents

つまり「とにかく全部貼り付ければいい」わけではなく、関連性の高い情報を絞って渡すことが精度向上のポイントです。


情報が足りないと、Claudeはこう迷う

Claudeが生成するコードの質は、渡された情報の質に比例します。以下のような情報が欠けていると、Claudeはデフォルトや一般解を選択せざるを得ません。

不足している情報 Claudeの挙動
フレームワーク・バージョンの指定なし 一般的または古いバージョンの書き方で生成
既存コードのスタイルが不明 独自のスタイルで書いてしまう
「何のために」作るかが不明 過剰または不足した処理になりがち
型定義・インターフェースがない 型が曖昧なコードを生成


だからこう指示すると、Claudeも書きやすい

① 環境・バージョンを最初に書く

# 悪い例
「ユーザー認証の処理を書いて」

# 良い例
「Node.js 20 + Express 4.x + TypeScript 5 の環境で、
JWTを使ったユーザー認証ミドルウェアを書いて」

Claudeは「何で書くか」を明示されるほど的確なコードを生成できます。特にバージョンは重要で、v3とv4では書き方が大きく異なるライブラリも少なくありません。

② 既存コードを一緒に渡す

# 悪い例
「この関数にエラーハンドリングを追加して」

# 良い例
「以下のコードにエラーハンドリングを追加してください。
プロジェクト全体でこのスタイルを使っているので合わせてほしいです。

[既存コードを貼る]
」

既存コードを渡すことで、Claudeはプロジェクトのスタイル・命名規則・パターンを読み取って合わせてくれます。

③「何のため」の目的も添える

# 悪い例
「キャッシュ処理を実装して」

# 良い例
「APIレスポンスのキャッシュ処理を実装したいです。
目的はDBへのアクセス頻度を減らすこと。
TTLは5分で、メモリキャッシュで十分(Redisは不要)。」

目的を伝えると、Claudeは「どこまで実装すべきか」を正しく判断できます。過剰なコードも、不足したコードも減ります。

④ 型定義・インターフェースを先に見せる

TypeScriptプロジェクトなら、型定義を先に渡すのが特に効果的です。

// これを先に渡す
interface User {
  id: string;
  email: string;
  role: 'admin' | 'member';
  createdAt: Date;
}

// そのうえで「Userを受け取ってメール通知を送る関数を書いて」と指示する

型情報があると、引数・戻り値・型アサーションが全部正確になります。

⑤ 関連度の高い情報に絞って渡す

前述の「コンテキストロット」を防ぐため、コードベース全体をそのまま貼り付けるのは逆効果になることがあります。関係するファイルや関数だけを抜き出して渡す方が、精度が上がることも多いです。


まとめ:Claudeの出力は「渡された情報」で大きく変わる

Claudeのコード生成は、コンテキストウィンドウに渡された情報に強く依存しています。プレトレーニングで幅広いコード知識を持っている一方、実際の出力の質を左右するのは「その会話の中で何を伝えたか」です。

  • バージョン・環境を明示する
  • 既存コードを一緒に渡す
  • 目的・制約を説明する
  • 型定義を先に見せる
  • 関連度の高い情報に絞って渡す

「Claudeの精度が低い」と感じたときは、まず「自分は十分な情報を渡せているか?」を振り返ってみてください。Claudeは優秀なエンジニアと同じで、コンテキストをくれれば、それに応えてくれます


参考

はしもと しんご(記事一覧)

アプリケーションサービス部ディベロップメントサービス2課

猫が好きです。