ガイド

Macを眠らせていないのは何か

Macがスリープせず、ファンが回り、目立つものは何も動いていない。macOS がもったいぶっているわけではありません。何かが「起きていろ」と伝えていて、その何かには名前とプロセスIDがあり、こちらから尋ねられます。このガイドでは、その見つけ方、答えの読み方、そして見ていない間に何が起きたかを確認する方法を説明します。最後に逆の問題 — 終わらせたい作業の途中でMacが寝てしまう — にも触れます。それこそが Perked の存在理由です。

匿名でMacを起こし続けるものはない

macOS は電源アサーション(power assertion)の一覧を見て、スリープしてよいかを判断します。アサーションとは「まだ待って」と伝える、実行中プロセスからの要求です。そのひとつひとつに、要求したプロセス、妨げているスリープの種類、そしてたいていは人間が読める理由が記録されています。

ここが肝心です。匿名のスリープ抑止というものは存在しません。眠るべきときにMacが起きているなら、どれかのプロセスが記録に残っており、2つのコマンドでそれが分かります。

システムに尋ねる: pmset -g assertions

ターミナルで pmset -g assertions を実行します。上のブロックはシステム全体の集計で、PreventUserIdleSystemSleep の横が 1 なら、今まさに何かがスリープを止めています。本当に見たいのは下のブロックです。所有プロセスごとにアサーションが並びます。

名前に心当たりがなければ、その行の番号で ps -p <pid> を実行すると、背後の完全なコマンドが分かります。単に終了できるプロセスなら、終了した時点でアサーションはすぐ解放されます。後片付けは要りません。

一覧が空だったとき

よくある苛立ち。昨夜は明らかにスリープを拒んでいたのに、朝になって pmset -g assertions を見ると何もない。これは不具合ではありません。アサーションはその瞬間の状態です。保持していた何かはすでに終了していて、証拠も一緒に消えています。

アサーションでは決して説明できない、もうひとつの原因もあります。Macは起こされ続けたのではなく、起こされたのです。ネットワーク通信、Bluetooth機器、予定されたタスク、USB機器、電源アダプタの接続 — どれもスリープから引き戻します。どちらの場合も、現在の状態ではなく履歴が必要です。

「午前3時に何が起こしたのか」に答えるコマンド

pmset -g log は多くの解説が飛ばす部分ですが、事後に効くのはこれだけです。すべてのスリープ、復帰、アサーションの変化を理由付きで記録し続けています。何がマシンを起こしたのか尋ねてみましょう。

先頭からではなく、気になる時刻から読んでください。ログは数日分あるので、「今朝バッテリーが4%だったのはなぜか」の答えは、たいてい就寝時刻あたりの一行です。

GUIで見る: アクティビティモニタ

ターミナルを使いたくなければ、アクティビティモニタの「エネルギー」タブに「スリープを妨げている」列があります。そこで並べ替えれば、犯人のアプリが一番上に来ます。手早く、よくある「明らかなアプリが1つ」のケースには十分です。

ただし表示されるのはアプリケーションだけで、しかも現在の状態だけです。バックグラウンドのデーモン、コマンドライン ツール、すでに終了したものは出てきません。だからこそ、上の pmset コマンドが確実な答えであり続けます。

よくある容疑者

逆の問題: 起きていてほしいのに寝てしまう

これを調べた人の多くは、やがて逆の問題に行き当たります。Macがスリープし、長時間のジョブを道連れにしたのです。AIコーディングエージェント、ビルド、レンダリング、夜通しのスクリプト — マシンがアイドルに入ると静かに死に、そのどれも自前のアサーションを持ちません。

力ずくの対処には現実的な代償があります。caffeinate は、止めるのを思い出すまで何もかもを起こしたままにします。sudo pmset -a disablesleep 1 はスリープをシステム全体で無効にし、管理者パスワードを要求し、取り消すまで再起動をまたいで無効のままです — 人がこのページに辿り着く原因は、たいていこれです。

Perked は同じ発想を対象を絞って実現します。コーディングエージェントと、あなたが指定した任意のプロセスを監視し、実際に動いている間だけアサーションを保持し、終わった瞬間に手放します。その間も電源を意識し — 電源接続時のみ、または設定したバッテリー残量以上 — Macが熱くなりすぎたら一時停止します。その働きはすべて、上の例と同じように pmset -g assertions に自分の名前で現れるので、いつでも確認できます。

よくある質問

macOS の電源アサーションとは何ですか?

実行中のプロセスが macOS に「スリープしないで」と求める要求です。それぞれに、要求したプロセス、妨げるスリープの種類、たいていは読める理由が記録されます。この一覧に現れずにMacを起こし続けられるものはありません。

今Macを起こしているものを見るには?

ターミナルで pmset -g assertions を実行し、「Listed by owning process」のブロックを読みます。プロセスID、アサーションの種類、保持時間、示された理由が並びます。アクティビティモニタの「エネルギー」タブの「スリープを妨げている」でも、アプリについて同じことが分かります。

pmset -g assertions が空なのに、Macがスリープしませんでした。なぜ?

アサーションはその瞬間の状態だからです。保持していたものはすでに終了しています。代わりに pmset -g log を使ってください。履歴が残るので、起きた時刻をそのまま確認し、どのプロセスがアサーションを取ったのか、あるいは何がマシンを起こしたのかが分かります。

何がMacを起こしたのか調べるには?

pmset -g log | grep -i "Wake from" を実行します。各行に時刻と理由が出ます — ユーザー操作、en0 のネットワークパケット、USB機器、予定されたメンテナンスの復帰など。これらはアサーションではなく復帰なので、pmset -g assertions には決して現れません。

pmset disablesleep 1 を実行したらMacがスリープしなくなりました。戻すには?

sudo pmset -a disablesleep 0 を実行し、pmset -g | grep SleepDisabled で 0 になっていることを確認してください。この設定はシステム全体に効き、再起動しても残るため、自然には消えません。

特定のジョブの間だけMacを起こしておけますか?

はい。caffeinate -w <pid> はそのプロセスが終わるまでアサーションを保持し、caffeinate -i <コマンド> は指定したコマンドの実行中だけ保持します。Perked は同じことを、AIコーディングエージェントとあなたが追加した任意のプロセスに対して自動で行い、さらにバッテリーと温度の制限を重ねます。

どのプロセスのせいか、当てずっぽうはもう終わり

Perked はエージェントが実際に動いている間だけMacを起こし、その判断をすべて記録します。買い切り €1

価格を見る →

関連ガイド

ここまでの多くを支えるコマンド: macOS の caffeinate コマンドをフラグごとに →

長時間のジョブを任せきりに? MacでAIコーディングエージェントを夜通し動かす →

ふたを閉じたい? MacBookをふたを閉じたまま起こしておく →

← Perked に戻る