お金をかけずにサーバーの勉強をしよう

Node.jsインストール

2024年5月28日

メニューへ戻る

Ubuntu Server 24.04に Node.jsをインストールします。

直接的にサーバーの話ではないですが、JavaScriptで作られたWebサイトを提供している会社では Node.jsを使用していると思いますので、サーバー管理者も環境としてどういうものなのかを理解しておく必要があります。

実際に環境を構築して簡単な WEBサーバーを立ち上げてみることによって、Node.jsが何者か分かると思います。

Node.jsの本家サイトはこちら。
Node.js

Node.jsのバージョン番号は、偶数が長期サポート(LTS)版で、奇数が最新版となります。
今の時期だけか分かりませんが、2024年5月28日時点では上記のサイトに以下のようなバージョンが挙げられていました。

20.13.1LTS
21.7.3最新版
22.2.0次の LTS (2024年10月から)

余程最新の機能を追うのでなければ、偶数番号の LTS版を選びましょう。

なお、Node.jsのバージョンアップは結構頻繁にあるので、バージョンが上がってしまった場合でもこのルールに従っておけば良いと思います。

22.2.0が LTSになるまであと数ヶ月しかありませんが、ここはグッとこらえて、20.13.1をインストールします。


1.事前確認

Node.jsのサイトからダウンロードできるんですけど、Ubuntu 24.04のパッケージリポジトリにはないか先に確認しておきましょう。

aptのほう。

subro@UbuntuServer2404-1:~$ apt info nodejs
Package: nodejs
Version: 18.19.1+dfsg-6ubuntu5
Priority: extra
Section: universe/web
Origin: Ubuntu
Maintainer: Ubuntu Developers 
Original-Maintainer: Debian Javascript Maintainers 
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 4,020 kB
Provides: node-types-node (= 18.18.14~18.19.1+dfsg-6ubuntu5)
Depends: libc6 (>= 2.34), libnode109 (= 18.19.1+dfsg-6ubuntu5)
Recommends: ca-certificates, nodejs-doc
Suggests: npm
Conflicts: nodejs-legacy
Breaks: libnode72 (<< 13), libnode83 (<< 16.13.2+really14.19.1~dfsg~), node-babel-runtime (<< 7), node-jest (<< 29~), node-typescript-types (<< 20210110~)
Replaces: libnode72 (<< 13), libnode83 (<< 16.13.2+really14.19.1~dfsg~), nodejs-legacy
Homepage: https://nodejs.org/
Download-Size: 306 kB
APT-Sources: http://jp.archive.ubuntu.com/ubuntu noble/universe amd64 Packages
Description: evented I/O for V8 javascript - runtime executable
 Node.js is a platform built on Chrome's JavaScript runtime for easily
 building fast, scalable network applications. Node.js uses an
 event-driven, non-blocking I/O model that makes it lightweight and
 efficient, perfect for data-intensive real-time applications that run
 across distributed devices.
 .
 Node.js is bundled with several useful libraries to handle server
 tasks:
 .
 System, Events, Standard I/O, Modules, Timers, Child Processes, POSIX,
 HTTP, Multipart Parsing, TCP, DNS, Assert, Path, URL, Query Strings.

18.9.1、もっと前の LTSでした。

snapのほう。

subro@UbuntuServer2404-1:~$ snap info node
summary:   Node.js
publisher: OpenJS Foundation (iojs✓)
store-url: https://snapcraft.io/node
contact:   https://github.com/nodejs/snap
license:   MIT
description: |
  A JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven,
  non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm,
  is the largest ecosystem of open source libraries in the world. https://nodejs.org/
snap-id: MEd4V4HHFkCXBSz6UzVmKF2D2PmWcVwR
channels:
  20/stable:        20.13.1                        2024-05-09 (8649) 34MB classic
  20/candidate:     ↑
  20/beta:          ↑
  20/edge:          ↑
  latest/stable:    –
  latest/candidate: –
  latest/beta:      –
  latest/edge:      23.0.0-nightly20240527ff659fae 2024-05-27 (8715) 38MB classic
  22/stable:        22.1.0                         2024-05-13 (8656) 38MB classic
  22/candidate:     ↑
  22/beta:          ↑
  22/edge:          ↑
  21/stable:        21.7.3                         2024-04-10 (8530) 36MB classic
  21/candidate:     ↑
  21/beta:          ↑
  21/edge:          ↑

