なぜ開発者はNode.jsとnpmを必要とするのか?
Ubuntuサーバーの構築が完了したら、次に何をインストールしますか?ウェブ開発者、特にJavaScriptを扱う開発者にとって、その答えはほぼ間違いなくNode.jsとnpmです。
基本的に、Node.jsはJavaScriptの制約を打ち破ります。これにより、ブラウザを必要とせずにサーバー上で直接JavaScriptコードを実行できます。その結果、モバイルアプリのAPIから複雑なマイクロサービスまで、バックエンド全体を単一の言語で構築できます。そして、npm(Node Package Manager)は、何百万もの既存のコードライブラリをインストール、共有、管理するのに役立つパッケージマネージャー、いわば「相棒」です。
要するに、これらは以下の目的で必要になります:
- サーバーサイドアプリケーションの構築(例:React NativeアプリのAPI、Next.jsサイトのバックエンド)。
- ViteやWebpackのようなモダンなフロントエンドビルドツールの使用。例えば、普段使う`npm run build`コマンドはNode.jsのおかげで機能します。
- 開発プロセスにおける自動化スクリプトの実行。
Node.jsを始めるにあたり、いくつかのインストール方法があることに気づくでしょう。Ubuntuで`apt`、CentOSで`yum`を選択するように、各方法にはそれぞれの哲学があります。最初から正しい方法を選ぶことで、特にバージョンの競合といった将来の多くの問題を回避できます。
Node.jsとnpmをインストールする3つの一般的な方法
以下に、最も一般的な3つの方法を紹介します。プロの開発者に好まれる最も柔軟な方法から、最もシンプルですが本番環境ではあまり使われない方法まで、順に説明します。
方法1:NVM (Node Version Manager) を使用する – 最も柔軟な方法
NVMは、同じマシン上で複数のNode.jsバージョンを管理するのに役立つツールです。これは、各プロジェクトが異なるNodeバージョンを要求する場合の救世主となります。例えば、プロジェクトAはNode 18 (LTS)で動作し、プロジェクトBは新機能を利用するためにNode 20が必要な場合などです。NVMを使えば、たった1行のコマンドでバージョンを切り替えることができます。
ステップ1:NVMのインストール
ターミナルを開き、NVMのインストールスクリプトを実行します。最新のバグ修正や機能が含まれているため、NVMの公式GitHubページで最新バージョンのインストールコマンドを取得することをお勧めします。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
その後、ターミナルを再起動するか、以下のコマンドを実行してターミナルにNVMを「認識」させる必要があります。
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
ステップ2:NVMのインストール確認
NVMが正しくインストールされたか確認するために、次のコマンドを入力します:
command -v nvm
ターミナルが`nvm`を返せば成功です。
ステップ3:Node.jsバージョンのインストール
NVMを使えば、Node.jsのインストールは非常に直感的です。ほとんどのプロジェクトで推奨される安定版である最新のLTS (Long-Term Support) バージョンをインストールするには:
nvm install --lts
または、プロジェクトが特定のバージョン(例:`18.17.0`)を要求する場合は:
nvm install 18.17.0
ステップ4:使用するNode.jsバージョンの選択
インストール後、現在のセッションでそのバージョンを使用するようNVMに「指示」する必要があります:
nvm use 18.17.0
新しいターミナルを開くたびに特定のバージョンをデフォルトとして設定するには、次のコマンドを使用します:
nvm alias default 18.17.0
方法2:NodeSource PPAリポジトリを使用する
特定のNode.jsバージョンが1つだけ必要で、頻繁に変更する必要がない場合、NodeSourceのPPA (Personal Package Archive) はシンプルで効果的な選択肢です。
ステップ1:NodeSource PPAの追加
例えば、Node.jsバージョン20.xをインストールしたい場合:
# 必要なパッケージがインストールされていることを確認する
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
# パッケージを認証するためにNodeSourceのGPGキーを追加する
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
# Node.js 20.xのリポジトリをシステムに追加する
NODE_MAJOR=20
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
ステップ2:Node.jsのインストール
あとはパッケージリストを更新し、通常通りインストールするだけです:
sudo apt-get update
sudo apt-get install -y nodejs
この方法は`node`と`npm`の両方を自動的にインストールします。しかし、Node.jsのアップグレードやバージョン切り替えがNVMを使用する場合に比べてかなり複雑になるという大きな欠点があります。
方法3:Ubuntuのデフォルトリポジトリから (非推奨)
これは最も簡単な方法ですが、本格的な開発環境には推奨されません。理由は、UbuntuのデフォルトリポジトリにあるNode.jsのバージョンは非常に古いことが多いからです。例えば、コミュニティがすでにNode.js 20.xに移行しているのに、デフォルトリポジトリはまだバージョン16.xを提供している可能性があります。
sudo apt update
sudo apt install nodejs npm
この方法は、特定のバージョンにこだわらず、簡単なタスクのために「一時しのぎ」のNode.jsが必要な場合にのみ使用すべきです。
設定と最適化
インストール後、バージョンを再確認してすべてが正常に動作していることを確認しましょう:
node -v
npm -v
PPAまたはデフォルトリポジトリでインストールした場合、グローバルパッケージ(例:`npm install -g pm2`)をインストールするために`sudo`権限が必要になります。これは不便なだけでなく、セキュリティ上のリスクも伴います。これを解決するには、npmのグローバルディレクトリを再設定することをお勧めします。
ステップ1:ホームディレクトリにグローバルパッケージ用のディレクトリを作成する
mkdir ~/.npm-global
ステップ2:npmがこの新しいディレクトリを使用するように設定する
npm config set prefix '~/.npm-global'
ステップ3:ディレクトリをPATH環境変数に追加する
`~/.profile`ファイル(または`~/.bashrc`)を開き、ファイルの末尾に次の行を追加します:
export PATH=~/.npm-global/bin:$PATH
その後、`source ~/.profile`コマンドを実行して現在のセッションのPATHを更新します。これ以降、`-g`フラグでインストールしたパッケージはすべてこのディレクトリに配置され、`sudo`なしでどこからでも実行できるようになります。
アプリケーションのテストと監視
最も良いテスト方法は、簡単なNode.jsウェブサーバーを作成することです。
ステップ1:server.jsファイルを作成する
以下の内容で`server.js`という名前のファイルを作成します。これは、ポート3000で待ち受け、「Hello ITfromZERO!」という文字列を返す最小限のウェブサーバーです。
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello ITfromZERO!\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
ステップ2:サーバーを実行する
ターミナルで `node server.js` コマンドを実行します。`Server running at http://127.0.0.1:3000/` というメッセージが表示されます。
ステップ3:結果を確認する
別のターミナルを開き、`curl`を使ってリクエストを送信します:
curl http://127.0.0.1:3000
`Hello ITfromZERO!` を受け取ったら、おめでとうございます、あなたのNode.jsは完璧に動作しています!
PM2によるアプリケーション監視
ターミナルを閉じると、`node server.js`アプリケーションも終了してしまいます。実際のデプロイでは、アプリケーションを常に実行し続けるためにプロセス管理ツールが必要です。PM2は、Node.jsエコシステムで最も人気があり、強力な選択肢です。
PM2のインストール(グローバル):
npm install -g pm2
PM2でアプリケーションを実行する:
pm2 start server.js
PM2の最大の利点は、アプリケーションがクラッシュした場合に自動的に再起動し、高いアップタイムを確保できることです。また、システムの起動と同時に起動することもでき、サーバーが再起動するたびにアプリケーションが自動的に実行されるようになります。
便利なPM2コマンド:
- `pm2 list`: PM2が管理しているすべてのアプリケーションを一覧表示します。
- `pm2 stop server`: アプリケーションを停止します(`server`を`pm2 list`で得られる名前またはIDに置き換えます)。
- `pm2 restart server`: アプリケーションを再起動します。
- `pm2 logs`: すべてのアプリケーションのリアルタイムログを表示します。
- `pm2 monit`: アプリケーションのCPUとRAMを監視するダッシュボードを開きます。
これで、Ubuntu上でNode.jsを扱うための「定番」ツールセットが手に入りました。バージョンを柔軟に切り替えるためのNVMと、アプリケーションを24時間365日安定して実行するためのPM2です。あなたの環境は、あらゆるプロジェクトに対応できる準備が整いました!

