「Node.jsを使ってみたいけれど、インストールの段階でつまずいてしまった」——そんな経験はありませんか。環境構築は最初のハードルですが、手順さえ押さえれば意外とスムーズに進みます。この記事では、Node.jsのインストールから実践的な活用まで、一歩ずつ丁寧にご案内します。
Node.jsとは?知っておきたい基礎知識
Node.jsは、ブラウザの外でJavaScriptを動かすための実行環境です。もともとJavaScriptはブラウザ上で動く言語でしたが、Node.jsの登場によってサーバーサイドの開発にも使えるようになりました。
私自身、最初は「JavaScriptでサーバーも書けるの?」と半信半疑でした。しかし実際に触れてみると、フロントエンドとバックエンドを同じ言語で書ける快適さに驚かされました。npmという豊富なパッケージ管理の仕組みもあり、ちょっとしたツールからWebアプリケーションまで幅広く対応できます。
「サーバーサイドは難しそう」と感じている方も多いのではないでしょうか。Node.jsはそのハードルをぐっと下げてくれる存在です。
Node.jsが選ばれる理由
Node.jsが世界中の開発者に支持されている背景には、いくつかの技術的な特徴があります。
まず、ノンブロッキングI/Oという仕組みです。従来のサーバーサイド言語では、ファイルの読み込みやデータベースへの問い合わせといった処理の完了を「待つ」間、他のリクエストを処理できないことがありました。Node.jsはこうした待ち時間を有効活用し、大量のリクエストを効率よくさばくことができます。チャットアプリやリアルタイム通知のように、多数の接続を同時に扱うサービスとの相性が抜群です。
次に、npmエコシステムの充実です。npmには200万を超えるパッケージが公開されており、認証処理、データベース接続、画像加工、メール送信など、必要な機能のほとんどがパッケージとして用意されています。車輪の再発明をせずに済むため、開発スピードが格段に上がります。
そして、学習コストの低さも見逃せません。すでにHTML・CSSと一緒にJavaScriptを学んだことがある方であれば、新しい言語を一から覚える必要がありません。フロントエンドで慣れ親しんだ文法や考え方をそのまま活かせるのは、想像以上に大きなメリットです。
LTSとCurrentの違い
Node.jsの公式サイトを開くと、LTS(Long Term Support) とCurrentという2つのバージョンが目に入ります。この違いを理解しておくと、バージョン選びで迷わなくなります。
LTS版は安定性を重視したバージョンで、リリースから30か月間セキュリティアップデートが提供されます。企業の本番環境や、長期にわたって運用するプロジェクトに向いています。偶数番号のメジャーバージョン(18、20、22など)がLTSに指定される仕組みです。
一方、Current版は最新の機能がいち早く取り込まれるバージョンです。新しいJavaScript構文への対応やパフォーマンス改善が含まれますが、APIが変更される可能性もあります。新機能を試したい方や、短期的なプロジェクトで最新機能を使いたい場合に適しています。
初めてNode.jsに触れる方には、迷わずLTS版をおすすめします。安定して動作しますし、ネット上の情報やチュートリアルもLTS版を前提に書かれていることが多いためです。
Node.jsのインストール手順【OS別に解説】
それでは、実際にNode.jsをインストールしていきましょう。ここではWindows・Mac・Linuxそれぞれの方法をご紹介します。
公式サイトからインストーラーを使う方法
最もシンプルなのは、Node.js公式サイトからインストーラーをダウンロードする方法です。トップページにアクセスすると「LTS(推奨版)」と「Current(最新版)」の2つが表示されます。初めての方にはLTS版をおすすめします。安定性が高く、長期間サポートされるためです。
Windowsの方は.msiファイル、Macの方は.pkgファイルをダウンロードして、画面の指示に従って進めるだけで完了します。
Windowsでの手順:
- 公式サイトからLTS版の
.msiファイルをダウンロードします - ダウンロードしたファイルをダブルクリックしてインストーラーを起動します
- 「Next」を押して進み、ライセンス条項に同意します
- インストール先は特別な理由がなければデフォルトのままで問題ありません
- 「Tools for Native Modules」のチェックボックスが表示された場合、C++を使ったネイティブモジュールのビルドに必要なツールを自動インストールしてくれます。初心者の方はチェックを入れておくと後々便利です
- 「Install」をクリックし、完了まで待ちます
Macでの手順:
- 公式サイトからLTS版の
.pkgファイルをダウンロードします - ダウンロードしたファイルを開いてインストーラーを起動します
- 画面の案内に沿って「続ける」をクリックし、インストールを完了させます
Macの場合、Homebrewを使ってbrew install nodeでインストールする方法もあります。普段からHomebrewを活用している方にはこちらも手軽な選択肢です。ただし、後述するバージョン管理ツールとの併用を考えると、最初からnvmやfnmを使う方がスムーズかもしれません。
Linuxでの手順:
Linuxではディストリビューションによって手順が異なります。UbuntuやDebianの場合、公式が提供するNodeSourceリポジトリを使うのが確実です。
# NodeSourceリポジトリの追加とNode.js LTSのインストール(Ubuntu/Debian)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejsディストリビューション標準のリポジトリにもNode.jsは含まれていますが、バージョンが古いことが多いため、NodeSourceを利用する方が安心です。
バージョン管理ツールを使う方法(推奨)
実務では、プロジェクトごとに異なるNode.jsのバージョンを使い分ける場面が出てきます。そこで便利なのがバージョン管理ツールです。
Mac・Linuxの方にはnvm、Windowsの方にはnvm-windowsやfnmがおすすめです。nvmを使ったインストール例を見てみましょう。
# nvmのインストール
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# ターミナルを再起動してからNode.jsをインストール
nvm install --lts
nvm use --lts振り返ると、私も最初は公式インストーラーだけで済ませていました。しかし複数のプロジェクトを扱うようになってからバージョンの衝突に悩まされ、nvmに移行したという経験があります。最初からバージョン管理ツールを使っておくと、後々の手間が省けるかもしれません。
nvmを導入しておくと、バージョンの切り替えもコマンド一つで行えます。
# 特定のバージョンをインストール
nvm install 20
# バージョンを切り替える
nvm use 20
# インストール済みのバージョン一覧を確認
nvm ls
# デフォルトのバージョンを設定
nvm alias default 20また、プロジェクトのルートディレクトリに.nvmrcファイルを置いておくと、チームメンバー全員が同じバージョンを使えるようになります。
# .nvmrcファイルの作成(現在のバージョンを記録)
node -v > .nvmrc
# .nvmrcに記載されたバージョンを使用
nvm useチーム開発をしていると「自分の環境では動くのに、他のメンバーの環境では動かない」という問題に遭遇することがあります。.nvmrcはそうしたトラブルを未然に防いでくれる、地味ながら頼もしい存在です。
Windowsユーザー向けの補足:fnmのすすめ
Windowsの方にはfnm(Fast Node Manager) も有力な選択肢です。Rust製で動作が非常に速く、Windows・Mac・Linuxのすべてに対応しています。PowerShellでの導入例は以下の通りです。
# fnmのインストール(wingetを使用)
winget install Schniz.fnm
# PowerShellプロファイルにfnmの初期化を追加
fnm env --use-on-cd | Out-String | Invoke-Expression
# Node.jsのインストール
fnm install --lts
fnm use --ltsfnmは.nvmrcファイルにも対応しているため、nvmを使っているチームメンバーとの共存も問題ありません。
インストールの確認とよくあるトラブル
インストールが完了したら、ターミナル(コマンドプロンプト)で以下を実行してみてください。
node -v
npm -vバージョン番号が表示されれば成功です。もし「コマンドが見つかりません」と出た場合は、パスの設定が正しくない可能性があります。ターミナルの再起動や、環境変数PATHの確認を試してみてください。
同じようなエラーで悩んでいる方も多いのではないでしょうか。特にWindowsでは、インストール後にターミナルを開き直すのを忘れがちです。些細なことですが、最初は見落としやすいポイントです。
よくあるトラブルと対処法
Node.jsのインストール直後に遭遇しやすいトラブルをいくつかまとめました。私自身もいくつか経験したものがありますので、参考にしていただければ幸いです。
「node: command not found」と表示される
最も多いトラブルです。原因のほとんどは、ターミナルを再起動していないか、PATHが正しく通っていないことにあります。
- まずターミナルを閉じて開き直してください
- nvmを使っている場合は、
~/.bashrcや~/.zshrcにnvmの初期化スクリプトが追加されているか確認しましょう - Windowsの場合は、システム環境変数のPATHにNode.jsのインストールディレクトリが含まれているかを確認してください
npmのパーミッションエラー(Mac・Linux)
npm install -gでグローバルにパッケージをインストールしようとして、EACCESエラーが出ることがあります。sudoを付けて無理やり実行したくなりますが、これは避けた方が賢明です。ファイルの所有権が混乱し、後々さらに厄介な問題を引き起こすことがあります。
nvmを使ってNode.jsをインストールしていれば、グローバルインストールでもパーミッションエラーは起きません。これもバージョン管理ツールをおすすめする理由の一つです。
古いNode.jsが使われてしまう
以前に公式インストーラーでインストールしたNode.jsが残っていて、nvmでインストールしたバージョンよりも優先されてしまうことがあります。which node(Mac・Linux)やwhere node(Windows)で、実際にどのNode.jsが使われているかを確認してみてください。古いものが残っている場合は、公式インストーラー版をアンインストールしてからnvmのNode.jsを使うようにすると解決します。
プロキシ環境下でのインストールエラー
企業のネットワーク環境では、プロキシの設定が必要になることがあります。npmにプロキシを設定するには以下のコマンドを実行します。
npm config set proxy http://proxy.example.com:8080
npm config set https-proxy http://proxy.example.com:8080私が以前お客様の環境で開発をお手伝いした際、このプロキシ設定に気づかず半日ほど悩んだことがありました。社内ネットワークで作業する方は、最初に確認しておくとよいポイントです。
実践:最初のNode.jsアプリを作ってみよう
環境が整ったら、さっそく簡単なアプリケーションを作ってみましょう。まずはプロジェクトフォルダを作成して初期化します。
mkdir my-first-app && cd my-first-app
npm init -ynpm init -yを実行すると、package.jsonというファイルが生成されます。これはプロジェクトの設定ファイルで、名前やバージョン、依存パッケージなどの情報が記録されます。Node.jsのプロジェクトにおける「顔」のようなものだと思ってください。
次に、app.jsというファイルを作成して以下のコードを書いてみてください。
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
res.end('こんにちは、Node.jsの世界へようこそ!');
});
server.listen(3000, () => {
console.log('サーバーが http://localhost:3000 で起動しました');
});node app.jsで実行し、ブラウザでhttp://localhost:3000にアクセスするとメッセージが表示されます。たった数行でWebサーバーが動くことに、最初はちょっとした感動を覚えました。
コードの中身を理解する
先ほどのコードが何をしているのか、一行ずつ見ていきましょう。
require('http')— Node.jsに組み込まれているHTTPモジュールを読み込んでいます。外部パッケージのインストールは不要ですhttp.createServer()— HTTPサーバーを作成しています。引数に渡している関数が、リクエストを受け取るたびに実行されますreq— クライアントからのリクエスト情報が入っています。URLやHTTPメソッドなどを取得できますres— クライアントへのレスポンスを組み立てるオブジェクトですres.writeHead(200, ...)— ステータスコード200(成功)と、レスポンスヘッダーを設定していますres.end(...)— レスポンスの本文を送信し、通信を終了しますserver.listen(3000)— ポート3000でリクエストの待ち受けを開始します
初めて見ると少し難しく感じるかもしれませんが、「リクエストが来たら、何かを返す」というシンプルな構造です。この基本パターンを押さえておくと、この先の学習がぐっと楽になります。
サーバーの停止方法
実行中のサーバーを停止するには、ターミナルでCtrl + Cを押します。初めてNode.jsを動かした方が意外と戸惑うポイントなので、覚えておいてください。サーバーを起動したままターミナルを閉じてしまうと、バックグラウンドでプロセスが残ることがあります。その場合は、lsof -i :3000(Mac・Linux)でプロセスを特定し、killコマンドで停止できます。
さらに一歩進むために:Expressの導入
実際の開発では、フレームワークを活用することが一般的です。Node.jsの定番フレームワークであるExpressを導入してみましょう。
npm install expressconst express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Expressで動いています!');
});
app.listen(3000, () => {
console.log('http://localhost:3000 で起動中');
});Expressを使うとルーティングやミドルウェアの管理が格段に楽になります。Expressの他にもFastifyやHonoといった選択肢があり、どれを選ぶかはプロジェクトの要件次第です。一概にこれが正解とは言えない部分もありますが、最初の一歩としてはExpressが情報量も多く安心ではないでしょうか。
Expressでルーティングを追加する
Expressの強みは、URLごとに異なる処理を簡潔に書けることです。先ほどのコードを少し発展させてみましょう。
const express = require('express');
const app = express();
// JSONのリクエストボディを解析するミドルウェア
app.use(express.json());
app.get('/', (req, res) => {
res.send('トップページです');
});
app.get('/about', (req, res) => {
res.send('このアプリについて');
});
app.get('/users/:id', (req, res) => {
res.send(`ユーザーID: ${req.params.id}`);
});
app.post('/api/messages', (req, res) => {
const { text } = req.body;
res.json({ received: text, timestamp: new Date().toISOString() });
});
app.listen(3000, () => {
console.log('http://localhost:3000 で起動中');
});/users/:idのように書くと、URLの一部をパラメータとして受け取れます。/users/1にアクセスすればreq.params.idに1が入る仕組みです。こうしたルーティングの柔軟さが、Expressが長年支持され続けている理由の一つだと感じます。
package.jsonにスクリプトを登録する
毎回node app.jsと入力する代わりに、package.jsonにスクリプトを登録しておくと便利です。
{
"scripts": {
"start": "node app.js",
"dev": "node --watch app.js"
}
}npm startでアプリを起動、npm run devで開発モード(ファイル変更時に自動再起動)で起動できます。--watchフラグはNode.js 18以降で利用可能な組み込み機能で、コードを修正するたびに手動で再起動する手間がなくなります。以前はnodemonという外部パッケージが必要でしたが、Node.js本体に同様の機能が取り込まれたのはありがたい進化です。
Node.jsを活用した開発で押さえておきたいこと
Node.jsのインストールと基本的な使い方を押さえたところで、実際の開発に進む前に知っておくと役立つポイントをいくつかご紹介します。
npmパッケージの管理
Node.jsの開発では、npmパッケージの扱いが日常的な作業になります。基本的なコマンドを整理しておきましょう。
# パッケージをインストール(dependencies に追加)
npm install パッケージ名
# 開発用パッケージをインストール(devDependencies に追加)
npm install --save-dev パッケージ名
# グローバルにインストール
npm install -g パッケージ名
# インストール済みパッケージの一覧
npm ls --depth=0
# パッケージのアップデート
npm update
# セキュリティ脆弱性のチェック
npm auditdependenciesとdevDependenciesの違いは、最初は分かりにくいかもしれません。簡単に言えば、dependenciesは本番環境でも必要なパッケージ(Expressなど)、devDependenciesは開発時のみ使うパッケージ(テストツールやリンターなど)です。この区別を意識しておくと、本番環境のデプロイ時に不要なパッケージを含めずに済みます。
node_modulesとpackage-lock.json
npm installを実行すると、node_modulesフォルダが生成されます。ここにすべての依存パッケージの実体が格納されています。このフォルダは非常に大きくなることがあるため、Gitで管理する対象からは外しましょう。.gitignoreファイルに以下を追加してください。
node_modules/
一方、package-lock.jsonはGitに含めるべきファイルです。このファイルには、インストールされたパッケージの正確なバージョンが記録されています。チームメンバーがnpm installを実行した際に、全員がまったく同じバージョンのパッケージを使えるようにする役割を担っています。
セキュリティへの意識
npmの豊富なエコシステムは大きな魅力ですが、外部パッケージを利用する以上、セキュリティへの意識も持っておきたいところです。定期的にnpm auditを実行して脆弱性をチェックする習慣をつけましょう。また、よく知らないパッケージをインストールする際は、ダウンロード数やメンテナンスの状況をnpmのサイトで確認してみてください。広く使われているパッケージであれば、脆弱性が見つかった場合も迅速に修正される傾向があります。
まとめ:Node.jsの世界を楽しもう
この記事では、Node.jsのインストールから簡単なアプリケーション作成までをご紹介しました。振り返ると、環境構築さえ乗り越えてしまえば、あとは手を動かすほどに理解が深まっていくと感じています。
改めてポイントを整理すると、以下の流れになります。
- Node.jsの基礎を理解する — JavaScriptをサーバーサイドで動かす実行環境であること、LTS版を選ぶべきこと
- バージョン管理ツールでインストールする — nvmやfnmを使えば、プロジェクトごとのバージョン切り替えも簡単
- インストール後の動作確認 —
node -vとnpm -vで確認し、トラブルがあればPATHを見直す - 手を動かしてアプリを作る — 簡単なHTTPサーバーから始めて、Expressへとステップアップ
- パッケージ管理の基本を押さえる —
package.jsonとnode_modulesの役割を理解する
Node.jsはフロントエンドエンジニアがサーバーサイドに挑戦する入り口としても、バックエンドエンジニアが素早くプロトタイプを作る手段としても優れた選択肢です。ぜひ今回の手順を参考に、開発の幅を広げてみてください。
環境構築や開発でお困りのことがあれば、技術に精通したプロフェッショナルがお力になれるかもしれません。お気軽にaduceのお問い合わせはこちらからご相談ください。
