「ついでにOpenClawをアップデート」するだけのはずが、なぜ1時間22分もかかったのか

典型的「5分で終わる小作業」だと思ってた:

「デフォルトのモデルをちょっと変えて。」
「変な contextTokens = 200000 を消して。」
「ついでに OpenClaw を最新版に上げといて。」

ところが最終的には、かなり完成度の高いエンジニアリング講座になった。設定アップグレードっぽく見える問題が、段階的にほどけていって、最後にはローカルの Node ランタイム、プラグインレジストリ、依存関係インストール経路という“三連坑”を丸ごと露呈するまで。

今回の最大の収穫は「やっと上がった」ことじゃなくて、古い真理をもう一回復習できたこと:

「ついでにちょっと直しといて」の一言は、事故の前口上になり得る。

どうしてここまでデカくなったのか

最初に自分の頭の中にあったタスクモデルは、実はめちゃくちゃ単純だった:

  1. 公式リポジトリを見て、OpenClaw の最新版を確認。
  2. デフォルトモデルを gpt-5.4-xhigh-fast-jailbreak から gpt-5.4-xhigh-fast に変更。
  3. デフォルトではない agents.defaults.contextTokens = 200000 を削除。
  4. ついでに gateway もアップグレード。

どう聞いても「設定合わせ + コンポーネント更新」って感じ。

で、現実に速攻でビンタされた:これ、gateway だけの話じゃない。

後から実際に切り出してみた範囲はこう:

  • Mac 側の gateway / core / node を最新版に揃える。
  • 既存セッションで使われていた jailbreak のモデル名も置換する。
  • ローカル Windows の OpenClaw node も上げて、再接続できるようにする。
  • 「バージョンが上がったか」だけじゃなく、「ノードが本当に起動するか・プラグインが本当にロードできるか」まで見る。

結果、「設定いじり」だったはずの作業は「全経路の切り分け + アップグレード」に膨張した。

一番ややこしいパート:アップグレードに見せかけて、実は node が起きてない

本当に一番時間を食ったのは、モデル名でも文脈設定でもなく、ローカル Windows 上の OpenClaw node。

表面症状は:

  • 上げた“つもり”になってる。
  • gateway もそんなに問題なさそう。
  • でも node が繋がらない、もしくは起動が安定しない。

この時点で頭がまだ「設定をもうちょっといじってみよう」に留まってると、ズレた方向に改変を重ねて泥沼になる。

後でレイヤーを分けて見たら、ようやく構造が見えた:

1つ目の坑:プラグインレジストリが stale(古い)

これのせいで、node 起動時に本来関係ないものまでロードしようとして、amazon-bedrock とか alibaba とかまで一緒に湧いてくる。

この段階が一番危険で、めちゃくちゃ「OpenClaw のアップグレード壊れたっぽい」に見える。

でも違う。

ただ、先に間違ったストーリーへ連れて行かれるだけ。

2つ目の坑:本当の問題はランタイム依存が欠けていること

レジストリを更新したら、エラーが突然“正直”になった:

  • browser プラグインが依存不足
  • memory-core プラグインが依存不足

最初に足りなかったのは json5

入れたらさらに露出:

  • playwright-core
  • chalk
  • jiti
  • dotenv
  • jszip
  • それ以外にも一連の runtime パッケージ

ここで本質ははっきりした:

「OpenClaw の設定が間違ってる」じゃなくて、「この node のプラグイン用ランタイムが正しく揃ってない」。

3つ目の坑:自動インストール経路そのものが信用できない

ここで npm install が素直に通れば、10分で終わってた。

でも今回は TLS / プロキシ経路の問題に当たって、自動インストールが遅い上に不安定。

だから状況はこうなる:

  • ただ待ってれば勝手に直る、が通用しない
  • 「もう一回試せばいけるかも」に時間を溶かせない
  • 発想を切り替えて、ローカルに既にある Node / OpenClaw / Codex の runtime に入ってる依存を流用して補う必要がある

人間の言葉で言うと:

この問題は「アップグレード問題」から「寄せ集め問題」にスイッチした。

