MBP M4からMac miniに移行して、再起動しても放っておけば全部戻ってくる母艦にするための設定と落とし穴について備忘録的にまとめました。
Mac miniを母艦化するのにやった設定
先日MacBook Pro M4からMac miniに移行しました。cron、launchd、SNS自動投稿など、常時動かすジョブが20本近くあります。なので「再起動しても放っておけば全部戻ってくる」「家でも外でも画面共有で接続してAI開発の母艦にする」状態にするのが目標でした。
移行そのものの話はこちらです。
まず電源:止まらない、落ちても戻る
まず前提常時稼働なので、スリープは恒久的に切ります。またブレーカー落ちや停電などの電源寸断への対策として無停電装置、UPSを設置しMac miniと接続する必要もあります。MacBookの時はバッテリーがあるのであまり気にしていなかった部分。
sudo pmset -a sleep 0 disksleep 0 womp 1 autorestart 1
- autorestart 1: 停電から復帰したら自動で起動する
- womp 1: ネットワーク経由での復帰を許可する
UPS(CPJ500)を付けたので、停電時にはそのまま稼働しますが、いよいよ残量が減ったら安全にシャットダウンさせます。
sudo pmset -u haltremain 10 # 残り10分で自動シャットダウン
10分は適当です。ですがここに落とし穴がありました。UPS給電時の電源プロファイルはACとは別で、初期値はsleep 1、womp 0、disksleep 10でした。ACの設定だけでは、停電中にスリープしてしまうわけです。UPS側にも同じ値を入れる必要があります。
sudo pmset -u sleep 0 disksleep 0 womp 1
pmset -g customで、UPS PowerとAC Powerの両方がsleep 0、disksleep 0、womp 1になっていることを確認しました。
UPSの話はこちらにも書いています。
ログイン:FileVaultをやめて自動ログイン
いちばん大事な設定がここでした。
電源が復旧したらMac miniは起動再開しますが、デフォルトのままだとログインしていないのでただただ誰かのログインを待つMacになってしまいます。なので自動ログインする必要が。
ところがファイルシステムでFileVaultがオンだと、自動ログインが使えません(Automatic login is disabled because FileVault is enabled.)。再起動後にログイン画面で止まって、launchdもcronもTailscaleも動きません。無人運用では致命的なので、FileVaultをオフにして、自動ログインを有効にしました。
再起動テストで、自動ログイン、Tailscale、ssh、DBトンネル、cron、launchdがすべて自動で復帰しました。
FileValultはディスクの暗号化で本来紛失時などの対策ですが、Mac miniの場合持ち出すこともないし、それにこだわって自動復帰できなくなると本末転倒なのでこの設定はトレードオフですね。
ネットワーク:有線優先、名前で接続
せっかくMac miniにしたのでネットワーク接続はEthernetで有線接続にしています。そんなに回線速度が必要になるわけじゃないんですが。
外からはTailscaleで繋ぐので特に無線ルーター側と連携して固定IPなどにもせず、DHCP運用です。
とはいえWi-FiはMac miniのApple Watchでのロック解除に使うのでオンのまま残しました。それでも基本的な経路は有線になっています。
cronとlaunchd:壊れない管理
時限起動を仕込むのにlauncdは一覧性に欠けるので(というかよくわかってない)、基本できるだけ起動の指定はcrontabで管理するようにしています。Linuxとかの慣れもあるので。
ところが一度Claude codeからcrontab書き換えをしようとして、中身全部すっとばしちゃったので、crontab.txtに設定を一旦だして、反映は別コマンドで書き込み、その後crontab.txtとの差分確認をするようにしています。飛ぶと結構面倒臭いので。
MacOSではcrontabの変更はダイアログ確認があって、これを忘れるとClaude Codeの書き込みが無言で失敗します(終了コード0のまま反映されない)。そのため、通常のターミナルで実行して、crontab -lで一致を確認しました。/usr/sbin/cronにはフルディスクアクセスを付与しました。
基本リモートと関連するもの、サイトに関連するものはcrontab管理で、Mac mini自体、ローカルの起動関連はlaunchdと役割を分けています。
画面共有とディスプレイ
Mac miniはMacbook AirやMacbook neoから画面共有で使います(1920×1200)。また家ではMacbook AIrからFHDモニタに接続してそこで開く(1920×1080)ので、都度解像度が変わります。なのでメニューバーから切り替えられるようにしました。
brew install displayplacer swiftbarで切り替えられるスイッチをClaude Codeが作ってくれました。
こちらの記事に詳しく書いています。
あとダミーHDMIで両方のモードをカバーするものを挿してます。
結構ハマったのが、自動処理系がディスプレイスリープだと動かないケースがあって、とはいえスクリーン繋ぐしなぁ・・・つきっぱなしは嫌だなぁ、と躊躇してました。
が、よく考えると、スクリーンに繋がっているのはMacbook AirなどからのUSB-Cとかで、Mac miniそのものにはそれこそ「ダミー」HDMIが刺さってるんですよね。
つまりMac mini側のダミーHDMIのディスプレイをスリープオフにしても痛くも痒くもない、ということに気づくのにしばらくかかりました。で、スリープなしに設定。
sudo pmset -a displaysleep 0
自動処理系のエラー率が一気に下がりました。
アプリ・環境で踏んだ落とし穴
環境系は基本Macbook ProをそのままMac miniにコピーしているので一部を除いてそのままでした。足りないものはClaude Codeに検出させてClaude Codeに入れさせる、でうまくいきます。
あ、あとClaudeに、claude rc(remote-controlを外部から繋げるようにするデーモン的なやつの起動)を基本起動するように頼んだらlaunchdで設定してくれました。
まぁ大体Claudeが教えてくれる
何気にMac miniを母艦化するのにも色んな方面の知識が必要で、一昔前ならほんとに色々調べないと難しかったと思いますが、今はClaudeに聞けば大体なんとかなる、というところでしょうかw
強いて言えば商品購入などのロールバック効きづらいところだけは慎重に、可能ならchatGPTやGeminiなどにも聞いて裏取りしたほうがよいかもです。