Claude Codeの自動メモリ棚卸しとccusageトークン使用量確認 ― 運用メンテナンスの一日
Claude Codeの自動メモリ棚卸しとccusageトークン使用量確認 ― 運用メンテナンスの一日
今日はコードをほとんど書かず、Claude Code の「運用」そのものに手を入れた。各プロジェクトが勝手に溜めていた自動メモリの棚卸し、月次トークンレポートの復旧、ネットワーク障害の切り分け、そしてリポジトリ整理の別セッション切り出し。地味な作業ばかりだが、放っておくと確実に腐る類のものを一気に片付けた。
自動メモリの棚卸し
朝一番に「各プロジェクトの Claude Code が自動的に溜めたメモリを棚卸ししたい」と投げた。正直、メモリなんて大して溜まっていないだろうと思いながらの依頼で、念のためサブエージェント並列で探索してよいとも伝えておいた。
結果は予想どおりで、~/.claude/projects/<プロジェクト>/memory/ 配下に自動メモリを持っていたのは 4 プロジェクトだけ。計 10 ファイル・約 34KB だった。並列で調べる前提で頼んだのに、量が少なすぎてサブエージェントを立てるまでもなく、全ファイルを直接読んで棚卸しが終わった。
所見はプロジェクトごとにはっきり分かれた。
- 業種別LPのプロジェクト: 古い日付のサブディレクトリ 4 ファイルが、リポジトリ側の memo/ と丸ごと重複
- mdx-playground: MEMORY.md の 2 セクションが、すでにスキルへ昇格済みの内容と重複
- 残り 2 プロジェクト: 小さく健全。触る必要なし
修正もそのまま任せた。方針は 2 点で、①重複 4 ファイルの削除、② MEMORY.md の縮約。ただし削除は消してから気づいても遅いので、リポジトリ側の memo/ と本当に同一内容かを diff で突き合わせてから消させた。この確認が効いて、1 ファイル(next-steps.md)だけ差分が見つかり、中身を確かめたうえで削除する流れになった。mdx-playground の MEMORY.md は、昇格済みセクションを本文ごと消して「詳細はスキル参照」のポインタ 2 行に縮めた。
最後に「残りって何かやることありましたっけ」と聞いたら、必須作業はゼロ、任意が 1 点という答えだった。あるプロジェクトの MEMORY.md に完了済み作業の履歴セクションが残っているが、現役のルート構成情報が混ざっているので消さずに残した、という判断つきの報告。「害がないなら消さない」で線を引けているので、そのまま採用した。棚卸し 3 件(全プロジェクト探索・重複削除・縮約)はタスクリストに完了として記録させ、ディスク上の最終状態も確認済みにしてもらった。
トークン使用量の月次確認と ccusage の復旧
「直近のトークン使用量をスラッシュコマンドで見られた気がするけど何だっけ」から始まった。答えは /cost。ただし欲しかったのは 1 か月分のレポートで、これが組み込みにあるのか記憶が曖昧だったので、正確に調べてもらった。
結論、/usage も /cost もセッション単位の表示で、月次レポート機能は Claude Code 組み込みには存在しない。月次で見たいなら選択肢は 2 つ。
- Anthropic Console の Cost ページ(公式の月次集計・CSV ダウンロード可)
- OSS の
ccusage(ローカルのセッションログから集計する CLI)
ccusage を npx で実行したら、インストール確認の y を押したところで起動に失敗した。ここから npm のトラブルシュートが始まる。
- 同型の報告がないか GitHub の issue を調べさせる → まさにこの症状の issue が見つかった
npm cache clean --forceを試す → 「Recommended protections disabled」の警告だけ出て、直らない- インストール済みパッケージを調べさせる → win32-x64 用のネイティブバイナリが入っておらず、代わりに
ccusage-linux-x64が入っていた。Windows マシンに Linux 用バイナリが鎮座していたのが直接原因 - 不足していた Windows 用ネイティブパッケージを直接インストール → 動いた
これは Windows 特有の問題ではなく、npm の optional dependencies(プラットフォーム別ネイティブバイナリ)が正しく解決されない既知のバグとのこと。esbuild や sharp でも同じ症状が頻発しているらしい。キャッシュを疑って掃除する定番の一手が空振りして、実体は「入っているバイナリのプラットフォーム違い」だった、という順番が今日の収穫だった。
もう 1 つ、PowerShell で ccusage 単体が「認識されない」問題も残った。こちらは mise 管理の node ディレクトリが現在の PowerShell セッションの PATH に反映されていないのが原因で、PowerShell の再起動で解決する類のもの(それでもダメなら mise reshim)。バイナリの問題と PATH の問題が同時に起きていて、1 つ直しても動かない状態だったわけだ。
ルーターの DNS 不調でセッションが繋がらない
昼前、別のセッションだけ Claude Code が接続できなくなった。起動画面のドットが延々と並ぶだけで先に進まない。動いている側のセッションに DNS 解決・実際の接続・プロキシ設定・hosts ファイルをまとめて切り分けさせたところ、Anthropic 側の障害でもアカウントの問題でもなく、自宅ルーターの DNS 不調による一時的な接続障害と特定できた。調べ終わった時点ではすでに繋がる状態に戻っていて、切り分け結果は issue ファイルにナレッジとして記録させた。次に同じ症状が出たとき、サービス側の障害を疑う前にここを見に来られる。
ルーターを再起動しようとして、ボタンを押すのか電源を切ればいいのか分からず聞いた。家庭用ルーターのほとんどは電源ボタン自体がなく、AC アダプタを抜いて 10〜30 秒待ってから挿し直すのが標準的な再起動方法だと教わった。1 つだけ重要な注意があって、本体の小さな穴に埋まった「RESET」ボタンは押してはいけない。あれは再起動ではなく工場出荷状態への初期化で、Wi-Fi 設定やプロバイダ設定が消える。
リポジトリ整理を別セッションに切り出す
確定申告関連リポジトリの整理作業は、このメインセッションでやらずに別セッションへ切り出した。用意したのはプロンプト 2 枚。
- ① 整理セッション用: 対象リポジトリで起動して整理作業を実行する
- ② 後続セッション用: mdx-playground 側で起動し、①の完了を待ってから成果を確認して次工程に進む
②のセッションは①の完了待ちの間に必要な資料を先読みさせておいた。待ち時間を仕込みに使う形にすると、①が終わった瞬間から本題に入れる。
①が終わったあとの確認で、想定していなかった新しいディレクトリができているらしいと気づいたので、「両方確認するように」と指示を足した。切り出したセッションの成果は鵜呑みにせず、後続側でもう一度ディスクを見て検証する構えにしておいてよかった。
②の検証は段階を踏ませた。成果物の実在確認、公開物への固有名詞混入検査(ゼロを確認)、図解のエスケープ漏れチェック、dev 環境での表示確認をスクリーンショットで 1 枚ずつ。途中で dev サーバーへの接続が一度拒否されてサーバー状態の確認を挟んだり、開きっぱなしの作業タブを閉じる掃除が入ったりしたが、最終的に全部通った。
最後に「ドラフトとしてコミットしておいて」で 2 コミットに分けて記録した。検証済みである旨もコミットメッセージに残させている。コミット・デプロイの本番反映は人間ゲートとして残してある。下書きまで、が今回の約束だったので、そこで止めるのが正しい。
学び
- 自動メモリは思ったより溜まらない(4 プロジェクト・34KB)。ただし「リポジトリ側 memo/ との重複」「スキル昇格済み内容の残骸」という形で確実に腐るので、定期的な棚卸しは要る
- メモリ削除の前に diff で同一性を確かめる一手間が、差分ありファイルの取りこぼしを防いだ
- npm でネイティブバイナリ系ツールが動かないときは、キャッシュより先に「どのプラットフォーム用バイナリが入っているか」を疑う。linux-x64 が Windows に入っていることがある
- バイナリ誤解決と PATH 未反映が同時に起きると、片方を直しても動かず沼る。問題は分けて数える
- 「別セッションだけ繋がらない」はまずネットワーク層の切り分け。今回はルーターの DNS 不調で、サービス側の障害を疑う前に足元を見るべきだった
- ルーターの再起動は電源ケーブルの抜き差し。RESET 穴は初期化なので押さない
- セッション切り出しは「①実行役・②完了待ちの検証役」の 2 枚構成にして、②に資料の先読みをさせておくと待ち時間が無駄にならない
- 切り出したセッションの成果は後続側でもう一度ディスクを見て検証する。想定外のディレクトリ追加のような「聞いていない変化」はこの二重確認で拾える
積み残し
- PowerShell 再起動後に
ccusage monthlyが通るか確認する。認識されなければmise reshimを実行する - 任意: 完了済み作業の履歴が残る MEMORY.md のセクションを消すか判断する(現役のルート構成情報が混ざっているため、当面は残す方針)
締め
機能を 1 つも足していないのに、diff で消し、バイナリを入れ替え、ケーブルを抜き、コミットを 2 つ積んだ一日だった。メモリの重複もプラットフォーム違いのバイナリも DNS の不調も、放置している間は静かに座っているだけで、いざ使う瞬間に牙をむく。使う前の暇な日に潰しておくのが、たぶん一番安い。