コーディングエージェントの実行中にMacやPCをスリープさせない方法
コーディングエージェントが長いタスクを実行している間、caffeinateやスリープ設定でMacやWindows PCのスリープを防ぎ、終わったら設定を元に戻す手順を説明します。
コーディングエージェントの実行中にMacをスリープさせないには、ターミナルを開いてcaffeinate -iを実行し、タスクが終わるまでそのウィンドウを開いたままにします。Windows 11では、「設定」で電源接続時のスリープまでの時間を「なし」にし、終わったら元に戻します。ノートパソコンは電源アダプタにつなぎ、ふたを開けたままにしてください。
この記事ではmacOSとWindows 11を扱います。ふたを閉じたままノートパソコンを動かす方法は扱いません。ReunifiedのMonoはエージェントの作業中にMacをスリープさせないようにできますが、ここで紹介する手順はどのエージェントでも使えます。
1. スリープがエージェントのセッションに与える影響を知る
スリープすると、エージェントを含むすべてのプログラムが一時停止し、ネットワーク接続も切れます。セッションが正常に復帰しないこともあります。
- ディスプレイのスリープは画面を消すだけです。プログラムは動き続けます。
- アイドル時のスリープは、入力がない状態がしばらく続くとパソコンをスリープさせます。エージェントが作業していても、入力とは見なされません。
- ノートパソコンのふたを閉じると、アイドル時の設定にかかわらず、通常はスリープします。
- シャットダウンや再起動をすると、セッションは終了します。
スリープ中や電源が切れたパソコンを、スマートフォンから起こせるとは考えないでください。
架空の例で考えます。昼食の前に、「tidy-recipes」プロジェクトで依存関係のアップグレードとテストの実行をエージェントに任せて席を離れます。電源につないだMacBook Airで、約40分かかる作業です。
2. caffeinateで1つのタスクの間だけMacのスリープを防ぐ
caffeinateはmacOSに標準で入っています。-iを付けると、実行している間はアイドル時のスリープを防ぎます。実行が終わると、普段の設定に戻ります。
| コマンド | 効果 |
|---|---|
caffeinate -i |
Control-Cで止めるまでスリープしない |
caffeinate -i <command> |
コマンドを実行し、それが終了するまでスリープしない |
caffeinate -i -t 3600 |
3,600秒(1時間)スリープしない |
caffeinate -i -w <pid> |
そのプロセスが終了するまでスリープしない |
caffeinate -d |
ディスプレイをオンのままにする |
tidy-recipesのエージェントはデスクトップアプリの中で動いているため、caffeinate経由では起動できません。代わりに、40分の作業に対して1時間分のcaffeinate -i -t 3600を実行し、そのターミナルのウィンドウを開いたままにします。-wに渡すIDはアクティビティモニタの「PID」列で分かり、すべてのオプションはman caffeinateで確認できます。
3. 長いセッションに向けてMacのスリープ設定を変える
エージェントを何時間も、あるいは毎日動かすなら、代わりに設定を変更します。場所はAppleのスリープとスリープ解除の設定に関するガイドに載っています。
- ノートパソコン:「システム設定」>「バッテリー」>「オプション」で、「電源アダプタ使用時はディスプレイがオフのときに自動でスリープさせない」をオンにします。
- デスクトップ:「システム設定」>「エネルギー」で、「ディスプレイがオフのときに自動でスリープさせない」をオンにします。
Appleは、スリープを防ぐと電力消費が増える可能性があると注意しています。「ネットワークアクセスによるスリープ解除」は、共有サービスのためにMacを短時間起こすだけで、エージェントを動かし続けるものではありません。
Mac版のMonoでは、「設定」>「Code」に「エージェントの実行中はスリープを抑止」があり、初期設定でオンです。エージェントが応答を終えるまで、アイドル時のスリープを抑えます。ただし、ふたを閉じればMacはスリープします。同じく初期設定でオンの「ロック中も動作を継続」は、画面がロックされている間も開いているセッションを続けさせます。Windows版のMonoにはスリープの設定はありません。
4. Windows PCをスリープさせない
Windows 11では、Microsoftの電源設定に関するガイドにあるとおり、「スタート」>「設定」>「システム」>「電源とバッテリー」>「画面、スリープ、休止状態のタイムアウト」を開きます。デスクトップPCでは、このページの名前が「電源」になっていることがあります。
デバイスをスリープ状態にするまでの時間の項目(Make my device sleep after)で、電源接続時の値を書き留めてから、「なし」か、タスクより十分に長い時間に設定します。
翌日、30分でスリープするWindowsのデスクトップPC「den-pc」で、同じような40分のタスクを実行するとします。スリープまでの時間がタスクより短いので、「30分」と書き留めてから「なし」を選びます。
あとでターミナルからタイマーを元に戻すときは、powercfgに分単位で値を渡します。powercfg /change standby-timeout-ac 30です。
5. 動かしたまま離れる長いタスクの準備をする
離れる前に、次の表を埋めます。
| 確認項目 | MacBook Air | den-pc(Windows) |
|---|---|---|
| 電源とふた | アダプタを接続、ふたは開けたまま | デスクトップ、電源に接続 |
| スリープを防ぐ方法 | caffeinate -i -t 3600 |
スリープを「なし」に設定 |
| 戻す値 | 不要 | 30分 |
| アップデートを適用済みで、再起動待ちがない | はい | はい |
| エージェントが動作中、通知をテスト済み、スマートフォンを充電済み | はい | はい |
エージェントの最初のステップは見届けてください。サインインの要求や足りないツールで止まらないようにするためです。作業の完了や承認待ちに備えてコーディングエージェントの通知を設定し、スマートフォンから進み具合を追うにはリモートコーディングのガイドを参考にしてください。
6. タスクが終わったら設定を元に戻す
caffeinateをControl-Cで止めるか、指定した時間が過ぎるのを待ちます。- オンにしたMacのスリープ関連の項目をオフにします。
- Windowsでは、書き留めたスリープまでの時間に戻します(den-pcでは30分)。
そのあと、まだスリープを妨げているものがないか確認します。Macでは、ターミナルでpmset -g assertionsを実行し、「Listed by owning process」の下を見ます。caffeinateはそこに表示されないはずです。オーディオやシステムの項目が出るのは正常です。Windowsでは、管理者として開いたターミナルでpowercfg /requestsを実行します。ディスプレイをオンのままにしたり、パソコンのスリープを妨げたりしているアプリやドライバーが一覧表示されます。
最後に、何かをコミットする前にエージェントの変更内容を確認してください。Monoはまだ公開前ですが、ウェイトリストに登録できます。
