[Claude Code]Mac mini (M1, 2020) に無理をさせない方法

  • Claude Code
  • AGENTS.md

ぬにょす(挨拶)。

プロジェクトごとの Claude Code のセッションを、5つ同時に起動しています。

[Claude Code / Herdr] 4プロジェクト+秘書+作業用、6ペインの実態 | amiiby1つのリポジトリの中の並列ではなく、プロジェクトごとに立てた Claude Code のセッションを同時並行で相手にし、プロジェクトをまたぐ用事は常駐の秘書セッションに任せる話。作業環境の図と、秘書の使い方つき。amiiby.com

セッションは、ほかのセッションが何をしているかを知りません。それぞれが自分の都合でビルドやテストを始めるので、重なると負荷がかかり過ぎて、流した処理が失敗したり中断されたりすることが。Rust のビルド、Playwright のテストなど。

私のマシンは M1・メモリ 8GB の Mac mini(2020)なので、かなりカツカツです。RunCat Neo にはお世話になってます。気づけばメニューバーでネコが爆走しています。

RunCat Neo の表示。CPU の使用率が 99.8%、メモリが 83.4%

重い処理ということはそれなりに時間もかかるわけで、やり直しは避けたい。そこで、どうしたかというのが今回のお題です。

重い処理を始める宣言 → ボツ

最初に試したのが、重い処理を始めるセッションから他のセッションへ「始めるよ」「終わったよ」を伝えること。そうすれば他のセッションが重い処理を始めようとしても、ブレーキがかかるのではないかと。

思惑通りブレーキはかかりました。あるセッションが重い処理を実行している間は、他のセッションは待ちました。

そう、他のセッションは、みんな待ってくれました。そこに「終わったよ」という連絡がきます。

どうなったかは推して知るべし。我々が社会生活の中で身に付けてきた「気配り」とか「遠慮」とは、なんと尊いものか。

CPU の空きで判断させる → ボツ

彼ら(セッション)はマンガ喫茶の個室にいるようなものだ。他の客の様子は分からないし、知りたいとも思わない。だが、店員(マシン)が暇なのか忙しいのかは分かる。

ならば、店員(マシン)が忙しそうだったら声をかけない(重い処理を走らせない)ようにすればいい!

どうなったかは推して知るべし。「いつ見ても忙しそう」なのと「いつも忙しい」のは違うんだよ。

そしてどうなった

CLAUDE.md / AGENTS.md での指示は最低限にして、なるべく定型的・機械的な方向にしました。

フック:コマンドが流れる瞬間に止める

PreToolUse フックで重いコマンドを検出したら CPU の空きを測り、もし 10% を切っていれば実行させず、セッションにこう返すようにしました。

CPU の空きが 4.2% で、10% を切っているため、重い処理を止めました。

測り方も線引きもフックの中に決め打ちで、セッションは何も判断しません。完全に機械的な処理です。

何を重い処理とするかですが、cargo・pnpm・npm・docker などのビルド・テスト・インストールは、フックの既定で、全プロジェクト共通の重い処理としています。プロジェクトごとに足したいもの・外したいものがあれば、.claude/heavy-commands.json でカスタマイズできるようにしました。

.claude/heavy-commands.json
{
  "heavy": ["just ci", "node e2e/run.mjs"],
  "light": ["cargo check"]
}

mod:空いたら知らせる

フックで実行を止めた場合は、mod(Claude Code のプラグイン)で1分ごとに空きを測り、空いたらセッションに知らせるようにしました。

[重い処理の待ち] CPU の空きが 62.5% に戻った。止められた次の処理を流し直してよい(heavy-task skill)。
pnpm build

知らせが来るまで、セッションは軽い作業を進められます。15分たっても空かなければ、待ち続けるか強行するかを私に聞いてくるようにしました。

スキル:フックが届かないところの代わり

フックの既定にも heavy-commands.json にも無い重い処理は、流す前にセッションが自分で測るようにしました。フックの無い Codex などのエージェントも同じです。その手順がスキルです。

スキルでも、測り方と線引きはフックと同じ決め打ちです。全体で70行程度ありますが、具体的な指示の部分はこんな感じ。

heavy-task/SKILL.md
1. 始める直前に、次のコマンドで CPU の空きを測る。
   - macOS: `top -l 2 -n 0 -s 1 | grep 'CPU usage' | tail -1`
2. CPU の空きが 10% を切っていれば「厳しい」とみなし、始めない。

こちらは知らせてくれる mod がいないので、5分おきに3回まで自分で測り直すようにしました。それでも空かなければ、やはり私に聞くようにしています。

指示ファイル:AGENTS.md には1行だけ

AGENTS.md に書いてあるのは、この1行だけです。フックが測るコマンドでは、スキルを呼ばないようにしました。同じことを二重に測るだけなので。

AGENTS.md
- CPU・メモリ・ディスクを長時間大きく使う処理(フルビルド・全体テスト・`docker build`・依存の一括インストールなど)は、始める前に `heavy-task` skill で負荷を確かめる。同じ目安で測って止める hook が拾うコマンドは、hook に任せて skill を呼ばない。

これらのファイルは yorozuya で公開しています。

GitHub - miyabi-satoh/yorozuya: 複数の Claude Code セッションを手元で運用するための skill 集複数の Claude Code セッションを手元で運用するための skill 集. Contribute to miyabi-satoh/yorozuya development by creating an account on GitHub.github.com

おわりに

まぁ、こんな工夫をしなくても、Mac mini を買い替えればいいんですよ。それが一番手っ取り早い。だけど高い! メモリの価格が高騰してるのか円安のせいなのか分かりませんが。

Mac mini は本体のみ、だからお手頃価格。なのにスペック良し!だったのになぁ。Mac mini が 10万円以下で買える時代はもう来ないのか…涙

記事の一覧へ