Menu

Node.jsとは?初心者向けにJavaScriptランタイムを解説

Node.jsはブラウザの外、つまりサーバーやターミナルでJavaScriptを動かすランタイムです。言語でもフレームワークでもなく、V8とイベントループ、それにファイル、ネットワーク、プロセスを扱うAPIの組み合わせです。

このページのコードはエディタで実行できます。編集してすぐに結果を確認できます。

Node.jsは、ブラウザの外でJavaScriptを動かすランタイムです。サーバー上でも、ターミナルでも、コマンドラインツールとしても動きます。プログラミング言語ではなく(言語はJavaScriptです)、フレームワークでもありません(ExpressはNode.jsの上で動くフレームワークです)。JavaScriptを実行するGoogleのV8エンジンに、イベントループと、ブラウザにはないファイル、ネットワーク、プロセス用の組み込みAPIを組み合わせたものです。

ファイルの中身、メジャーバージョン(v24)、そして window には undefined が表示されました。Node.jsには window を用意してくれるWebページがないからです。fs と process はNode.jsにしかありません。同じ行をブラウザのタブで実行すると、最初の行で例外が投げられます。

Node.jsはフレームワーク?それとも言語?

どちらでもありません。言語はJavaScriptで、Node.jsはそれを実行するプログラムです。JVMがJavaを、CPythonがPythonを実行するのと同じです。フレームワークはその上に乗ります。Express、Fastify、NestJSはNode.jsのプロジェクトにインストールするライブラリです。両者の詳しい比較はNode.js vs JavaScriptのページにあります。

中身を見ると、Node.jsは4つの部品でできています。

  • V8:Chromeに入っているJavaScriptエンジンです。コードを機械語に変換して実行します。
  • libuv:イベントループを提供するCのライブラリです。ディスク、ネットワーク、タイマーといった遅い処理を裏で行い、結果をコールバックに返します。
  • Node自身のAPI:ファイル用の fs、サーバー用の http、それに path、process、crypto、events など。インストール不要で、require か import ですぐ使えます。
  • npm:Node.jsに同梱されているパッケージマネージャーです。あらゆる言語の中で最大のパッケージレジストリを使えます。

Node.jsのファイルを実行する方法

公式サイトからNode.jsをインストールし(LTS版を選びます)、ターミナルで確認してからファイルを実行します。

node --version     # prints v24.x.x or similar
node app.js        # runs app.js and exits when it has nothing left to do
node               # with no file: an interactive prompt (the REPL)

待っているものが何もなくなると、プログラムは自分で終了します。タイマーも、開いたサーバーも、途中のファイル読み込みもない状態です。スクリプトは終了するのにWebサーバーは動き続けるのはこのためです。

核となる考え方、ノンブロッキングI/O

Node.jsは遅い処理を待ちません。ファイルの読み込みやネットワークのリクエストを開始したら、そのまま次の行を実行し、結果が準備できた時点で関数を呼び出します。

readFile の後にある2つの console.log が先に実行され、ファイルの中身は最後に届きました。1つのNode.jsプロセスが何千もの接続をさばけるのはこの仕組みのおかげです。あるリクエストがデータベースを待っている間も、イベントループがほかのリクエストを進めます。

Node.jsとブラウザの違い

ブラウザNode.js
動く場所Webページの中ターミナルやサーバー
あるものwindow、document、DOM、localStoragefs、process、http、Buffer、require
グローバルオブジェクトwindow(と globalThis)global(と globalThis)
ディスク上のファイルアクセスできないユーザーの権限の範囲で自由にアクセスできる
setTimeout、console、fetch、URLありあり

Node.jsは何に使われるのか

  • WebサーバーとAPI:RESTやGraphQLのバックエンド。Expressと組み合わせることが多いです。
  • リアルタイムアプリ:チャット、ライブダッシュボード、WebSocketを使ったマルチプレイヤーゲームなど、多くの接続を同時に開いておくもの。
  • コマンドラインツール:npm自体、Vite、ESLint、Prettier、TypeScriptのコンパイラはすべてNode.jsで動きます。
  • スクリプトと自動化:ファイル名の一括変更、APIの呼び出し、データの移行。

いちばん多い使い方はHTTPサーバーで、最初の1つなら組み込みの http モジュールだけで作れます。

サーバーは GET /hello に対して、受け取ったパスを返しました。リクエストバーのパスを /anything に変えて送ってみてください。このサーバーはすべてのURLを1つの関数で処理しているので、返事もそれに合わせて変わります。

Node.jsを選ぶべきとき

処理の大半がI/O待ち(リクエスト、データベース、ファイル)で、フロントエンドとバックエンドを1つの言語で書きたいならNode.jsが向いています。動画のエンコードや大規模な数値計算のように、CPUを長時間使う処理にはあまり向きません。長い計算は1本しかないJavaScriptのスレッドをふさぎ、ほかのリクエストはすべてその終わりを待つことになるからです。

よくある質問

Node.jsはフロントエンドですか、バックエンドですか?

主にバックエンドです。Node.jsは訪問者のブラウザではなく、サーバーや自分のマシンで動きます。とはいえフロントエンドの開発者も毎日使っています。npm、Vite、ESLintといったツールがNode.jsのプログラムだからです。

Node.jsはいつ誰が作りましたか?

Ryan Dahlが2009年に公開しました。現在はOpenJS Foundationがメンテナンスしていて、半年ごとにメジャーバージョンが出て、偶数番号のバージョンが長期サポート(LTS)になります。

Node.jsの前にJavaScriptを知っている必要はありますか?

はい、少なくとも基本は必要です。変数、関数、オブジェクト、配列、そしてコールバックかPromiseです。Node.jsが足すのはAPIで新しい構文ではないので、言語について学んだことはそのまま使えます。

Node.jsはシングルスレッドですか?

あなたのJavaScriptは1つのスレッドで動きます。Node.jsは裏でファイルシステムの処理、DNS、一部の暗号処理のために小さなスレッドプールを使うので、遅いI/Oを待っている間もコードはブロックされません。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める