2026-04-22 OpenClaw npm アップグレード、ステールモジュール参照とヘッドレスのレンタルクラウド Mac 上のゲートウェイ再起動
レンタルの Apple Silicon Mac で グローバル npm として OpenClaw を運用する担当者は、アップグレード後にこんな混乱をよく見る:openclaw --version は新しい semver を示すのに、ゲートウェイは古いモジュールを読み込む—Webhook が不安定、チャネルのハートビートが欠け、ログに混在パスが出る。本2026-04-22稿は 先に停止する更新、コミュニティのステール Node 解決報告に沿った二重启動緩和、そして ゲートウェイ更新とロールバック と組み合わせるロールバックをまとめる。オンボードと install-daemon(初回起動)と 環境と秘密情報(状態パス)を補完する。
ログに残すべきステールモジュールの兆候
npm グローバルを変更する前に証拠を残す—深夜 2 時にデバッグする未来の自分が感謝する。
| 兆候 | 解釈 | 取得コマンド |
|---|---|---|
| ゲートウェイログに 2 つの semver | バイナリは新しいがワーカーが旧ツリーを import | journalctl/stdout を保存 + which openclaw |
| 更新後の断続的な ESM import エラー | 混在した node_modules 解決パス |
npm ls -g openclaw --all + ゲートウェイ環境ダンプ |
| 1 回目は健全だがトラフィックが異常 | モジュールキャッシュ排出のため 2 回目が必要 | 127.0.0.1 へのタイムスタンプ付きヘルス curl |
プリフライトのスナップショットとバックアップ
openclaw --versionとnode -vを記録(上流推奨 Node 22.16+ または 24.x)。~/.openclawを npm グローバルツリーの外の日付付きパスに tarball — ゲートウェイのロールバックと同じバックアップ規律。- オンボードでカスタマイズした launchd plist パスをエクスポート。
- launchd 環境のメモで
OPENCLAW_STATE_DIRと秘密情報の優先順位を確認。
停止 → 更新 → 再起動(順序が重要)
ゲートウェイがトランスパイル済みモジュールのファイルロックを保持している間に npm でグローバルを書き換えない。先に停止し、更新し、再起動する—macOS 上の任意の Node デーモンと同じ本番手順。
openclaw gateway stop && npm install -g openclaw@latest && openclaw gateway start
ステールモジュール向けの二重ゲートウェイ再起動
ヘルスチェックにまだバージョン混在が出る場合、2 回目のクリーン再起動を行う:停止し、ソケット排出を待ち、起動し、ローカルプローブを再実行。npm グローバル更新で Node が 2 回目のコールドスタートまで stale 解決を保持するという公開議論の緩和と一致する。再起動の間に nginx アップストリームを早合点で切り替えない—HK / JP / KR / SG / US のトラフィックを再公開する前に ヘルスプローブに従う。
再起動の間に見るもの
静かなウィンドウで待受ポート(ゲートウェイポートに絞った lsof -nP -iTCP -sTCP:LISTEN)を取得し、孤児の node 子が残っていないこと、グローバル npm 接頭辞のボリュームの inode 圧力を確認する。この確認を飛ばすチームは 1 回目で「成功」しても混合モジュールを配信し続ける—長寿命ワーカーが SIGTERM を生き延びたため。タイムスタンプを残す:混雑ホストでは stop と start の間に少なくとも 45〜90 秒、同じパスをアンチウイルスやインデックスが奪い合う場合は 120 秒を推奨—共有ビルド機ではよくある。
アプリログとシステム負荷を相関させる:ゲートウェイ再起動中に load average がコア数の 4 倍を超え続けるなら CPU が落ち着くまで入口再開を遅らせる—さもないと npm と無関係な理由でヘルスが不安定になる。チャットブリッジでは各再起動後にステージング webhook で合成 noop を送り、本番 DNS に昇格する前に E2E を証明する。
最後にnpm グローバルルート(npm root -g)と解決されたバイナリ(which openclaw)をチケットにスナップショット—semver が分岐したとき、この 2 パス比較で symlink ドリフトを早期捕捉する。複数リージョンを借りる担当者はホストごとに同じチェックリストを繰り返すこと。JP と US でグローバル接頭辞が食い違うと、アップグレード後に「片方の DC だけ動く」報告の典型原因になる。
ヘルス、ログ、入口の再有効化
2 回目のバウンス後に検証:
- ゲートウェイ admin/health に対するローカル
curlで期待 JSON フィールドを確認。 - 本番の構造化ログガイドに沿ったログ連続性。
- nginx リバースプロキシで入口 TLS と webhook パスを確認。
ネガティブテストで検証を拡張する:サンドボックス agent で意図的に下流トークンを壊し、エラー表示が新ビルドの文字列テンプレートと一致するか確認—混合 semver は明示バナーではなく微妙に違うエラーコピーで先に現れることが多い。変更後 15 分は少なくとも5 つのベースライン(p50/p95、エラー率、キュー深度、CPU、RSS)を残し、更新前チャートと比較する。履歴がなければ npm を触る前にダッシュボードを用意する。
semver が収束しないときのロールバック
二重启動でも失敗する場合、npm で最後の良好な semver を再インストールし、~/.openclaw の tarball を復元し、ゲートウェイ起動シーケンスを再生する。サポートスレ向けに npm と OpenClaw の両バージョンを記録する。復旧中のメッシュアクセスは Tailscale メッシュ。
| シナリオ | ロールバックの焦点 | 想定時間 |
|---|---|---|
| npm のパッチ回帰 | npm で前のパッチに固定 | 6–12 min |
| 更新後の設定ドリフト | tarball 復元 + JSON schema 検証 | 12–25 min |
| リージョン全体の障害 | 2 台目の MacXCode ノードへフェイルオーバー | DNS/TTL 依存 |
関連 Runbook
更新後のチャネル問題は サブエージェントとチャネルのトラブルシュートと重なることがある。スキルのパッケージングは別—スキル移行を含む更新なら Skills と ClawHub を参照。
FAQ:npm とクラウド Mac のゲートウェイ
| 質問 | 回答 |
|---|---|
| pnpm は? | 組織が pnpm を標準化しているなら同じ先停めの規律を踏襲し、PATH でグローバル接頭辞を明確に。 |
| Docker にすべき? | Docker とネイティブ npmのトレードオフを比較—どちらも可だが本文はベアメタル租用向け。 |
| 継続的なヘルス監視は? | ヘルプのサポートチャネルを使い、本番ガイドに沿った合成プローブを維持。 |
OpenClaw npm アップグレードの定常ホストとしての Mac mini M4
Mac mini M4 ベアメタルは Node ゲートウェイのコールドスタート時間が決定的—意図的に二回バウンスする場合に重要。過剰割当 VM と比べ “CPU steal” のように見える幽霊症状を追う時間が減る。MacXCode の SSH 優先アクセス(HK · JP · KR · SG · US)、ワークスペース向け任意の 1〜2TB NVMe、予測可能なネットワークがブルー/グリーン用の重複ゲートウェイを簡素化。npm の変動が加速したら 料金から容量を足し、疲れた 1 台に実験を積まない。