◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-05-14中級

Claude Code で nvm/pyenv/asdf が認識されない - シェル初期化の仕組みと4つの解決策

Claude Code でnvm・pyenv・asdfが使われず「node: command not found」「python version mismatch」が出る問題の原因と解決策を解説します。シェル初期化の仕組みを理解することで根本解決できます。

claude-code132nvmpyenvasdfPATHトラブルシューティング51環境変数7

「npm run dev を実行させたら node: command not found と返ってきた」——Claude Code を使い始めたとき、私が最初にぶつかった壁のひとつです。

ローカルのターミナルでは問題なく動くのに、Claude Code 経由だと突然バージョンマネージャーが効かなくなります。nvm で管理している Node.js が「見えない」、pyenv で設定した Python バージョンが使われありません。この問題に数時間溶かした経験がある方は少なくないはずです。

2014年からアプリ開発を続けてきた中で、環境変数まわりのトラブルは何度も経験してきました。その経験から言えることは「原因を理解すれば確実に再現しなくなる」ということです。このエラーにも同じことが言えます。

なぜ Claude Code でバージョンマネージャーが使えなくなるのか

Claude Code が Bash ツールでコマンドを実行するとき、ログインシェルの初期化スクリプト(.bashrc、.zshrc、.bash_profile)を自動的に読み込みません。

通常、ターミナルを開くと次の順番で初期化が走ります:

~/.zprofile → ~/.zshrc → (nvm/pyenv/asdf の初期化コード) → PATH に追加される

nvm を例にとると、.zshrc か .bash_profile の中に次のような行があります:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

これがシェルを開くたびに実行されて、nvm コマンドと、指定したバージョンの Node.js が PATH に追加されます。

ところが Claude Code のサブプロセスは「ノンインタラクティブな非ログインシェル」として起動するため、これらの初期化コードが走りません。そのため、node や python(バージョン管理されたもの)がどこにあるかを知らないまま実行しようとして command not found になります。

まず自分の環境を診断する

実際に何が起きているか確認する方法を最初に示します。Claude Code に次のコマンドを実行させてみてください:

# Claude Code のサブプロセスから見えているPATHと実行ファイルの場所
echo "PATH: $PATH"
which node 2>/dev/null || echo "node: not found"
which python3 2>/dev/null || echo "python3: not found"
node --version 2>/dev/null || echo "node version: unknown"
python3 --version 2>/dev/null || echo "python3 version: unknown"

ローカルのターミナルで同じコマンドを実行し、出力を比べてください。PATH が大きく異なっていたり、/home/user/.nvm/versions/node/v20.x.x/bin のようなパスがない場合、これが原因です。

解決策1:絶対パスで実行する(即効性あり)

最もシンプルな方法は、コマンドを実行するとき絶対パスを指定することです。

nvm の場合:

# ~/.nvm 以下の実際のパスを確認
ls ~/.nvm/versions/node/
 
# 確認したパスを使って実行(例:v20.x.x)
~/.nvm/versions/node/v20.11.0/bin/node --version
~/.nvm/versions/node/v20.11.0/bin/npm install

pyenv の場合:

# pyenv で管理しているバージョンを確認
ls ~/.pyenv/versions/
 
# 絶対パスで実行
~/.pyenv/versions/3.11.8/bin/python3 -m pip install requests

この方法の欠点は、バージョンが変わるたびにパスを更新しなければならないことです。一時的な対処としては有効ですが、恒久的な解決には次の方法をお勧めします。

解決策2:CLAUDE.md にパスを明示する

プロジェクトルートの CLAUDE.md(なければ作成)に、使用するツールのパスを明示します。

## 開発環境
 
このプロジェクトは以下の環境を使用しています。
 
- Node.js: v20.11.0 (nvm管理)
  - `node` = `~/.nvm/versions/node/v20.11.0/bin/node`
  - `npm` = `~/.nvm/versions/node/v20.11.0/bin/npm`
- Python: 3.11.8 (pyenv管理)
  - `python3` = `~/.pyenv/versions/3.11.8/bin/python3`
 
