AIToday
AIコーディングZenn AI/ML掲載日時: 2026年10月9日 22:00

Claude Code 蓋閉じると停止、pmsetで防ぐ

LINEで送る
Claude Code 蓋閉じると停止、pmsetで防ぐ

MacBookの蓋を閉じたままClaude Codeのサブエージェントを一晩動かすとRequest timed outで失敗。

わからないところ、AIに聞けます

質問と回答はこのページに公開されます。

こういう要約が、毎朝あなたのメールに届きます。

背景と解説

筆者が説明する問題はコードやAPIのバグではなく、macOS自体にある。外部ディスプレイを接続せずに蓋を閉じると、マシンはログに「Clamshell Sleep」と記録される状態に入り、その瞬間に実行中だったリクエストが切れる。失敗はすぐには表面化せず、数時間後のDarkWake中に「Request timed out」として記録された。この時間差のせいで症状は不可解に見え、原因を誤って捉えやすくなる。

役に立ちそうなツールも効かない。`--bg`のバックグラウンドセッションとRemote Controlはどちらも実行を手元のMacに置くため、スリープをまたいでも維持されるが、スリープ中は何も進まない。`caffeinate`とDesktopアプリの「Keep computer awake」はアイドルスリープしか対象にしない。記事中で引用されたmacOS SDKのコメントにあるように、蓋を閉じた場合やバッテリー低下などではシステムはスリープする可能性がある。筆者はアイドルスリープはすでに対策済みだと指摘する。Claude Code自体が`caffeinate -i -t 300`の子プロセスを起動しているため、残る穴は蓋だけだ。

提案された修正`sudo pmset -a disablesleep 1`は通常のターミナルで実行する必要がある。Claude Codeの`!`bashモードにはパスワードを読み取る端末がないためだ。興味深いことに、変更後も`AppleClamshellCausesSleep`フラグは`Yes`のまま表示される。公開されているXNUのソースを読んだ限りでは、`SleepDisabled`は別の`userDisabledAllSleep`経路を設定してクラムシェルスリープ要求を拒否するため、`pmset -g log`の方が信頼できる確認方法だという。筆者はバッテリー駆動かつ蓋を閉じた状態で一度だけ、閉じていた時間も記録せずに試しており、この設定が非公開であることも警告している。だからこそ電力消費、発熱、元に戻すことへの注意が必要なのだ。

よくある質問
`--bg`やRemote Control、`caffeinate`では、蓋を閉じた状態でClaude Codeを動かし続けられないのはなぜか?
`--bg`とRemote Controlはいずれも手元のMac上で実行されるため、マシンがスリープしている間は何も進まない。`caffeinate`とDesktopアプリの「Keep computer awake」はアイドルスリープを防ぐだけで、蓋を閉じればシステムはスリープする。
スリープ設定が実際に効いているかはどう確認するのか?
`pmset -g | grep SleepDisabled`を実行し、`SleepDisabled 1`を探す。筆者はさらに`pmset -g log`を`(Sleep|Wake|DarkWake) {2,}`で絞り込み、`caffeinate`のアイドルスリープ抑制の行が本当のスリープ・復帰の記録を埋もれさせないようにした。
クラウドセッション(`claude --cloud`)を使えばいいのではないか?
クラウドセッションはノートPCを閉じても動き続けるが、ローカルのデータベース、localhostのサービス、SSHトンネル、マシン上にしかない認証情報にはアクセスできない。筆者によればPro / Max / Teamプランとclaude.aiへのログインが必要で、アイドル状態が続くと回収される可能性もある。
LINEで送る

あなたの仕事に関係するAIニュースを、毎朝お届けします。

業界と使っているAIツールを選ぶと、仕事に関係するニュースが毎朝届きます。

登録無料・Googleアカウントなら30秒・いつでも解除できますAITodayについて →

AIに質問

この記事についてわからないことをAIに質問できます。AIはこの記事・AIToday の過去記事・Wikipedia を読み、出典を付けて答えます。Q&Aはこのページに公開され、他の読者も読めます。

質問と回答はこのページに公開されます。

関連記事

次の記事へOpenAI、ロシアとイランの工作アカウントを停止