2026-04-15 レンタル ヘッドレス クラウド Mac における OpenClaw 環境変数とシークレット(launchd)
OpenClaw ゲートウェイはプロセス環境、プロジェクトの.env、~/.openclaw/.env、~/.openclaw/openclaw.jsonの JSON ブロックを重ね合わせて読みます。対話シェルだけで検証したチームほど優先順位に驚かされます。SSHのみのレンタルApple Siliconでは欠損が TUI ではなく上流 LLM への認証失敗として現れます。本稿(2026-04-15)は実際の読み込み順、launchdデーモンの落とし穴、シークレット保管の比較、6 ステップローテーションを示し、ヘルスプローブ・nginx 入口・構造化ログへ橋渡しして香港/日本/韓国/シンガポール/米国でも再現性を保ちます。
親プロセスがファイルより勝つというドキュメント上のスタックを、そのまま運用に写すと事故ります。実務ではlaunchctlが CLI がローカルファイルを解釈する前に変数を注入し、重複キーは「tmux では動くが再起動で壊れる」パターンを生みます。秘密は単一の監査可能な場所に集約し、JSON では${VAR}展開に閉じ込めてください。さらに有効な環境サイズ(多くの場合 < 32 KB)をログ化すると、CI がprintenvを誤って取り込んだ肥大化を早期に検知できます。
OpenClaw が環境を解決する方法(2026 モデル)
LaunchAgent として動かすとプロセス木はlaunchd始まりです。.zprofileだけに書いた変数は、制御された shell-env インポートを有効にしない限り現れません。非機密トグル(例:OPENCLAW_LOG_LEVEL=info)は plist に置いてよいですが、長寿命トークンを複数人が読める plist に直書きしないでください。キーチェーンから短命変数をエクスポートするラッパーが安全です。
「ターミナルで echo できる」ことと「ゲートウェイが見える」ことは一致しません。ベースラインでプロキシや CA を注入しているホストでは、OpenClaw 側の.envが最後に勝つとは限りません。CI ラッパーでマスク済みのキー存在一覧を出し、plist 変更後は差分監査を残してください。地域ごとにどの資格情報を使うかを 1 枚にまとめると引き継ぎ週の誤設定が減ります。
レンタル macOS でのヘッドレス穴
- ログインウィンドウ無し —
.zprofileのみの変数は LaunchAgent に乗らない。 - GUI と SSH の UID 不一致 —
~/.openclawの所有者と違うユーザーでopenclaw gatewayを動かすと空設定。 - シークレット拡散 — デバッグで
/tmpへ.envを置くと world-readable。chmod 600と即削除。 - 多地域ドリフト — 米東向けキーを日本ゲートが継承するとデータレジデンシ違反の恐れ。
シークレット保管マトリクス(主保管を一つ)
| 仕組み | 強み | リスク |
|---|---|---|
~/.openclaw/.env(0600) |
高速反復、バックアップ容易 | root とディスクイメージに見える |
launchd EnvironmentVariables |
デーモンに明示、再起動で残る | ~/Library/LaunchAgentsの plist は world-writable にしない |
| キーチェーン + ラッパー | 監査に強い | ヘッドレス鍵のロック解除タイミングが難しい |
レンタルビルダー向け launchd パターン
plist の UID はssh CI を動かすユーザーと一致させます。非機密はインライン、秘密はキーチェーンかOPENCLAW_STATE_DIR=/Volumes/secure/openclaw-$REGIONで Xcode キャッシュとホームを分離。政策上の可視確認が必要なときだけVNCを併用し、通常は SSH とopenclaw doctorログで足ります。
#!/bin/bash
set -euo pipefail
export OPENCLAW_STATE_DIR="/Volumes/secure/openclaw-sg"
exec /usr/local/bin/openclaw gateway run
Webhook を落とさない 6 ステップ・ローテーション
- 入口凍結 — nginx で外部 Webhook を最大90 秒停止(リバプロ記事)。
- 新キー — コンソールで先に更新し、旧キーは15 分重複許可。
- 原子置換 —
.env.newを fsync しmv、chmod 600。 - launchctl kickstart -k gui/$UID/pcx.openclaw.gateway — syslog で exit 0。
- 検証 —
openclaw doctorと127.0.0.1:18789の合成(ヘルスプローブ)。 - nginx 再有効化 — 120 秒以内に200が並ぶか監視、誤り率>5%ならロールバック。
.envをコミットすること。iOS チームは外部 CI へミラーすることが多い。
マルチテナント Mac の OPENCLAW_STATE_DIR 境界
1 台のMac mini M4を二つのスクワッドで共有するなら/Volumes/secure/openclaw-teamAと...-teamBに分け、launchd ラベルと unix グループで ACL を分離します。パスに地域コード(HK など)を入れると越境推論の誤配線を防ぎます。同じホストで夜間 Xcode アーカイブも走らせる場合、状態ディレクトリを CI の掃除プレフィックスの外に置き、janitor から/Volumes/secureを除外してください。
FAQ:クラウド Mac の OpenClaw シークレット
| 質問 | 回答 | リンク |
|---|---|---|
| shell env インポートは本番で有効? | 無関係な変数が数百入るなら無効化し plist を明示。 | ヘルプ |
| 誰がキーを変えたか証明するには? | plist のチェックサムを git 管理し syslog を SIEM へ。 | ログ |
| 地域横断で同じ .env を使う? | 技術的には可だが運用では不可 — 爆発半径を分ける。 | 料金 |
可観測性とキャパシティへの橋
シークレットは半分だけ。環境が安定したらプローブとログを配線し、顧客より前に退行を見せてください。ヘルスプローブを再読し、キュー深さが10 分超40メッセージなら料金ページでノード追加を検討。ブログ索引にシリーズ続編があります。
まとめ: OpenClaw 環境を本番 Kubernetes Secret のように扱えば、東京でもバージニアでも同じ挙動になります。