0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

nvmで64bit版と32bit版のNodeを共存👯‍♂️

Last updated at Posted at 2025-01-25

はじめに

先日の記事で、Node.jsの32bit版が必要だったのでインストールした話を書きました。何かを見て、32bit版と64bit版は共存可能と思っていましたがNode.jsの公式サイトにある通常のインストーラーを使うと、前にインストールされているものはアンインストールされ、新しくインストールするものに綺麗に置き換わっていることがわかりました。32bit→64bitでも、64bit→32bitでも同じ。私はインストール時にフォルダ名を変えたりしてたけど、しっかり消えていたし、パスもお掃除されていました。インストーラーが賢く、共存できません

ということで、Nodeのバージョン管理プログラムのnvmを使って共存させることにしました。ここでは、そのインストールと、使い方などを説明します。

とにかくnvmの使い方だけ知りたい方は、4. nvm周辺でよく使うコマンドへどうぞ。

nvmとは

nvm(Node Version Manager)は、Node.jsの複数のバージョンを簡単にインストール・切り替えできるコマンドラインツールです。主に開発環境で、異なるプロジェクトごとに適切なNode.jsのバージョンを管理するために使用されます。

nvmのインストール

1. githubからインストーラーをダウンロード

2. インストーラーを実行

  • パスはそのまま
    1. nvmのインストール先
    2. Nodeの各バージョンのシンボリックリンクを置くフォルダ(詳細は後述)
  • デスクトップ通知もそのまま
  • Emailは空欄
  • インストールされ、PowerShellが開く
    • nvm versionと打ってみる
      • まさかのnvmが存在しないエラー
      • なんのために開くの
  • PowerShellを閉じて、自分でPowerShellを起動
    • nvm versionと打ってみる
      • 1.2.2→OK
      • ・・・まぁいいけど

3. シンボリックリンクの話

3.1. そもそもシンボリックリンクとは

「シンボリックリンク」はWindowsではあまり出てきませんが、Linuxの話ではよく出てきます。でもWindowsにも実はきちんと実装されています。ショートカットのようなもので、あたかもそこに存在しているかのように動作させられます。

「親フォルダ>子フォルダ>プログラム」というフォルダにプログラムがあるとしたいとき、「子フォルダ」が全然別の場所にあっても、子の「シンボリックリンク」を親フォルダに作っておくと、子フォルダがあるかのようにアクセスできる、というもの。

3.2. nvmでのシンボリックリンクの使い方

nvmでは

  1. まず、使いたいNodeのバージョンをインストールします
  2. つぎに、インストール済みのNodeのバージョン(複数)の中から、「このバージョンを使う!」と指定します
  3. そうすると、コマンドでnodeと打った時に、指定したバージョンが動きます

これを実現するために、「シンボリックリンク」を使っています。nvmをインストールしたときに指定した2つのパス(①nvmのインストール先と、②シンボリックリンクのパス)で、①には様々なバージョンのNode がフォルダを分けて格納され、②に今使うバージョンの「シンボリックリンク」 が格納されます。

nvmでは、「このバージョンを使う!」と指定したら、「シンボリックリンク」が作り直されます。

Nodeを実行するときはいつもC:\nvm4w\nodejs\node.exeと呼ぶんだけど、nodejsがシンボリックリンクで、どこかのバージョンのフォルダを指している、という仕組みです。

実行に関しては、割と単純な仕組みだと思います。(バージョン情報の管理とか、インストールの仕組みとか、大変な部分も多いと思いますが)

4. nvm周辺でよく使うコマンド

4.1. 各バージョンのNodeをインストール

  • nvm list available
    • インストールできるバージョンのリスト表示
  • nvm install 22.13.1
    • バージョンを指定してインストール
  • nvm install 22.13.1 32
    • 32bit版の22.12.0をインストール
    • 指定しないときは、OSに沿う(今どき普通は64bit)
  • nvm install 22.13.1 all
    • 64bit版と32bit版の両方ともインストール
    • (2025/1/25 v1.2.2で、うまく動かないかも)
  • nvm install lts
    • LTSを(バージョンの数値は調べず)インストール

4.2. バージョンを選んで使う

  • nvm list
    • インストール済みのバージョンをリストアップ
    • useで指示できるバージョン
  • nvm use 22.13.1
    • 指定したバージョン(ここでは22.13.1)を使う
    • シンボリックリンクが作られる
  • nvm use 22.13.1 32
    • 32bit版の指定したバージョン(ここでは22.13.1)を使う
    • (2025/1/25 v1.2.2で、うまく動かないかも)
  • node -p "process.arch"
    • 今動いているnodeが、32bit版か64bit版かを表示
    • 64bit版のとき: x64
    • 32bit版のとき: ia32
  • nvm off
    • シンボリックリンクを消す(nodeが使えなくなる)
    • 使う場面はよくわからない、誤作動防止?

4.3. "うまく動かないかも"について

64bit版と32bit版、両方とも最新のバージョンを使おうと、allでインストールしてみたのですが、useのとき、こんなエラーメッセージが。

PS C:\Users\myname> nvm use 22.13.1 32
activation error: Did you mean node v22.13.1 (32-bit)?
If so, type "nvm use 22.13.1 32" to use it.

目をこすって確認しましたが、コピペで実行しても同じなので、私の間違いではないのでしょう。原因はわかりません。32bit版がインストールされていないか、allでも実は共存できないか、切り替えができないか、、、。

対策として、1つ前のLTSのバージョンである22.12.0は32bit指定でインストール(nvm install 22.12.0 32)したら、nvm use 22.12.0 32でうまくいきました。今はバージョンにこだわりがあるわけではないので、とりあえずそれでいいやと。

5. nvmで切り替えずに、32bit版を使う

切り替え方はわかったけど、私が先日やりたかった環境は、サーバーのexpress.jsは32bit版で、クライアントのReactは64bit版。それを1台のパソコンで。

そうすると、ローカルで両方のバージョンを同時に実行できないといけなくて、シンボリックリンクで切り替える方法では無理。

ということで、nvm useでは通常使う64bit版にしておき、クライアントはそれを使う。サーバーの32bit版は、シンボリックリンク先のフォルダへ直接PATHを設定したら動きました。
$env:Path = "C:\Users\myname\AppData\Local\nvm\v22.12.0;$env:Path"

どっちみち、単純に複数インストールして共存できるならこの方法だったので、ちょっと遠回りして、便利ツール(nvm)を知って、元の位置に戻ったという感じ。特別効率よくなったわけではありませんが、共存できなかったものを共存できるようになったということでよしとします。

おわりに

32bit版を入れてパスを確認したら、64bit版のパスが消えていて64bit版が動くなったことに実は気づいてました。でもプログラム自体はあるだろうと思って、確認せず後回しにしてました。後で確認してみるとなくて、64bit版をインストールし直したら、32bit版がなくなったということで、今回の話でした😇

こういうことは、ちょっとした知識があるとなんとかクリアできるけど、躓く人は多いんだろうなぁと思いました。(でも32bit版や複数バージョンをインストールしようとする人は、その知識がない人はいないか)

AIでいろいろできるようになりつつある中、こういうトラブルもそのうち解消できるんでしょうか。こういう個別の事情みたいな話は、今はまだちょっと解決できる気がしません。動かなくなったプログラムに対して「🤖いい感じにOSの設定を変更して修復しておきました~」と言われるのも気持ち悪すぎる。でもそうなるのかなぁ。なるんだろうなぁ。

では、よきハンドメイド共存ライフを~👯‍♂️

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?