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 Codeを軽くする ― コンテキスト注入を228KBから48KBに削った監査

0
Last updated at Posted at 2026-06-21

前回、Claude Codeに自分でスキルを書かせて育てる話を書きました。スキルやプラグインを増やしていくと、いつか必ずぶつかるのがセッションが重くなる・指示を取りこぼす問題です。今回は、その原因を測定してコンテキスト注入を228KBから48KBまで削った監査の記録です。

症状:直近の指示を取りこぼす

ある時期から、Claude Codeがこういう挙動をするようになりました。

  • セッション開始が重い
  • 「さっき言ったこと」を無視して、前の話題と混線する

最初は「モデルの調子」かと思いましたが、違いました。SessionStartで注入されるコンテキストが膨らみすぎて、直近のユーザー指示が埋もれていたのが原因です。注入が大きいほど、会話の最新部分の相対的な存在感が薄まります。

切り分け:重いのとボケるのは原因が違う

監査して分かった大事な切り分けがこれです。

症状 真犯人 対処
セッションが重いだけ 有効プラグインの数 未使用プラグインを disable
直近指示を取りこぼす・話が混線する 注入総量 注入源を測って刈り込む

「重い」と「ボケる」を一緒くたにすると、プラグインばかり削って効果が出ません。ボケる方の本命は別にあります。

測定:注入源ごとのバイト数を出す

注入源は複数あります。プラグインのメタdata、rules/、Obsidian文脈、auto-memory、remember履歴。これをソースごとに実測します。トークンはざっくり「バイト数 ÷ 4 ≒ 英語トークン」で見積もれます。

# rules/ 配下は「グローバル指示」として全文が自動ロードされる(上限なし)
find ~/.claude/rules/ecc -name '*.md' -exec cat {} + | wc -c

# auto-memory(MEMORY.md は全文注入)
wc -c ~/.claude/projects/*/memory/MEMORY.md

# remember 履歴(now/recent/archive が注入対象)
wc -c ~/.remember/now.md ~/.remember/recent.md ~/.remember/archive.md

測ってみると、犯人は一目瞭然でした。**rules/ecc 単独で約57Kトークン(≒228KB)**を占めていて、全注入のなかで群を抜く最大ブロックだったのです。

なぜ rules/ がそんなに重いのか

ここが一番の落とし穴でした。~/.claude/rules/ 配下は、@import で必要な時に読むのではなく、Claude Codeがグローバル指示としてディレクトリ全体を毎回フルロードします。

僕の rules/ecc には、汎用ルールパック由来で 10言語分のルール(angular / golang / swift / php / ruby / arkts / java / kotlin …)が丸ごと入っていました。僕が実際に書くのは Python / TypeScript / Web の3つだけなのに、使いもしないSwiftやRubyのコーディング規約が、毎セッション全文注入され続けていたわけです。

修正:使う言語だけ残して「ツリーの外」へ逃がす

rules/ は @import ではなくディレクトリロードなので、import行をいじる必要はありません。ファイルをツリーの外に mv するだけで注入が止まります。そして戻したい時は mv で戻すだけ ―― 完全に非破壊です。

# 使う言語(common/python/typescript/web)だけ残し、残りはツリー外へ退避
A="$HOME/.claude/.rules-archive/ecc"; mkdir -p "$A"
cd ~/.claude/rules/ecc
for d in angular arkts cpp csharp dart fsharp golang java kotlin perl php ruby rust swift zh; do
  [ -d "$d" ] && mv "$d" "$A/"
done
# 復元は mv "$A/rust" ~/.claude/rules/ecc/ で1個ずつ

隠しディレクトリ(.rules-archive)でも、rules/ ツリーの中に置くと誤ロードされる恐れがあります。退避先は必ずツリーの外にしてください。

結果

刈り込み後、現在の rules/ecc を測り直すとこうなりました。

$ find ~/.claude/rules/ecc -name '*.md' -exec cat {} + | wc -c
48092
$ ls -d ~/.claude/rules/ecc/*/ | xargs -n1 basename
common
python
typescript
web

228KB(≒57Kトークン)→ 48KB(≒12Kトークン)。約79%減。ディレクトリも10言語から4つに減りました。新規セッションを開くと、起動が軽くなり、直近指示の取りこぼしも明確に減りました。

踏んだ落とし穴

ディスク掃除とトークン削減は別物

最初、Obsidianの hot.md が32KBに膨らんでいたので「これを削れば軽くなる」と思いました。間違いでした。Obsidian文脈は注入スクリプト側で hot.md=9000字 / index=2500字 と既に上限カットされていて、ファイルが何KBに膨らもうが注入量は約7Kトークンで一定です。

同じく remember の today-*.done.md も注入対象外。これらを消すのはディスク整理であって、トークンは1bitも減りません。「ファイルが大きい=注入が重い」は成り立たないので、必ず注入源を実測してください。

MAXプランでもメリットはある

「MAXプランなら$/tokenは定額だから関係ないのでは?」と思うかもしれません。コスト面はその通りです。でも削減の本当のメリットは別にあります。

  • コンテキスト窓の節約(長い作業で効く)
  • キャッシュヒット率の安定化
  • セッション起動の高速化
  • そして何より、直近指示が埋もれない

disable は可逆、uninstall は非可逆

プラグインを減らす場合、settings.json の enabled: true→false なら即ロールバックできます。claude plugin uninstall はディスクごと回収するので非可逆。まずは disable で様子を見るべきです。ただし、disableするとそのプラグインのスラッシュコマンドはエラーになるので、稀にしか使わないが重要なコマンドは残します。

まとめ

  • 「重い」(=プラグイン数)と「ボケる」(=注入総量)は別の問題。混同しない
  • ~/.claude/rules/ は @import ではなくディレクトリ全文ロード。最大の注入源になりやすい
  • 修正はファイルをツリー外へ mv するだけ。ロールバックも mv =非破壊
  • ディスク掃除 ≠ トークン削減。必ず注入源をバイトで実測する
  • 結果:228KB → 48KB(約79%減)、起動も応答も軽くなった

次回は、これらの自動化(スキル生成・監査・ブリーフ)を24時間回すために組んだ launchd の話と、そこで踏んだmacOS固有の罠を書きます。


Lily(@bokuwalily)― 個人開発者。Claude Code で自動化基盤を組みながら、iOSアプリやWebサービスを量産しています

皆さんの ❤️ やシェアが励みになります!

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?