Claude Codeを使い始めた月、APIの請求が予想の3倍来た。僕が何がトークンを食っているのか調べて対策したら、翌月から半分以下になった。その手順を全部公開する。
この記事を読むと、「どこでトークンが消えているか」の特定方法から、.claudeignore・Plan mode・プロンプト改善・MCPサーバー管理まで、実際に効いた対策が具体的なコマンド付きでわかる。
トークンを消費する「5大犯人」とは何か?
やみくもに節約しようとする前に、まず敵を知る必要がある。トークン消費の主な原因は5つに絞られる。
1. 巨大なコンテキスト読み込み
Claude Codeはタスクに関係ないファイル(node_modules、.git、ビルド成果物)も読み込もうとする場合がある。これが最大の無駄だ。
2. あいまいな指示による往復 「いい感じにして」という指示は、Claude Codeが確認・再確認を繰り返すことになる。1回の指示で終わるべき作業が3〜4往復になる。
3. 常時起動のMCPサーバー 接続中のMCPサーバーは、会話ごとにコンテキストをツールリストとして消費する。使わないMCPを繋ぎっぱなしにすると積み重なる。
4. 肥大化したCLAUDE.md プロジェクト説明、コーディング規約、過去の決定事項を全部書いていると、セッション開始のたびに全文をコンテキストに載せる。
5. 長いセッションの放置 会話が長くなるほど、履歴全体がコンテキストとして累積される。区切りを作らないと指数的に消費量が増える。
まず /usage コマンドで消費量の傾向を見て、どの原因が大きいか確認しよう。
.claudeignoreで無駄な読み込みを止めるには?
最も即効性のある対策は .claudeignore の設置だ。.gitignore と同じ書式で、Claude Codeがコンテキストに読み込まないパスを指定できる。
プロジェクトルートに .claudeignore を作成する。
# .claudeignore
# ビルド成果物
.next/
dist/
build/
out/
# 依存関係
node_modules/
.pnp/
.pnp.js
# キャッシュ
.cache/
.turbo/
*.tsbuildinfo
# ログ・デバッグ
*.log
npm-debug.log*
# テスト成果物
coverage/
.nyc_output/
# 環境変数(セキュリティ上も重要)
.env
.env.local
.env.*.local
# データベースファイル
*.db
*.sqlite
prisma/migrations/
# メディア・バイナリ
public/images/
*.png
*.jpg
*.gif
*.mp4
設定後、claude を再起動すると即座に効く。体感として、Next.jsプロジェクトで .next/ を除外するだけでコンテキストが30〜40%削減される。
ポイントは「Claude Codeが読む必要のないファイルをすべて除外する」という発想だ。ドキュメント、テスト fixtures、生成済みの型定義ファイルなども積極的に除外していい。
Plan modeでトークン消費を半分にできるのはなぜか?
Plan mode(Shift+Tab でトグル)は、実行前に計画だけを立てさせるモードだ。これがトークン節約に絶大な効果を持つ理由がある。
通常モードでは、Claude Codeは試行錯誤を繰り返す。「やってみてエラーが出たら直す」というアプローチなので、実行・確認・修正のループがトークンを食う。
Plan modeでは、まず「何をどの順序でやるか」の計画だけを出力する。その計画を確認してから実行に移すので、無駄な試行錯誤が激減する。
# Plan modeの使い方
Shift+Tab で Plan mode をオンにする
→ タスクを指示する
→ 計画が表示される(ファイルの変更なし)
→ 計画を確認・修正する
→ Shift+Tab で通常モードに戻して実行
具体的な数値で言うと、「ユーザー認証機能を追加して」という指示をPlan modeなしで出すと、Claude Codeは手探りで実装してエラーを修正して、という流れになる。Plan modeを使うと、先に「どのファイルをどう変更するか」の計画が出るので、「3番目のステップはいらない」とフィードバックしてから実行できる。
大きなタスクほど、Plan modeの節約効果が大きい。
「あいまいな指示」はどれだけトークンを消費するのか?
指示の精度がトークン消費に直結する。以下の例を見てほしい。
悪い例(トークンを4倍消費する):
「ログイン機能を追加して」
この指示だと、Claude Codeは以下を全部確認してくる。
- 使う認証ライブラリは何か
- セッション管理の方式は(Cookie? JWT?)
- どのファイルにロジックを書くか
- UIコンポーネントはどこに置くか
良い例(1往復で終わる):
「NextAuth.js v5 を使って Google OAuth のログインを追加して。
セッションはJWT。/app/auth/ ディレクトリに実装して。
既存の middleware.ts に認証ガードも追加する。」
指示を書くときの原則は「5W1H を自分で答えてから投げる」だ。What(何を)、Where(どこに)、How(どのライブラリ・方式で)が揃っていると、往復がなくなる。
また、1タスク1メッセージの原則も重要だ。「ログイン機能を作って、テストも書いて、ドキュメントも更新して」を1メッセージに詰め込むと、Claude Codeは全部を一度に把握しようとしてコンテキストが膨らむ。分けて投げると合計トークンが減る。
MCPサーバーを必要な時だけ有効化するには?
MCP(Model Context Protocol)サーバーは強力だが、接続中は毎回のやり取りでツールリストがコンテキストに追加される。5つのMCPサーバーを常時接続していると、それだけで1メッセージあたり数百トークンの固定コストがかかる。
設定ファイルを確認する。
cat ~/.claude.json | jq '.mcpServers'
使い分けの方針はシンプルだ。
{
"mcpServers": {
"filesystem": {
"comment": "常時ON — ファイル操作は毎回使う",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/projects"]
},
"postgres": {
"comment": "DBタスク時だけON — 普段はコメントアウト",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
},
"github": {
"comment": "PR作業時だけON",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"]
}
}
}
「毎日使うMCPだけ常時接続、それ以外は作業開始時に有効化して終わったら無効化」というルーティンにするだけで、じわじわと消費量が減る。
/compact と /clear はそれぞれいつ使うべきか?
Claude Codeには会話履歴を管理するコマンドが2つある。これを正しく使うかどうかで、長いセッションのコスト感が変わる。
/compact: 会話履歴を要約してコンテキストを圧縮する。会話の内容は保持しつつ、トークン数を削減する。
/clear: 会話履歴を完全にリセットする。新しいタスクを始めるときに使う。
使いどきの判断基準は以下のとおり。
/compact を使う場面:
- 同じタスクを継続中だが、会話が長くなってきた
- 「前のステップを踏まえて次を」という文脈が必要
- セッション中盤(500〜1000メッセージ前後)
/clear を使う場面:
- タスクが完全に切り替わる
- 前の会話内容がまったく不要になった
- 新しい機能の実装を始める
- 翌日作業を再開する
ミスが多いのは「長くなったコンテキストを何となく放置する」パターンだ。会話が長くなるほど、Claude Codeは古い文脈も参照しようとする。関係のないやり取りが邪魔をして、かえって回答精度が下がりコストも増えるという悪循環になる。
区切りが来たら迷わず /compact か /clear を打つのがコツだ。
CLAUDE.mdを軽量に保つにはどうすればいいか?
CLAUDE.md はプロジェクトごとの指示書として機能するが、セッション開始のたびにフルコンテキストに乗る。肥大化すると固定コストになる。
削るべき内容:
- 「〜の経緯」「〜という背景から」といった歴史的説明
- 完了済みのタスクや過去の決定事項の詳細
- 外部ドキュメントへのリンク(Claude Codeは読めない)
- 長い免責事項や注意書き
残すべき内容:
- 技術スタックの一覧(箇条書き、3行以内)
- ディレクトリ構造の概要
- コーディング規約(重要なものだけ)
- 現在進行中のタスク
目安として、CLAUDE.md は 200行以内 に収める。それを超えるなら、詳細は別ファイルに分けてインポートする。
# CLAUDE.md(軽量版の例)
## Tech Stack
- Next.js 15 + TypeScript + Tailwind v4
- Prisma + PostgreSQL
- NextAuth.js v5
## Directory
- /app — App Router pages
- /components — UIコンポーネント
- /lib — ユーティリティ
## Rules
- コンポーネントはServer Componentsを基本とする
- データ取得はServer ActionsかRoute Handlers
- テストはVitest + Testing Library
## Current Task
- ユーザーダッシュボードの実装中
- 詳細: docs/current-sprint.md 参照
詳細は docs/ 配下に分けておき、必要な時だけ「このファイルを読んで」と指示する方が効率がいい。
月額コストは実際にどれくらい削減できるのか?
対策前後の消費量を実際の数字で比較する。前提は「Next.jsの中規模プロジェクトを毎日3〜4時間使う」ケースだ。
| 対策 | 削減効果 |
|---|---|
.claudeignore 設置 | -30〜40% |
| Plan mode の活用 | -20〜30% |
| 指示の精度向上 | -15〜25% |
| MCPサーバーの整理 | -5〜10% |
/compact の活用 | -10〜15% |
CLAUDE.md の軽量化 | -5〜10% |
複合効果で計算すると、対策前と比較して40〜55%の削減が現実的な数字だ。「50%削減」というのは誇張ではない。
Claude Codeは使い方によってコストが大きく変わるツールだ。無駄を削れば、同じ月額でできる作業量が倍になる。最初の一手は .claudeignore の設置——それだけでも体感が変わるはずだ。
まとめ
Claude Codeのトークン消費を減らすには、以下の順番で対策するのが効果的だ。
.claudeignoreを設置する — 即効性が最も高い。node_modules、.next/、バイナリファイルを除外する- Plan modeを習慣にする — 大きなタスクを実行前に計画で確認する
- 指示を具体的にする — 5W1Hを自分で答えてから投げる
- MCPサーバーを整理する — 常時接続は必要最小限に
/compactを使う — セッション中盤で積極的に圧縮するCLAUDE.mdを200行以内に保つ — 詳細は別ファイルへ
合計で月額コストを40〜55%削減できる。まずは .claudeignore から始めてほしい。