Node.js入門
Node.jsは、オープンソースのクロスプラットフォームJavaScriptランタイム環境です。 あらゆる種類のプロジェクトに最適なツールです。
Node.jsは、Google ChromeのコアであるV8 JavaScriptエンジンをブラウザ外で実行します。 これにより、Node.jsは非常に高性能になります。
Node.jsアプリは、リクエストごとに新しいスレッドを作成することなく、単一のプロセスで実行されます。 Node.jsは、標準ライブラリに非同期I/Oプリミティブのセットを提供しており、JavaScriptコードのブロッキングを防ぎます。一般に、Node.jsのライブラリは非ブロッキングパラダイムを使用して記述されているため、ブロッキング動作は標準ではなく例外となります。
Node.jsがネットワークからの読み取り、データベースまたはファイルシステムへのアクセスなど、I/O操作を実行する場合、スレッドをブロックしてCPUサイクルを無駄に待機する代わりに、Node.jsはレスポンスが返ってきたときに操作を再開します。
これにより、Node.jsは、スレッドの同時実行性を管理するという負担(バグの大きな原因となる可能性があります)を導入することなく、単一のサーバーで数千の同時接続を処理できます。
ブラウザ用にJavaScriptを記述する何百万人ものフロントエンド開発者が、まったく異なる言語を学ぶ必要なく、クライアントサイドコードに加えてサーバーサイドコードを記述できるようになったため、Node.jsには独自の利点があります。
Node.jsでは、すべてのユーザーがブラウザを更新するのを待つ必要がないため、新しいECMAScript標準を問題なく使用できます。Node.jsバージョンを変更することで、使用するECMAScriptバージョンを決定できます。また、Node.jsをフラグ付きで実行することにより、特定の実験的な機能を有効にすることもできます。
Node.jsアプリケーションの例
Node.jsの最も一般的なHello Worldの例は、Webサーバーです
const { createServer } = require('node:http');
const hostname = '127.0.0.1';
const port = 3000;
const server = createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
このスニペットを実行するには、server.js
ファイルとして保存し、ターミナルでnode server.js
を実行します。
このコードは、最初にNode.js http
モジュールを含んでいます。
Node.jsには、ネットワークのファーストクラスのサポートを含む、素晴らしい標準ライブラリがあります。
http
のcreateServer()
メソッドは、新しいHTTPサーバーを作成して返します。
サーバーは、指定されたポートとホスト名でリッスンするように設定されています。 サーバーの準備ができたら、コールバック関数が呼び出され、この場合はサーバーが実行されていることが通知されます。
新しいリクエストが受信されるたびに、request
イベントが呼び出され、2つのオブジェクトが提供されます。リクエスト(http.IncomingMessage
オブジェクト)とレスポンス(http.ServerResponse
オブジェクト)です。
これら2つのオブジェクトは、HTTP呼び出しを処理するために不可欠です。
1つ目はリクエストの詳細を提供します。 この簡単な例では、これは使用されませんが、リクエストヘッダーとリクエストデータにアクセスできます。
2つ目は、呼び出し元にデータを返すために使用されます。
この場合は
res.statusCode = 200;
を使用すると、statusCodeプロパティを200に設定して、成功したレスポンスを示します。
Content-Typeヘッダーを設定します
res.setHeader('Content-Type', 'text/plain');
そして、レスポンスを閉じ、コンテンツを引数としてend()
に追加します
res.end('Hello World\n');
その他の例
hello worldを超えるNode.jsの例については、https://github.com/nodejs/examplesを参照してください。