nvmで切り替わらない原因を調べたら、Node.js関連ツールが3つ競合していた話

nvmで切り替わらない原因を調べたらNode.js関連ツールが3つ競合していた話のサムネイル画像

こんにちは。いっきー(@ikirin_web)です。

コーディング作業中に、gulpを使った開発環境が突然動かなくなりました。

原因を追いかけていったら、Node.js関連ツールが3つ競合していました。

トラブルの話というより、自分のエラーとの向き合い方が変わったという話です。

ファイルを監視しようとしたら、環境が壊れていた

いつも通り作業を始めようとしたところ、こんなエラーが出ました。


Error: Cannot find module '.../node_modules/y18n/build/index.cjs'

y18nというパッケージの中にあるはずのファイルが見つからない、というエラーです。

以前の自分なら「とりあえずnode_modules消して入れ直せばいいか」で終わっていたと思います。でも今回は、まずエラーの前で立ち止まってみることにしました。

原因を調べたら、Node.js関連ツールが3つ入っていた

AIにエラー文を投げながら、コマンドを一つずつ実行していきました。

原因はNode.jsのバージョンが新しすぎたのです。当時インストールされていたのはv23。gulpやその周辺パッケージはまだv23に対応しきれていない状態でした。

それなら、nvmでv18に切り替えればいいと思ってnvm use 18を実行したのですが…


nvm use 18
# Now using node v18.20.8 と表示された

node -v
# v23.6.1 ← 変わっていない

切り替えたはずなのに、v23のまま。

さらに原因を調べていくと、echo $PATHの出力にこんなことが書かれていました。


/opt/homebrew/bin  ← HomebrewのNode v23(優先)
...
~/.nvm/versions/node/v18.20.8/bin  ← nvmのv18(後回し)

PATHは左から順番に優先されます。HomebrewのNode v23がnvmより先に読まれていたので、nvmで切り替えようとしても無視されていたわけです。

さらに確認していくと、~/.nodebrew/current/binという記述も出てきました。

nvm・nodebrew・Homebrew。3つ全部入っていました。

Node.jsのバージョン管理ツール2つ(nvm・nodebrew)と Homebrewが競合していました。

なぜ3つも入っていたかというと、過去にバックエンドの言語を触っていた期間にnodebrew・Homebrewをインストールしていたのです。nvmは2026年になってから導入したので、整理をせず前の環境構築が残り続けていました。

Homebrewより先にnvmを読み込んだら動いた

HomebrewのNodeを削除する方法もあったのですが、今回はHomebrewがmacOSのバージョンを認識できていないエラーも別で出ていたため、この部分に関しては後日にまわすことにしました。

本来であればNode.js関連ツールはどれか1つに絞るのが正解なので、環境が安定したタイミングで整理しようと思っています。

代わりにやったのは、.zshrcの末尾にnvmのパスをPATHの先頭に追加する一行を書き加えることでした。

その後.zprofileを整理したことで、この追記は不要になり削除しました。→ 毎朝gulpが動かない問題を解決した話|node_modules・nvm・Homebrewの競合整理

PATHは左から順番に優先されるので、これでHomebrewより先にnvmが読まれるようになります。

設定を反映させてnode -vで確認したところ、v18に切り替わっていました。そのままnpm installを実行して、無事に動作確認できました。

「なぜ」を追いかける習慣を大事にしたい

削除するのは簡単です。エラーが出たらnode_modulesを消して再インストール、それで直ることも実際あります。

でも今回立ち止まってみたことで、

  • なぜそのエラーが出ているのか
  • なぜそのコマンドを実行するのか

が冷静に見れるようになってきました。

そしてもう一つ気づいたことがあって、エラーが怖くなくなってきたんです。

原因がわからないから怖い。でも「なぜ」を追いかける習慣がつくと、エラーは敵じゃなくて自分の環境を理解するきっかけになります。

これからも「なぜそれをするのか」を大事にしながら、制作を続けていきたいと思っています。

最後まで読んでいただきありがとうございます。

ページトップへ戻る