Claude CodeのBashツールで nvm use 22 を実行したら nvm: command not found ——この問題に複数のプロジェクトで繰り返し遭遇しました。
本記事では、原因と回避策を簡潔にまとめます。
発生する問題
Claude CodeのBash環境でnvmコマンドを実行すると、以下のエラーが出ます。
1$ nvm use 222zsh: command not found: nvm1$ nvm --version2zsh: command not found: nvm通常のターミナルでは問題なく動作するnvmが、Claude Codeのシェルセッションでは認識されません。
原因:nvm初期化スクリプトが読み込まれない
nvmは関数(シェル関数)としてロードされる仕組みです。通常、.zshrc や .bashrc に以下のような初期化コードが記述されています。
1export NVM_DIR="$HOME/.nvm"2[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"Claude CodeのBashツールは、各コマンド実行時にシェルを起動しますが、対話型シェルとしての完全な初期化プロセスを経ないケースがあります。その結果、nvmのシェル関数がロードされず、command not found になります。
回避策:PATHにNode.jsのパスを直接指定する
nvmを経由せず、Node.jsのバイナリパスを直接 PATH に追加します。
1export PATH="$HOME/.nvm/versions/node/v22.18.0/bin:$PATH"これで node、npm、npx がClaude CodeのBash環境から使えるようになります。
1$ export PATH="$HOME/.nvm/versions/node/v22.18.0/bin:$PATH"2$ node --version3v22.18.04$ npm --version510.x.x # ※バージョンはインストール時期による具体的な運用方法
方法1: コマンドの先頭で毎回exportする
Claude Codeへの指示で、Node.jsを使うコマンドの前に export PATH を付けます。
1export PATH="$HOME/.nvm/versions/node/v22.18.0/bin:$PATH" && npm install1export PATH="$HOME/.nvm/versions/node/v22.18.0/bin:$PATH" && npx astro build方法2: CLAUDE.mdに記載しておく
プロジェクトの CLAUDE.md に明記しておけば、Claude Codeが自動的にPATH設定を含めてコマンドを実行してくれます。
1## 環境設定2
3Node.jsの利用時は以下のPATH設定が必要:4export PATH="$HOME/.nvm/versions/node/v22.18.0/bin:$PATH"方法3: nvmの初期化スクリプトを明示的にsourceする
nvm自体を使いたい場合は、初期化スクリプトを明示的にsourceします。
1source "$HOME/.nvm/nvm.sh" && nvm use 22ただし、これはnvmの読み込みに時間がかかるため、PATH直接指定のほうが高速です。
使用するNode.jsバージョンの確認方法
nvmでインストール済みのバージョン一覧は、ファイルシステムを直接確認すれば分かります。
1ls ~/.nvm/versions/node/2# v18.20.0 v20.15.0 v22.18.0現在のデフォルトバージョンは ~/.nvm/alias/default で確認できます。
1cat ~/.nvm/alias/default2# 22この問題が発生するタイミング
以下のようなケースで遭遇しやすいです。
npm installやnpm run buildを実行するときnpxでツールを実行するとき(npx astro buildなど)- テストランナーを実行するとき(
npx jestなど) - プロジェクトの
.nvmrcに依存したバージョン切替をしようとするとき
まとめ
| 方法 | 手軽さ | 速度 |
|---|---|---|
| PATHに直接指定 | 簡単 | 高速 |
| nvm.shをsource | やや面倒 | 遅い(nvm読み込み) |
| CLAUDE.mdに記載 | 初回のみ | 高速 |
結論として、PATHにNode.jsのバイナリパスを直接指定するのが最もシンプルで確実な回避策です。nvmの「バージョン切替」機能が必要な場面はClaude Code内では少ないため、固定パスで十分なケースがほとんどです。