Skip to content
Latchkey

Node.jsとは?JavaScriptランタイムを解説

Node.jsはJavaScriptをブラウザの外で実行できるようにするランタイムで、サーバー、buildツール、そしてCI/CDのJavaScriptツールチェーンの大部分を支えています。

Node.jsはChromeのV8 JavaScriptエンジンを取り込み、ファイル、ネットワーク、プロセス向けのAPIで包むことで、JavaScriptがサーバーやコマンドライン上で動くようにしました。npm、bundler、test runner、そして数え切れないCIツールの土台となっています。

Node.jsとは

Node.jsはV8エンジン上に構築された、オープンソースでクロスプラットフォームなランタイムです。ファイルシステム、HTTP、stream、子プロセス向けの標準ライブラリと、パッケージをインポートできるモジュールシステムを提供します。JavaScriptで書かれたbuildスクリプトやtest runnerを実行するとき、それを実行しているのはNode.jsです。

イベントループ

Node.jsはシングルスレッドでノンブロッキングなイベントループを使います。遅いI/Oを待つ代わりに、callbackを登録して処理を続け、結果が揃い次第それらを処理します。これによりI/O負荷の高い処理に効率的になります。CPUバウンドな処理は依然としてループをブロックしうるため、重いタスクはしばしばworker threadや別プロセスにオフロードされます。

簡単な例

数行でHTTPサーバーを起動でき、ランタイムとその標準ライブラリを示せます。

A minimal Node.js server
import { createServer } from "node:http";

createServer((req, res) => {
  res.end("hello from node");
}).listen(3000);

CI/CDでの役割

Node.jsは、JavaScript以外のプロジェクトであってもCIのいたるところにあります。パッケージマネージャー、linter、bundler、そして多くのGitHub ActionsはNodeベースです。pipelineはNodeのバージョンを (多くはsetupステップや.nvmrcで) 固定し、buildが再現可能になるようにします。ローカルとCIでNodeのバージョンが食い違うことは「自分のマシンでは動く」型の失敗のよくある原因なので、バージョンは明示する価値があります。

代替ツール

DenoとBunはより新しいJavaScriptおよびTypeScriptのランタイムです。Denoはセキュリティと組み込みのTypeScriptを重視し、Bunは速度に注力し、パッケージマネージャーとtest runnerを同梱します。Node.jsは、その巨大なエコシステムと長期サポート版により、依然としてデフォルトの座を保っています。

重要なポイント

  • Node.jsはV8エンジン上で、ブラウザの外でJavaScriptを実行します。
  • そのノンブロッキングなイベントループはI/O負荷の高いワークロードに適しています。
  • CI/CDのJavaScriptツールの大部分を支えます。再現性のあるbuildのためにバージョンを固定しましょう。

関連ガイド