【WSL2】Ubuntuで最新版のNode.jsをインストールする方法
はじめに
Linux環境でNode.jsをインストールしたことは、今まで2回あります。Linuxに不慣れなためか、いずれも苦戦しました。試行錯誤して最終的にはいずれも納得のいく形でインストールされましたが、1回入れてしまえば何回も入れ直すものでは無いため、その時の手順は残していませんでした。
今回、晴れてWSL2でUbuntuをインストールしたので、Node.jsを入れようとしたら、案の定また苦戦しました。同じところで躓き続けるのも進歩が無く、さすがの私も反省しました。今回、苦戦するポイントとその解決策を備忘録としてまとめることにしました。
環境
今回のLinux環境は以下の通りです。WSL2でデフォルト設定されているUbuntuです。
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy
苦戦ポイント
LinuxでNode.jsをインストールするときに私が苦戦するのは、Node.jsのバージョンです。
通常、Linuxではaptコマンドを使って、デフォルトのリポジトリからソフトウェアをインストールすると思います。何故か、Node.jsはこのリポジトリからインストールをすると結構古いバージョンが入ります。
実際に試す
事前にsudo apt update
とsudo apt upgrade
は実施済みです。
インストーラをNode.jsをインストールする場合はnpmもセットでインストールされますが、aptでリポジトリからインストールする場合はそれぞれインストールが必要です。 npmは600MB(!!)も容量があり、インストールにも少し時間がかかります。
sudo apt install nodejs
sudo apt install npm
インストール完了後、Node.jsとnpmのバージョンを確認してみます。
> node -v
v12.22.9
> npm -v
8.5.1
以下のエラーが出る場合は、Ubuntuの再起動で解消します。
/usr/bin/env: ‘bash\r’: No such file or directory
2023年1月時点で、LTSはNode.jsはv18.13.0、npmは8.18.3です。npmはそうでもないですが、Node.jsが随分古いです。
解決方法
方法はいくつかあります。
NodeSourceからインストール
パッケージマネージャ(apt)を使わずに、NodeSourceからインストールする方法があります。これで新しいバージョンのインストールが可能になりますが、curlコマンドでセットアップのスクリプトをダウンロードして実行する必要があるため、私のようなLinux初心者には少しハードルが上がります。
nvm(Node Version Manager)を使う
nvmを使う方法もあります。インターネットで見る限り、これが一般的な方法のようです。まずnvmをインストールし、nvmを使ってNode.js/npmをインストールする流れです。複数のバージョンを入れて切り替えることもできます。こちらも1つ目と同じく、セットアップスクリプトをダウンロードして実行してインストールする必要があります。
「n」パッケージを使う
nという衝撃的な名前ですが、nvmと同じくNode.jsのバージョンマネージャです。私が解決策として選んだのはこの方法です。
nvmと異なる点は、nはnpmのパッケージであることです。そのため、古いバージョンでもnpmがインストールされている必要がありますが、Ubuntuのリポジトリとnpmパッケージだけで最新版のNode.jsのインストールが可能です。Linux初心者にとって、apt install
さえ打てれば、後はnpmのコマンドで完結出来るのはありがたいです。
「n」を使って最新版Nodeをインストール
npmはさきほどaptを使って入れてあるので、まずはnをインストールします。
> sudo npm install -g n
added 1 package, and audited 2 packages in 619ms
> npm list -g
/usr/local/lib
└── n@9.0.1
次に、nを使ってNode.jsの最新の安定版(lts)を入れます。構文はn <バージョン>
です。最新安定版はltsと指定すればOKです。
> sudo n lts
installing : node-v18.13.0
mkdir : /usr/local/n/versions/node/18.13.0
fetch : https://nodejs.org/dist/v18.13.0/node-v18.13.0-linux-x64.tar.xz
copying : node/18.13.0
installed : v18.13.0 (with npm 8.19.3)
Note: the node command changed location and the old location may be remembered in your current shell.
old : /usr/bin/node
new : /usr/local/bin/node
If "node --version" shows the old version then start a new shell, or reset the location hash with:
hash -r (for bash, zsh, ash, dash, and ksh)
rehash (for csh and tcsh)
インストールされました。nodeコマンドの場所が/usr/bin/node
から/usr/local/bin/node
に変わった、と出力されてますね。Node.jsはv18.13.0、npmはv8.19.3がインストールされたようです。
ubuntuを再起動して、Node.jsとnpmのバージョンを確認します。
> node -v
v18.13.0
> npm -v
8.19.3
これでようやく最新版が手に入りました。あまり気にしていませんが、aptで入れていたバージョンはどこにいったか不明です。
最後に
もうこれで新しい端末にNode.jsを入れるときに迷うことはありません。
しかし、nってすごい名前のパッケージですね。ある種の狂気を感じます。私はNodeを複数バージョン入れる必要性は現時点ではありませんが、切替が自由に出来るのは便利そうです。
今後は、nvmのインストールも出来るよう、curlコマンドのみならず、他のLinuxコマンドにも慣れていきたいと思います。