LLMがコードを書くとき、問題は能力よりも「行動パターン」にある。確認せずに仮定で進む、頼んでいないリファクタリングをする、100行で済む処理を1000行で実装する——こうした挙動が開発効率を削っている。

Andrej KarpathyのLLM観察から生まれた4原則をまとめたCLAUDE.mdファイルが公開され、先週だけで3万2000以上のGitHubスターを獲得して急伸している。この記事では、問題の背景、4つの原則の内容、Claude CodeとCursorへの導入手順を解説する。

この記事でわかること:

  • Karpathyが発見したLLMコーディングの代表的な問題行動
  • 4原則の具体的な内容とそれぞれが解決すること
  • Claude Code(プラグイン)およびCursorへの導入手順

なぜClaude Codeは余計なことをするのか

2026年1月、AI研究者のAndrej KarpathyがClaude Codeを集中的に使った経験をまとめた投稿を公開した。彼が指摘した問題は次の通りだ。

「モデルは自分の代わりに誤った仮定を立て、確認もせずに突き進む。困惑を表明せず、矛盾を指摘せず、トレードオフを提示せず、すべき場面で反論しない」

「コードとAPIを過度に複雑化し、抽象化を膨らませ、デッドコードを整理しない。100行で済む処理に1000行以上を書く」

「自分が十分に理解していないコメントやコードを副作用として変更・削除することがある」

これらは個別のバグではなく、LLMが持つ構造的な傾向だ。その傾向を抑制するためのCLAUDE.mdファイルが forrestchang/andrej-karpathy-skills リポジトリとして公開されている。現在84,000以上のスターを獲得しており、Claude Code用プラグインとしても提供されている。

4原則の内容

1. コーディング前に考える(Think Before Coding)

「仮定しない。困惑を隠さない。トレードオフを出せ」というのがこの原則の要点だ。

実装に入る前に、自分が置いている仮定を明示する。複数の解釈が成り立つときは黙って一つを選ばず、選択肢を提示する。より簡単なアプローチがあれば指摘する。わからないことがあれば止まって確認する。LLMがよく行う「とりあえず進める」を防ぐ原則だ。

2. シンプル優先(Simplicity First)

「問題を解く最小限のコードを書く。推測で機能を加えない」という原則だ。

頼まれていない機能は追加しない。一度しか使わないコードに抽象化レイヤーを設けない。要求されていない「柔軟性」「設定可能性」を持ち込まない。200行で書いたものが50行で書けるなら書き直す。判断基準は「シニアエンジニアが見てオーバーエンジニアリングと言うか」だ。

3. 外科的な変更(Surgical Changes)

「必要な箇所だけを触る。自分が作った混乱だけ片付ける」という原則だ。

既存コードを編集するとき、隣接するコードやコメント、フォーマットを「改善」しない。壊れていないものをリファクタリングしない。自分のスタイルと違っても既存のスタイルに合わせる。無関係なデッドコードに気づいても削除せず、口頭で指摘するにとどめる。

「すべての変更行がユーザーのリクエストに直接つながるか」が自己チェックの基準になる。

4. 目標駆動の実行(Goal-Driven Execution)

「成功条件を定義し、満たすまでループする」という原則だ。命令型の指示を検証可能なゴールに変換する。「バリデーションを追加して」は「不正な入力のテストを書き、それを通過させて」になる。「バグを直して」は「バグを再現するテストを書き、それを通過させて」に変わる。

Karpathyはこの点についてこう述べている。「LLMは特定のゴールを満たすまでループするのが得意だ。何をするかを指示するのではなく、成功条件を与えれば自走する」

明確な成功条件があれば、LLMは自律的に作業を進められる。曖昧な指示(「動くようにして」)は常に確認が必要になる。

導入方法

導入方法は2通りある。

Claude Codeプラグイン(推奨)

すべてのプロジェクトにわたって原則を適用したい場合は、Claude Code内で以下を実行する。

/plugin marketplace add forrestchang/andrej-karpathy-skills
/plugin install andrej-karpathy-skills@karpathy-skills

CLAUDE.md(プロジェクト単位)

既存のCLAUDE.mdがない場合は、以下でファイルを作成する。

curl -o CLAUDE.md https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md

既存のCLAUDE.mdに追記する場合は次のコマンドを使う。

echo "" >> CLAUDE.md
curl https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md >> CLAUDE.md

既存のプロジェクト固有のルールとマージして使うことを想定した設計になっているため、上書きではなく追記が基本だ。

Cursorとの併用も可能で、リポジトリには .cursor/rules/karpathy-guidelines.mdc が含まれており、Cursorで開いたプロジェクトにも同じ原則が適用される。

原則が効いているときのサイン

READMEには、4原則が機能しているときに見られる変化として以下が挙げられている。

  • diffに不要な変更が入らなくなる(リクエストした変更だけが現れる)
  • オーバーエンジニアリングによる書き直しが減る(最初からシンプルなコードになる)
  • 実装ミスの後ではなく実装前に確認の質問が来るようになる
  • PRがクリーンになる(ついでのリファクタリングが入らなくなる)

この原則は「慎重さ優先」のバイアスを持つ設計で、単純な1行修正のような自明な変更では全体の厳密な適用は不要とされている。判断が必要な非自明な作業に効果を発揮する。

Claude Codeを日常的に使うなら、プロジェクトに関わらず入れておく価値のある1枚だ。