CLOVER🍀

That was when it all began.

Ubuntu Linux 22.04 LTSに、Node.jsをNodeSourceのPPAからインストールする

これは、なにをしたくて書いたもの?

今までNode.jsのインストールにはnvmを使っていたのですが、手元では基本的には最新版しか使わないですし、バージョン自体を
切り替えることもそれほどないのでOSのパッケージマネージャーでのインストールに切り替えたいなと思いまして。

そういう方法はあるのかな?と思ったら、ふつうにNode.jsのダウンロードページ内に「Installing Node.js via package manager」と
記載があるのに気づいていませんでした。

Download | Node.js

今回はこちらを使うことにしましょう。

なお結論を先に書くと、今回記載する方法では複数バージョンのNode.jsはインストールできないので、複数バージョンのNode.jsを
混在させたい場合はnvmやasdfなどを使った方がよいでしょう。

Node.jsをOSのパッケージマネージャーからインストールする

Node.jsをOSのパッケージマネージャーからインストールする場合は、こちらのページを見ます。

Installing Node.js via package manager | Node.js

注意点としては、このページに記載されているパッケージはNode.jsのコアチームによるものではないということですね。

Note: The packages on this page are maintained and supported by their respective packagers, not the Node.js core team.

DebianおよびUbuntuベースのLinuxディストリビューションの場合、NodeSourceによるパッケージを使用します。

Installing Node.js via package manager / Debian and Ubuntu based Linux distributions

こちらですね。

GitHub - nodesource/distributions: NodeSource Node.js Binary Distributions

「Installing Node.js via package manager」のページにはCentOS、Fedora、Red Hat Enterprise Linuxに関するインストール方法も
あったのですが、NodeSourceではこれらを含め以下のLinuxディストリビューションに対するインストール方法を提供しています。

ディストリビューションの名前だけでなく対象のバージョンも書かれているのですが、Node.jsのバージョンによっては対象外にされて
いたりするものもあるので1度確認しましょう。

また、現時点でインストール可能なNode.jsは、16(LTS)、18(LTS)、19、20(2023年10月以降LTS)です。

Releases

今回はUbuntu LinuxでNode.js 18をインストールすることにします。

アンインストール方法や手動でのインストール方法を見るとわかりますが(というか想像に難くないですが)、実態はPPAということに
なります。

それでは、使っていってみましょう。

環境

今回の環境は、こちら。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy


$ uname -srvmpio
Linux 5.15.0-73-generic #80-Ubuntu SMP Mon May 15 15:18:26 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

NodeSourceを使ってNode.js 18をインストールする

やることは単純で、以下のコマンドを実行すればOKです。

$ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - &&\
sudo apt-get install -y nodejs

Node.js 18のインストールが完了しました。

$ node --version
v18.16.0


$ npm --version
9.5.1

アンインストールする場合はこちら。

$ sudo apt-get purge -y nodejs &&\
sudo rm -r /etc/apt/sources.list.d/nodesource.list

Node.jsがどこにインストールされたのか確認してみましょう。

$ dpkg -L nodejs | grep -E '(node|npm)$'
/usr/bin/node
/usr/lib/node_modules/corepack/shims/nodewin/npm
/usr/lib/node_modules/corepack/shims/nodewin/pnpm
/usr/lib/node_modules/corepack/shims/npm
/usr/lib/node_modules/corepack/shims/pnpm
/usr/lib/node_modules/npm
/usr/lib/node_modules/npm/bin/npm
/usr/lib/node_modules/npm/docs/output/configuring-npm
/usr/lib/node_modules/npm/docs/output/using-npm
/usr/include/node
/usr/share/doc/node
/usr/bin/npm

/usr/binや/usr/libの配下にそのまま入るんですね…バージョンごとにディレクトリ管理されていたりするのかなと思っていました…。

$ ls -l $(which node)
-rwxr-xr-x 1 root root 90940576  4月 12 14:31 /usr/bin/node


$ ls -l $(which npm)
lrwxrwxrwx 1 root root 38  4月 13 22:35 /usr/bin/npm -> ../lib/node_modules/npm/bin/npm-cli.js

追加でNode.js 16をインストールしてみる

先程の結果からなんとく予想は付きますが、Node.js 18をインストールした状態でNode.js 16のインストールを試みます。

$ curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - &&\
sudo apt-get install -y nodejs

PPAの定義場所としてもパスが重複するので、Node.js 18をインストールした時の情報が失われますね…。

## Creating apt sources list file for the NodeSource Node.js 16.x repo...

+ echo 'deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x jammy main' > /etc/apt/sources.list.d/nodesource.list
+ echo 'deb-src [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x jammy main' >> /etc/apt/sources.list.d/nodesource.list

Node.jsもインストール済み扱いになっています。

nodejs はすでに最新バージョン (18.16.0-deb-1nodesource1) です。

というわけで、ふつうにやるとNodeSourceからインストールを行う場合はいずれかのバージョンを選択することになるかなと。
覚えておきましょう。

その気になれば/etc/apt/sources.list.d配下に各バージョンのPPAの定義を作れますし、そうするとインストールするNode.jsの
バージョンの選択は可能になるのですが。結局インストール先のパスが同じなので、共存はできません。

まとめ

NodeSourceのPPAからNode.jsをインストールしてみました。

導入自体は簡単なのですが、複数バージョンをインストールできないのが難点かなとは思いました…。
各メジャーバージョンの最新版でいいので、複数入れられるようにしたかったところですが…仕方ありません。

複数のバージョンを扱いたい場合は、nvm等に頼ることになりそうです。