〜〜〜 以下省略 〜〜〜

こちら、欲しいバージョンになっていますね。

Ubuntu専用の手順になりますが、snap版パッケージを導入してみます。

※一応 Node.jsでは deb版パッケージを Node.jsのリポジトリで配布しています。
どうしてもそちらでやりたい方は以下に説明がありますので、そちらをどうぞ。
NodeSource Node.js Binary Distributions



2.環境

そういう訳で、環境はこのようになります。


3.インストール

上の確認でパッケージの情報に「classic」ってありますんで、snap install コマンドの時に --classicオプションを使います。
(インストールディレクトリがソフト本来の場所になるようです)

subro@UbuntuServer2404-1:~$ sudo snap install node --classic
2024-05-28T13:43:10+09:00 INFO Waiting for automatic snapd restart...
node (20/stable) 20.13.1 from OpenJS Foundation (iojs✓) installed

インストールできました。
snapのインストールはいつも味気ないですね。

どこに入ったんでしょうか。
Node.js本体である nodeコマンド周りを見てみます。

subro@UbuntuServer2404-1:~$ which node
/snap/bin/node

subro@UbuntuServer2404-1:~$ ls -l /snap/bin/node
lrwxrwxrwx 1 root root 13  5月 28 13:43 /snap/bin/node -> /usr/bin/snap

subro@UbuntuServer2404-1:~$ ls -l /snap/bin
合計 0
lrwxrwxrwx 1 root root 13  5月 28 13:43 node -> /usr/bin/snap
lrwxrwxrwx 1 root root 13  5月 28 13:43 node.npm -> /usr/bin/snap
lrwxrwxrwx 1 root root 13  5月 28 13:43 node.npx -> /usr/bin/snap
lrwxrwxrwx 1 root root 13  5月 28 13:43 node.yarn -> /usr/bin/snap
lrwxrwxrwx 1 root root 13  5月 28 13:43 node.yarnpkg -> /usr/bin/snap
lrwxrwxrwx 1 root root  8  5月 28 13:43 npm -> node.npm
lrwxrwxrwx 1 root root  8  5月 28 13:43 npx -> node.npx
lrwxrwxrwx 1 root root  9  5月 28 13:43 yarn -> node.yarn
lrwxrwxrwx 1 root root 12  5月 28 13:43 yarnpkg -> node.yarnpkg

これが --classicオプションの効果なのか、Node.js本来のインストールディレクトリ [/usr/bin] で動いているよう偽装しているようです。


4.nodeコマンド実行

Node.jsの本体は nodeコマンドです。

このコマンドに JavaScriptのソースファイルを引数で渡してやると、WEBブラウザの中で動かすためのものだった JavaScriptがコマンドラインで実行できるというものです。

ここでは snapパッケージでインストールしたので、[/snap/bin/node]が実行されるようになっていますが、これはシンボリックリンクで、[/usr/bin/snap]がリンク先になっています。

nodeコマンドを実行してバージョンを確認してみます。

subro@UbuntuServer2404-1:~$ node --version
v20.13.1

うっ、Node.jsって起動が速いんですけど、snap版だからか一呼吸間が空きました…。
お目当てのバージョンが無事インストールされました。

何か JavaScriptの関数を実行してみます。

subro@UbuntuServer2404-1:~$ node
Welcome to Node.js v20.13.1.
Type ".help" for more information.
> console.log("AAA")
AAA
undefined
> .exit

subro@UbuntuServer2404-1:~$

JavaScriptを普通の開発言語として使えるんだから大したものだよ、と思います。

この後 Node.jsを使って Webサイトを作りたい所ですが、JavaScriptだとそんなに簡単じゃないです。
それは別に「Node.js + Expressで WEBサーバープログラム作成」に書きましたので、そちらをどうぞ。


Node.jsの本は沢山出版されています。
どれでも良いと思いますが、Node.jsのバージョンアップが速いため、なるべく新しいものを。