AI 自動化 2026年3月31日

2026 クラウド Mac:OpenClaw 環境変数と launchd(優先順位・シークレット・安全な展開)

MacLogin AI 自動化チーム 2026年3月31日 約 13 分

レンタルした Apple Silicon ホスト上で macOS launchd の下に OpenClaw ゲートウェイを動かすと、古典的なズレが残ります。SSH セッションでは .zshrc 由来の export が豊富に見える一方、再起動後に実際にゲートウェイを立ち上げる LaunchAgent はほぼ空の環境から始まります。2026 年、優先順位を文書化しないチームは「SSH では動くが起動直後に失敗」というインシデントに何度も時間を溶かします。四半期ごとの API キー更新で .env だけ直し plist を忘れるパターンも典型です。本稿ではレイヤリングの意義、5 行の優先順位表、数値チェックポイント付きの 9 ステップ展開、OPENCLAW_STATE_DIR の移設と危険なシェル一括取り込みの比較、不要なゲートウェイ再起動を避けるローテーション、FAQ、そして香港・日本・韓国・シンガポール・米国など MacLogin リージョンとの整合をまとめます。

運用文脈は OpenClaw 組み込み cron と launchdCLI フックとコンプライアンス監査SSH keepalive と切断トラブルシュート とあわせて読むと、ネットワーク断を環境不備と取り違えにくくなります。クラウド Mac ではゲートウェイと cron 系ワーカーが同じ plist テンプレを共有することが多く、cron 記事のタイムゾーンとログ方針は「WorkingDirectory 上で .env が読めるか」の判断に直結します。フック記事はキー更新後の失敗率と監査ログを結び付けます。SSH が安定して初めて printenv 比較や手動リカバリが信頼できます。変更ウィンドウでは plist のチェックサム、doctor 出力、成功した cron 1 回のスクリーンショットを残し、シフト交代時の引き継ぎを楽にしてください。

OpenClaw ゲートウェイに環境のレイヤリングが必要な理由

OpenClaw は Node のプロセス環境を継承したうえで、ワークスペースファイルや dotenv 系ローダーをビルドに応じてマージします。クラウド Mac では 三つの主体が共存します。対話シェルの人間、launchd 管理の常駐デーモン、SSH でデプロイする CI です。ANTHROPIC_API_KEY を読み込む経路が一つしかないと、メンテナンス後の再起動で自動化が不安定になります。ブールの機能フラグ、モデルエンドポイント、ファイルシステムのルート、ベアラートークルは、表なしで同一ファイルに詰め込まないでください。

  • 再現性:監査では「本番の定義ファイルはどれか」と聞かれます。バージョン管理された JSON と plist は臨時の export より優れます。変更チケットにはデーモンだけか SSH セッションにも影響するかを明記しましょう。
  • 最小権限:読み取り専用設定とシークレットを分離し、.env は chmod 600 にします。
  • マルチテナント:無関係な顧客で同一の ~/.openclaw ツリーを共有しないでください。ユーザ分離か状態ディレクトリの再配置が必要です。

優先順位マトリクス:変数をどこに置くか

向いている用途 launchd 上の注意 例となるキー
LaunchAgent plist の EnvironmentVariables 起動に必須のパス、PATH 修正 編集後は launchctl unload/load が必要 NODE_OPTIONS、カスタムルート
openclaw.json(ワークスペースまたはユーザー) 非機密デフォルト、機能トグル プロセス起動後に解釈されるため権限に注意 モデルルーティング、ツール許可リスト
リポジトリの .env git に含めないシークレット WorkingDirectory を正しく クラウドプロバイダの API キー
ラッパーシェル 複雑な source(稀) 監査が難しい。argv ログを慎重に レガシー企業 CA バンドル
対話のみの export 開発者ノート PC ゲートウェイは絶対に依存しない エイリアス
リマインダー:plist を変えたら launchctl print gui/$(id -u)/com.example.openclaw(ラベルは置換)で環境が反映されたか確認してからゲートウェイの挙動を信じてください。

9 ステップ:launchd 環境のロールアウト

  1. ベースライン:動いている SSH セッションで env | sort をチケットに貼り、本当に必要な項目に印を付けます。
  2. 分類:各キーを シークレットパスフラグ に分け、plist と JSON で重複ゼロを目指します。
  3. PATH 固定:Homebrew や nvm のパスがコンソールとデーモンで違う場合は plist に最小 PATH を明示します。
  4. WorkingDirectory:.env があるリポジトリルートを指します。ずれるとシークレット欠落が静かに起きます。
  5. ProgramArguments:そのホストの which node の絶対パスで node を呼びます。
  6. unload/load テスト:二度サイクルします。二回目で古いソケットが残っていることがあります。
  7. ヘルスチェック:openclaw doctor 等を実行し、標準出力を変更記録に添付します。
  8. 再起動ドリル:本番に近いホストで月次の計画再起動を行い、ゲートウェイが90 秒以内に戻るか確認します。
  9. ドキュメント:plist パスとチェックサムを社内 wiki に。外部委託者向けに MacLogin ヘルプ の SSH 基礎へリンクし、別立ての起動スクリプトを増やさないようにします。

OPENCLAW_STATE_DIR とシェル取り込みのトレードオフ

OPENCLAW_STATE_DIR で状態を移すのは、高速 NVMe をビルド用に残しつつエージェントのジャーナルを別ボリュームに置きバックアップ保持だけ変えたい MacLogin プランで有効です。変数は plist に置き launchd と CLI を一致させます。一方 ProgramArguments/bin/zsh -lc 'source ~/.profile && exec node ...' で包むと対話用 dotfile が入り込みます。デモには便利ですが、開発者のローカル編集が本番を壊すコンプライアンスリスクがあります。シェル source はサンドボックス限定にしてください。

シークレットローテーションと予期しないゲートウェイ再起動

キー更新のたびにゲートウェイ全体を落とすチームは多いですが、リクエストごとにファイルウォッチャや外部ストアから読む構成なら停止を短縮できます。最低限、新しい .env を一時ファイルから mv で原子更新し、文書化された SIGUSR やリロードフックがあれば利用し、旧キーを失効する前に15 分エラー率を見ます。フック記事のログと組み合わせるとセキュリティがキー経過時間と失敗スパイクを相関できます。

2026 環境 FAQ

Docker Desktop は方針を変えますか? ゲートウェイをコンテナ化するなら docker run で環境を注入し、launchd はスーパーバイザだけを管理します。図を更新してください。

複数 Node 版は? 絶対パスか、リポジトリにコミットしたバージョンマネージャ設定を使います。先週の brew link に依存しないでください。

1Password CLI は? 利用可能ですが、LaunchAgent はネットワーク準備とデバイス承認を待つ必要があります。東京のヘッドレス Mac mini はノート PC と生体認証の挙動が異なります。

Mac mini M4 が厳格な環境規律を簡略化する理由

M4 の統合メモリは Node、ウォッチャ、オプションのローカルモデルを、cron 記事で述べたゲートウェイ用とワーカー用の複数 LaunchAgent を並べても快適に保ちます。MacLogin の 5 リージョン展開は plist テンプレを複製し遅延に敏感なエンドポイントだけ差し替える運用に向きます。料金ページ から容量を借り、上記マトリクスを適用し、環境ドリフトを個人の謎ではなくインシデントクラスとして扱いましょう。

専用 Apple Silicon で OpenClaw を標準化

テナントごとにゲートウェイを分け環境のクロストークを減らします。