Node.js® について

非同期イベント駆動型の JavaScript ランタイムとして、Node.js はスケーラブルなネットワークアプリケーションを構築するために設計されています。次の「hello world」の例では、多くの接続を同時に処理できます。各接続時にコールバックが発火しますが、実行すべき処理がない場合、Node.js はスリープします。

const {  } = ('node:http');

const  = '127.0.0.1';
const  = 3000;

const  = ((, ) => {
  . = 200;
  .('Content-Type', 'text/plain');
  .('Hello World');
});

.(, , () => {
  .(`Server running at http://${}:${}/`);
});

これは、OS スレッドが採用されている今日のより一般的な並行処理モデルとは対照的です。スレッドベースのネットワークは比較的に非効率で、使用するのが非常に困難です。さらに、Node.js のユーザーはロックが存在しないため、プロセスのデッドロックを心配する必要がありません。Node.js のほとんどの関数は直接 I/O を実行しないため、Node.js 標準ライブラリの同期メソッドを使用して I/O が実行される場合を除き、プロセスがブロックされることはありません。何もブロックされないため、Node.js でスケーラブルなシステムを開発することは非常に合理的です。

もしこれらの言葉に馴染みがない場合は、ブロッキング vs. ノンブロッキングに関する詳しい記事があります。


Node.js は、Ruby の Event Machine や Python の Twisted のようなシステムと設計が似ており、それらの影響を受けています。Node.js はイベントモデルをさらに一歩進めています。イベントループをライブラリとしてではなく、ランタイムの構成要素として提供します。他のシステムでは、イベントループを開始するために常にブロッキングコールが存在します。通常、スクリプトの冒頭でコールバックを通じて動作を定義し、最後に EventMachine::run() のようなブロッキングコールによってサーバーが起動されます。Node.js には、このようなイベントループを開始するコールはありません。Node.js は、入力スクリプトを実行した後に単純にイベントループに入ります。実行すべきコールバックがなくなると、Node.js はイベントループを終了します。この動作はブラウザの JavaScript に似ており、イベントループはユーザーから隠されています。

HTTP は Node.js において第一級のオブジェクトであり、ストリーミングと低遅延を念頭に置いて設計されています。これにより、Node.js は Web ライブラリやフレームワークの基盤として非常に適しています。

Node.js がスレッドなしで設計されているからといって、環境内の複数のコアを活用できないわけではありません。child_process.fork() API を使用して子プロセスを生成することができ、それらは簡単に通信できるように設計されています。同じインターフェース上に構築されているのが cluster モジュールで、これによりプロセス間でソケットを共有し、コア全体でのロードバランシングを可能にします。

Node.js の公式リソース

Node.js を使用する際の信頼性とセキュリティを確保するため、常に公式の情報源を使用してください。非公式の情報源からのメール、バイナリ、ダウンロードを信用しないでください。

Node.js の公式ドメイン

Node.js のバイナリをダウンロードしたり、公式ドキュメントにアクセスしたりするには、これらのドメインのみを使用してください。

公式 npm パッケージ

Node.js チームは、以下の公式 npm パッケージスコープを管理しています。

さらに、Node.js チームは nodejs-foundation npm アカウントによって公開されたパッケージも管理していますが、他の Node.js 関連パッケージ (undici など) もプロジェクトと密接に関わるコントリビューターによって管理されている場合があります。

Node.js チームのパッケージを使用することで、公式にサポートされた Node.js コンポーネントを使用していることが保証されます。

公式 GitHub Organization

Node.js および関連プロジェクトは、以下の公式 GitHub Organization の下で管理されています。

公式コミュニケーションチャネル

Node.js と OpenJS Foundation は、様々な公式およびコミュニティがサポートするチャネルを通じてコミュニケーションを行っています。参加方法の詳細は 参加する のページで確認できます。

ウェブサイトの問題とダウンタイムの報告

Node.js のウェブサイトで問題が発生した場合は、Node.js ウェブサイトリポジトリで報告してください。障害に関するリアルタイムの更新情報は、Node.js ステータスページをご覧ください。