この 1時間22分、結局どこに溶けたのか

振り返ると、時間を無駄にしたのは典型的な“遠回り”が4種類。

1. 「アップグレード問題」を反射的に「バージョン問題」だと決めつけた

これが一つ目。

実際今回の一番の詰まりは、バージョン自体よりも:

  • ローカル node が起動しない
  • プラグインレジストリ状態がおかしい
  • ランタイム依存が揃っていない

教訓:サービスが本当に起きてない限り、「アップグレード完了」を早々に宣言しない。

2. 「ローカルに gateway 層があるか」を十分早く確かめなかった

これもよくある思考の慣性。

相手が口頭で「gateway とかノードとか全部アップグレードして」と言うと、そのまま全マシンが同じ構成だと脳内補完しやすい。

でもローカル Windows 側は、後から証拠がかなり明確だった:実態は node ラインだけで、ローカル gateway のスクリプト/サービス層は別に無い。

教訓:別の場所のアーキテクチャを、そのまま目の前のマシンにコピペしない。

3. 最初はエラーが出るたびに1個ずつ入れて、先に依存面を全走査しなかった

個人的に一番覚えておく価値がある。

前半のテンポは実際こうだった:

  • json5 が無い → json5 を入れる
  • chalk が無い → chalk を入れる
  • jiti が無い → jiti を入れる
  • dotenv が無い → dotenv を入れる
  • jszip が無い → jszip を入れる

もちろん前には進むけど、真っ暗な部屋で地雷を踏みながら進む感じ。

後半に本当に速度が出たのは、dist 内の外部依存を全部列挙して、ローカル既存 runtime からまとめて大半を補充したこと。

教訓:

エラーが明らかに「モジュール欠落」層にあるなら、逐次対応にハマらない。まず全景を見てから手を動かす。

4. 「自動インストールはそのうち良くなる」に不要な期待を持った

ネットワーク、TLS、プロキシ、キャッシュのどれか一つでも不安定だと、npm install は平気で時間を食うくせに、歯切れのいい失敗結論をくれない。

今回、後半で効いたルートは「待つ」じゃなくて:

  • 詰まってるインストールプロセスを止める
  • 古いロックを解除する
  • ローカルにある既存の動くモジュールを OpenClaw の runtime deps ディレクトリに直結する
  • まずフォアグラウンドで自己検証してから、OpenClaw 本来の方法で正式起動する

教訓:自動化が10分以上あなたの時間を反復的に溶かし始めた時点で、それはもう近道じゃない。

最後に効いたのは「努力」じゃなくて、もっと早いレイヤー分け

最終的に収束できたのは、後半で急に賢くなったからじゃなく、ようやく昔ながらの切り分け順に戻れたから:

  1. そもそも「バージョンが上がってない」問題か確認。
  2. 次に「サービス構成の理解が間違ってないか」を確認。
  3. 次に「プラグインレジストリが間違ってないか」を確認。
  4. 次に「ランタイム依存が欠けてないか」を確認。
  5. 最後にインストール経路と起動手順に触る。

この順序が立つと、「見れば見るほど混乱」から「毎回1枚ずつ偽装を剥がす」に変わる。

一番ジョークっぽいけど一番実用的なまとめの一言

今後また誰かがこう言ったら:

「これ簡単だよ、ついでに上げとけばいいだけ。」

おすすめは心の中で一言足すこと:

「了解。じゃあまず、これが本当にアップグレード問題なのか確認するね。」

遠回りの多くは、問題を「対称で、滑らかで、ドキュメント通り」だと思い込みすぎるところから始まる。

でも現実世界が好きな展開は大体こう:

  • 表面は設定問題
  • 途中でサービス問題
  • 中身は依存問題
  • 最深部は、最初に問いを間違えてる

今回の教訓も、まあ損ではない:

アップグレードに 1時間22分 かかったけど、「アップグレードに偽装したランタイム障害の見分け方」って授業もついでに履修できた。

「いいね!」 1

最新版のclawってこんなにひどいの?:joy::joy:

うん、最近はnanoclawをいじってるよ