CLAUDE.mdは50行で十分だった——200行超えたら指示の30%が消える話
長いほうが丁寧だと思ってた
CLAUDE.mdに全部書いた方がいい。
直感的にはそう思う。プロジェクトの構成、コーディングルール、テストの方針、禁止事項……Claudeに伝えたいことは山ほどある。全部書けばClaudeは全部理解してくれる。そう信じてた。
違った。
200行を超えると、指示の30%がtruncation(切り詰め)される。 300行超はむしろ逆効果。Claudeが指示を見落とす頻度が上がる。
書けば書くほど丁寧。そう思ってたのが恥ずかしい。
数字で見る「短い方が強い」
| 指標 | 未最適化 | 最適化後 | 改善 |
|---|---|---|---|
| トークン消費 | 4,500 | 1,800 | -60% |
| セッション修正回数 | 5回 | 3回 | -40% |
| レスポンス時間 | 45秒 | 30秒 | -33% |
| 生成エラー | 60%が曖昧指示に起因 | 35%低減 | — |
短くした方がトークン節約になるだけじゃなく、修正回数もレスポンス時間も減る。情報が少ない方がClaudeは的確に動く。人間だってマニュアル300ページ渡されたら読まないでしょ。同じ。
最適な長さ
| 行数 | 評価 |
|---|---|
| 50行以下 | 理想。全指示が有効 |
| 50-150行 | 許容。modular rulesで補完推奨 |
| 150-200行 | 注意。truncation開始域 |
| 200行超 | 30%の指示が喪失 |
| 300行超 | 逆効果 |
HumanLayerの推奨は60行以下。もっと攻めてる。
「でも伝えたいことがいっぱいあるんだけど」。わかる。自分もそうだった。
答えは2つある。
解決策1: WHY/WHAT/HOW構造
日本語Xコミュニティで広まっている書き方。CLAUDE.mdの構造をこの3つに絞る。
# IMPORTANT: プロジェクトルール(MUST遵守)
## WHY(なぜこのプロジェクトが存在するか)
ユーザー体験最優先のNext.jsアプリ。SSRで高速化。
## WHAT(何があるか)
- src/app: ルーティング
- lib/: ユーティリティ
- 詳細はdocs/api.md参照
## HOW(どう作業するか)
- ビルド: npm run build
- テスト: npm test --watch
- 新機能追加時: テスト同梱(MUST)
- 禁止: 本番DB直接操作
これだけ。40行もいかない。
ポイントは「MUST」「IMPORTANT」を冒頭に配置すること。Primacy効果——先に出た情報ほど遵守されやすい。
書くもの・書かないもの
| 書くもの | 書かないもの |
|---|---|
| プロジェクト固有の罠 | コードスタイル(Linter任せ) |
| 運用ルール | Git構造(Claudeが読める) |
| 暗黙知(ドキュメントにない決定) | 冗長な説明 |
| トリガー+アクション | 「~とは何か」の定義 |
例: 「新コンポーネント作成時 → *.test.tsx同時作成」。こういうトリガー+アクションの形式が一番確実に守られる。
解決策2: .claude/rules/への分割
CLAUDE.mdに全部書かなくていい。
.claude/rules/ にトピック別のファイルを置く。Claudeは関連するルールだけを読み込む。
.claude/rules/
├── security.md # セキュリティルール
├── workflow.md # ワークフロー
├── git.md # Git運用
├── quality.md # 品質基準
├── pr-review.md # PRレビュー対応
├── research.md # 研究ルール
└── autonomous.md # 自律動作ルール
自分の環境はこの7ファイル構成。各30行以下。
効果:
- トークン40%削減(全部読まなくていい)
- 関連性35%向上(ノイズが減る)
全部を1つのCLAUDE.mdに詰め込むのがO(n)(足すほどコスト増加)だとしたら、ルール分割は**O(1)**に近い。必要なものだけ読むから、追加してもベースコストが変わらない。
「Claudeは既に賢い」という前提
公式ドキュメント(platform.claude.com)にこう書いてある:
「Claudeは既に賢い。知らないことだけ書け」
Claudeはコードが読める。ファイル構造も見える。gitログも追える。それなのにCLAUDE.mdに「このプロジェクトはNext.jsで構築されています」とか「srcディレクトリにコンポーネントがあります」とか書いてる人が多い。
見ればわかることは書かなくていい。書くべきは:
- 見てもわからないこと(なぜこの構造にしたか、過去の事故の教訓)
- やらないでほしいこと(禁止事項、地雷)
- 特殊な手順(本番デプロイの手順、特殊なテスト方法)
2週間ごとのリファクタ
CLAUDE.mdは生き物。放っておくと肥大化する。
Cem Karacaの事例がわかりやすい:
| 時期 | 行数 | トークン |
|---|---|---|
| 1ヶ月目 | 150行 | 2,000 |
| 3ヶ月目 | 400行 | 8,000 |
| 6ヶ月目 | 800行 | 20,000 |
| 9ヶ月目 | 1,207行 | 42,200 |
9ヶ月で42,200トークン。コンテキストウィンドウの40%が設定ファイルだけで埋まる。
推奨: 2週間ごとに見直して、150行以下を維持。「もう不要になったルール」「重複」「見ればわかる情報」を定期的に削る。
自分の環境
| 項目 | 値 |
|---|---|
| CLAUDE.md | 90行 |
| .claude/rules/ | 7ファイル |
| 各ルールファイル | 10-40行 |
90行。最適範囲内。
ただし、最初から90行だったわけじゃない。スキル予算問題をきっかけに「入れすぎは逆効果」と学んで、削った結果がこれ。
正直、何を消すかの判断が一番難しかった。「これ要るかも」と思うものを消すのは怖い。でも消してみて問題が起きたことは一度もない。
まとめ: 書くな、削れ
CLAUDE.mdは短いほど強い。
- 50-150行が最適
- 200行超で30%の指示が消える
- WHY/WHAT/HOW構造で40行にまとまる
- 溢れた分は
.claude/rules/に分割 - 2週間ごとに見直し
- 「Claudeは既に賢い」——知らないことだけ書く
スキル予算と同じ結論にたどり着いた。足すより引く。
使用環境: Claude Code(Maxプラン $200/月)
参考: HumanLayer "Skill Issue"、SFEIR "CLAUDE.md Optimization"
Discussion