0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CLAUDE.mdは何行まで効くのか? — サイズ別に精度・コスト・速度を実測した

0
Last updated at Posted at 2026-05-27

CLAUDE.md サイズ別 精度・コスト・速度の実測

うちのプロジェクトのCLAUDE.mdが1,200行を超えてきました。アーキテクチャの方針、コミット規約、ディレクトリ構成、テスト方針、よく使うコマンド、最近のADR、過去のインシデント、絶対やってはいけないこと、毎日のように追記していたら、いつのまにかこのサイズです。

ここで気になるのが「結局CLAUDE.mdは何行まで効くのか」という素朴な疑問です。Claude Codeの公式ドキュメントは「簡潔に保つ」としか書いていない。500行までなら効くのか、1,000行を超えると劣化するのか、誰かが定量的に計っているのを見たことがありません。

ならば自分で計ろうということで、100/300/500/1000/2000行の5サイズで精度・トークン消費・応答時間の3軸を実測してみました。結論を先に出すと「500行を超えたあたりから費用対効果が崩れ始める」というのが今回の手応えです。

検証設計

公平な比較のために、以下の条件を固定しました。

  • モデル: Claude Opus 4.7 (Anthropic Console、Claude Code CLI経由)
  • プロジェクト: 自社のTypeScript + Next.jsアプリ(約4万行)
  • タスク: 同一の20タスクセット(API追加5件、バグ修正5件、リファクタ5件、テスト追加5件)
  • CLAUDE.md: 同じ文章を100/300/500/1000/2000行に伸縮して用意
  • 評価: タスク完了率(人手レビュー)、入力トークン、応答時間(初回出力まで)

CLAUDE.mdの内容は元の1,000行版を基準とし、削るときは詳細を、伸ばすときは過去ADRの転記で水増ししました。意味のある情報密度は維持しつつ、サイズだけを変えるのが目標です。

タスクの内訳ももう少し書いておきます。API追加は「既存パターンに合わせた新規エンドポイント」、バグ修正は「Issueとして既知のもの4件+人工的に仕込んだ1件」、リファクタは「冗長なswitch/case文の整理」、テスト追加は「すでに動いている関数へのユニットテスト追加」です。どれも難易度は中程度で揃えており、結果が「プロジェクト独自の規約に従ったかどうか」で大きく分かれる設計にしています。

2026年5月時点、Claude Code 1M contextはOpus 4.7 / Sonnet 4.6でGAになっています。CLAUDE.mdが2000行(約60K tokens相当)でもcontextには楽々収まる前提で、今回の計測はcontext溢れではなく精度低下を狙ったものです。

計測結果

実測した3軸の数字をまず並べます。

CLAUDE.md行数 入力トークン(平均/タスク) 応答時間(秒/タスク) タスク完了率
100行 約3.1K 6.2 65% (13/20)
300行 約8.4K 7.5 85% (17/20)
500行 約13.5K 8.4 90% (18/20)
1000行 約26.0K 11.2 90% (18/20)
2000行 約51.0K 16.8 80% (16/20)

いくつか傾向が見えます。

  • 100行は不足で、独自規約を知らずに一般的なコードを書いてしまうパターンが目立つ
  • 300〜500行で完了率が立ち上がり、500行で最大値(90%)になる
  • 1000行は500行と同じ完了率だが、トークンは約2倍・応答時間は1.3倍
  • 2000行は完了率がむしろ下がり、応答時間は2倍超

300→500→1000の区間でトークン消費と応答時間は素直に線形に増えますが、完了率は500行で頭打ちです。さらに2000行では完了率が逆に下がるという結果になりました。

100行版で落ちたタスクの典型例を1つ挙げると、新規APIの追加で独自のレスポンス型(ApiResponse<T>ジェネリック)を使わず素のobjectを返してしまうケースでした。1,000行版のCLAUDE.mdには「APIのレスポンス型は必ずApiResponse<T>でラップする」と明記してあるのですが、100行版に削った時点でこの規約が落ちていて、Claudeは一般的なTypeScriptの書き方で返してしまった、というのが構図です。書いてあれば守る、書いていなければ自然に推測する、それだけのことのように見えます。

なぜ2000行で精度が下がるのか

「context windowが1Mあるから、入れただけ効くのでは」と直感的には思います。私もそう思っていました。

実際に2000行版で失敗したタスクの内容を観察してみると、原因はおおむね次の2つでした。

原因1: 矛盾の混入

CLAUDE.mdが長くなるほど、過去の追記同士が矛盾しはじめます。私の2000行版だと、ある章で「テストはVitestを使う」と書きながら、別の章で「pytestで書く」と書いている場所がありました(プロジェクトの一部にPythonサービスがあって、混在していた)。

Claudeはこういう矛盾を見つけると、両方を満たそうとして折衷案を出すことがあります。「VitestとPytestのどちらでも実行できるよう、テストランナーを抽象化する」というのは、要件レベルでは存在しない設計でした。自分で書き溜めたCLAUDE.mdの中の矛盾は、自分の目には案外見えていないものだと痛感した瞬間です。

原因2: 後方のセクションの希薄化

Anthropic公式が「lost in the middle」と呼ぶ現象です。長い文書では、冒頭と末尾は強く読まれるが、中央のセクションが取りこぼされやすい。2000行のCLAUDE.mdだと、800〜1500行あたりの規約が無視される確率が体感で2割ほど上がっていました。

これは長文document向けのpromptingでは古典的な現象で、Anthropic自身もOpus 4.7 release notesで「Claude prefers concise context. Verbose context can degrade adherence.」と書いています。