コマンド実行時は上記の絶対パスを使用するか、以下のコマンドで事前に環境をロードしてください:
```bash
export PATH="$HOME/.nvm/versions/node/v20.11.0/bin:$HOME/.pyenv/versions/3.11.8/bin:$PATH"

CLAUDE.md に書くことで、Claude Code はプロジェクト開始時にこの情報を読み込み、以降の操作で自動的に正しいパスを使うようになります。

## 解決策3:bash -l でログインシェルとして実行する

特定のコマンドをどうしてもログインシェル経由で実行したい場合、`bash -l` でラップします:

```bash
# ログインシェルとして node を実行
bash -l -c "node --version"
bash -l -c "npm run dev"

# zshの場合
zsh -l -c "python3 --version"

ただし、これはすべての bash コマンドブロックに適用されるわけではありません。Claude Code の Bash ツールは各コマンドを個別のプロセスで実行するため、実行するたびに bash -l -c "..." で包む必要があります。頻繁に使う場合は次の方法が現実的です。

解決策4:volta や mise への移行を検討する

根本的な解決策は、シェルの初期化に依存しないバージョンマネージャーへの移行です。

volta と mise(旧 rtx)は、シェルの初期化スクリプトに頼らずプロセスレベルで正しいバージョンを提供します。特に volta は、package.json に次のように書くだけで、どの環境でも自動的に正しい Node.js バージョンが使われます:

{
  "volta": {
    "node": "20.11.0",
    "npm": "10.2.4"
  }
}

mise は Node.js だけでなく Python、Go、Ruby など複数の言語を一元管理でき、.tool-versions ファイルでバージョンを固定できます。Claude Code との相性も良く、プロセス起動時に自動的に正しいバージョンを提供します。

移行コストはかかりますが、チーム開発でも同じ問題が起きにくくなるメリットがあります。私自身、壁紙アプリや引き寄せ系アプリの開発で複数の Node.js バージョンを切り替える必要があったとき、volta に移行してから同様の問題で時間を無駄にすることがなくなりました。

状況別の推奨アプローチ

  • 今すぐ動かしたい: 解決策1(絶対パス指定)
  • 特定プロジェクトで安定して使いたい: 解決策2(CLAUDE.md への明示)
  • チームで使っている・長期的に解決したい: 解決策4(volta/mise への移行)

bash -l を多用する方法(解決策3)は手軽ですが、毎回の記述が増えるのと、Claude Code の Bash ツールが期待通りにラップしてくれるかが不安定なため、補助的な位置づけが適切です。

まず解決策2(CLAUDE.md への記載)を試してみてください。5分もかからず設定でき、プロジェクトに関わる全員が同じ恩恵を受けられます。チームの CLAUDE.md に「この環境で開発するにはこのパスを使う」と書いておくだけで、似たような問題で新しいメンバーがつまずくことも防げます。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

⟐ Claude Code2026-09-10
「Not signed in to the Cloud gateway」で全リクエストが止まる朝に、設定より先に版を見ます
Claude Code 2.1.265 でゲートウェイ・プロキシ構成が全リクエスト失敗した回帰を入口に、認証の入力面を一枚に並べて「設定と版のどちらが変わったか」を数秒で切り分ける小さな手順をまとめます。
⟐ Claude Code2026-10-13
「cd して git add して commit」の承認が毎回出る — 設定の抜けではなく、仕様だと分かるまでにたどった道
cd /path && git add && git commit のような複合コマンドで、許可ルールを入れても承認が繰り返し出る。公式の権限ドキュメントと GitHub の報告を突き合わせると、cd と git の組み合わせは設計上プロンプトが出ると分かりました。原因の切り分け順と、手数を減らす4つの直し方を並べます。
⟐ Claude Code2026-10-12
SPM に移したら、起動した瞬間にアプリが落ちるようになりました — dyld の一行を Claude Code と読み解いた記録
CocoaPods から Swift Package Manager へ移した直後、ビルドは通るのに起動した瞬間に落ちました。dyld の一行から原因を切り分け、直し方と確認コマンドまでをまとめます。