Mise

npm グローバル管理から mise に移行したら npm キャッシュにハマった話

TL;DR — mise の npm バックエンドで @latest が存在しないバージョンに解決される場合、mise cache clear で mise の versions host キャッシュを消すと直る。

npm でグローバル管理していたツールを mise に移行しようとしたら、キャッシュ問題でちょっとハマったので記録しておく。

移行対象

$ npm list -g --depth=0
├── @playwright/[email protected]   ← 新しいやつ(旧: playwright-cli)
├── @tobilu/[email protected]
├── @playwright/[email protected]
└── [email protected]

今回 mise に移行したのは @playwright/cli@tobilu/qmd の2つ。

@playwright/cli の移行でハマった

まず Deprecated なパッケージを入れてしまう

まず playwright-cli(旧・Deprecated)と @playwright/cli(新)を間違えて Deprecated の方を mise に入れてしまった。mise unuse で無効化してから改めてやり直し。

そしたら謎のエラーが出た。

$ mise use --global npm:@playwright/cli@latest
npm error code ETARGET
npm error notarget No matching version found for @playwright/[email protected].

@latest を指定しているのに 0.262.0 という存在しないバージョンを引いてくる。なにそれ。

mise + linuxbrew 環境で cargo install したバイナリが VSCode に認識されない問題

TL;DRmise で Rust を管理している環境では .cargo/env が no-op になる。.profileexport PATH="$HOME/.cargo/bin:$PATH" と無条件に書くのが確実。

前の記事RTK のバグ報告のために深夜にせこせこやってたんですよ。

で、cargo install --path . してローカルのバイナリで確認しようとしたら、Claude Code が旧バイナリを使い続ける。小一時間ハマってイライラしたので記録しておく。

症状

cargo install --path .   # ローカル fix 済みバイナリをインストール
which rtk                # → /home/linuxbrew/.linuxbrew/bin/rtk  ← 旧バイナリ

~/.cargo/bin/rtk のはずが、linuxbrew の rtk が勝っている。

なにやっても変わらねぇ…

調査

PATH の順序

1  ~/.local/share/mise/shims
2  /home/linuxbrew/.linuxbrew/bin   ← ここで rtk を拾う
...
7  ~/.cargo/bin

linuxbrew が .cargo/bin より前にいるんでよくある単純な PATH 順の問題だろうと甘く見てました。はい。

そこからはまりまくった。

.bashrc に追記しても効かない

Claude さんのおすすめにより、.bashrc 末尾に . "$HOME/.cargo/env" を追記して VSCode を再起動、結果変わらず。そりゃそうだろ。前調べた時って非インタラクティブじゃなかったっけ?

VSCode Copilot Chat と Claude Code、bash の扱いが違う

TL;DR — oh-my-posh v28.1.1 以降は VSCode Shell Integration と競合してエージェントモードが固まる。.bashrc$TERM_PROGRAM=vscode の早期リターンを入れれば解決。Claude Code の PATH は .profile 経由で解決している。

午前中、Copilot Chat のエージェントモードでコマンド実行したら止まるという事象が頻発した。.bashrc に仕掛け作って凌いだ。定時過ぎに Claude Code の仕組みを調べたらなんか知らんけど上手く動いてた、という一日の話。

午前:Copilot Chat のエージェントモードでコマンド実行すると以後進まない

VSCode の Copilot Chat をエージェントモードで使っていたら、コマンドを実行させるとそこで「Preparing」が点滅し続けてそこから進まなくなった。

なんだよこれと思って調べてみると、oh-my-posh が原因。oh-my-posh v28.1.1 以降で VSCode Shell Integration と競合するようになったらしく、エージェントが叩いた bash がそのまま固まる。

解決策として .bashrc に VSCode 向けの早期リターンを仕込んだ。$TERM_PROGRAM は VSCode が統合ターミナルを開くときにセットする変数で、WSL・ネイティブ Ubuntu どちらでも vscode になる。

# mise shims(全環境で必要)
eval "$(mise activate bash --shims)"

# VSCode 統合ターミナルはここで早期リターン
if [[ "$TERM_PROGRAM" == "vscode" ]]; then
  return
fi

# 以降はインタラクティブ専用(Tabby / GNOME Terminal など)
eval "$(oh-my-posh init bash ...)"
# ghq, fzf など...

これで Copilot Chat のエージェントモードは直った。さくさく進むようになった。でも午前の業務は溶けた。う○こですよ。