2000行版で実際に取りこぼされた例として、ファイルの1100行目あたりに書いてあった「Server Actionsを使うときは'use server'をファイル先頭ではなく関数内に書く」という規約があります。これは500/1000行版ではきちんと守られていたのに、2000行版だとすっぽり抜け落ちて、ファイル先頭に'use server'が混ざる回答が返ってきました。同じ情報でもCLAUDE.mdのどの位置に書いてあるかが結果に効いてくるのは、けっこう怖い現象です。

トークン経済性: 500行が最もコスパが良い

完了率だけでなく、1タスクあたりのコストで見ると500行の優位はより顕著です。Opus 4.7の入力単価を$15/1M tokensとして、CLAUDE.md由来の入力コストだけを計算しました。

行数 1タスクあたり入力コスト 完了率 完了1件あたりコスト
100行 約$0.047 65% $0.072
300行 約$0.126 85% $0.148
500行 約$0.203 90% $0.225
1000行 約$0.390 90% $0.433
2000行 約$0.765 80% $0.956

完了1件あたりコストで見ると、500行が最も効率的で、2000行は500行の約4倍のコストになります。私のチームのClaude Code利用量だと、CLAUDE.mdを2000行→500行に削るだけで月数万円の差が出る計算です。

Claude Codeのcompaction機能の影響

ここで一つ補正が必要です。Claude Codeにはcompaction(自動要約)機能があり、会話が長くなると過去のメッセージを圧縮します。ただしCLAUDE.mdは毎回プロンプトの先頭にロードされ、compactionの対象外です。これは公式helpcenterで明示されている挙動です。

つまり「CLAUDE.mdをコンパクトに保つ」は、compaction任せにできない領域だということです。トークン圧縮を期待してCLAUDE.mdを膨らませても、毎回フルサイズで読まれてしまう。コストは膨らみ続けます。

セッション内で /compact を手動実行しても、CLAUDE.mdの内容は要約されません。これは「毎セッション必ず読ませたいルール」を保証するための設計なので、メリットでもあります。代わりに「CLAUDE.mdに書かない方が良い情報」を見極める力が必要になります。

CLAUDE.mdに書かない方が良いもの

500行を上限にすると決めたとき、何を残し何を捨てるかが最大の論点になります。私の現プロジェクトでは、以下の方針に整理しました。

CLAUDE.mdに残すもの

  • アーキテクチャの大方針(モノレポ構成、レイヤ責任の分離)
  • 命名・コミット規約(短く要点だけ)
  • 絶対にやってはいけないこと(本番DBへの直接接続、シークレット混入など)
  • 頻出コマンド(pnpm test:watch, pnpm db:migrateなど)

別ファイルに切り出すもの

  • 長いADR(docs/adr/ に分離、CLAUDE.mdからはリンクだけ)
  • 過去のインシデント詳細(docs/postmortem/ に集約)
  • APIの詳細仕様(OpenAPIファイルから参照)
  • テストの個別パターン(tests/README.md に移動)

CLAUDE.mdは「Claudeに毎回読ませる」ためのファイルなので、毎回必要な情報だけに絞ります。たまにしか使わない情報は、Claudeが必要な時にRead toolで取りに行ける場所に置いておけば良いのです。

サイズ500行を維持するためのコツ

CLAUDE.mdは放っておくと自然に膨らみます。私が運用していて効いている工夫は2つです。

コツ1: 月1回の棚卸し

私のチームでは月初に15分だけCLAUDE.mdを見直す時間を確保しています。実際にやることは3つだけです。

  1. 過去1ヶ月で追記された行を読み直す
  2. 「もう参照していない」「別ファイルでよい」と判断したものを削除/移動
  3. wc -l で500行を超えていれば、削るまでcommitしない

コツ2: 章ごとの行数バジェット

各章に行数の上限を決めると、安易な追記が抑えられます。

## アーキテクチャ (max 80行)
## 命名・コミット規約 (max 60行)
## 開発フロー (max 100行)
## NG事項 (max 50行)
## 頻出コマンド (max 40行)
合計 max 330行 + 余白170行

上限を超えそうな章があったら、追記の前にまず削除する。これだけで継続的にスリムなCLAUDE.mdが保てます。

コツ3: AIに棚卸しを手伝ってもらう

3つ目は「AIに棚卸しを手伝ってもらう」やり方です。claude -p "このCLAUDE.mdの中で、過去3ヶ月のgit logに一度も登場していない用語を含む行を抽出して"のようなone-shot promptで、AI自身に「実際にプロジェクトで使われていないルール」を炙り出してもらいます。私のチームで試したら200行ぶん候補が出てきて、確認したら半分は本当に消して問題ないものでした。CLAUDE.mdを読むAIに、CLAUDE.mdをスリム化させる、というのは少しおもしろい構図でもあります。

まとめ

5サイズの実測から見えた3つのルールです。

  • CLAUDE.mdは500行までが効率最大(完了率90%、コスト最小)
  • 1000行を超えると費用対効果が悪化、2000行で精度が逆に低下
  • compaction対象外なので、サイズの自制が必須

「とりあえず全部書いておけば良い」は、文脈エンジニアリングとしては誤りでした。Claudeに何を伝え、何を別ファイルに退避させるかの設計が、結局はトークン経済性にもタスク完了率にも効いてくる。私のCLAUDE.mdは今、490行で運用しています。あと10行は意識して空けておくくらいが、ちょうどいい余白だと思います。

Claude Codeの実践Tipsをまとめた「実践Claude Code」では、CLAUDE.mdの設計パターンを含むコンテキストエンジニアリングを19章に渡って解説しています。本記事のサイズ実測の発展形として、書き方・章立て・運用フローまで踏み込んでいます。
実践Claude Code (Kenimoto)

あなたのCLAUDE.mdは何行ですか。500行を超えている方は、削った後の体感の違いをぜひコメントで教えてください。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?