Skip to content

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 では、すべてのユーザーがブラウザを更新するのを待つ必要がないため、新しい ECMAScript 標準に問題なく使用できます。Node.js のバージョンを変更することで使用する ECMAScript のバージョンを決定し、フラグを使用して Node.js を実行することで特定の実験的機能を有効にすることもできます。

Node.js アプリケーションの例

Node.js の最も一般的な Hello World の例は Web サーバーです。

js
import { createServer } from '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を実行します。コードの mjs バージョンを使用する場合は、server.mjsファイルとして保存し、ターミナルでnode server.mjsを実行する必要があります。

このコードはまず、Node.js のhttp モジュールを含みます。

Node.js には、ネットワーキングのファーストクラスのサポートを含む素晴らしい標準ライブラリがあります。

httpcreateServer()メソッドは新しい HTTP サーバーを作成して返します。

サーバーは指定されたポートとホスト名でリッスンするように設定されています。サーバーの準備が整うと、コールバック関数が呼び出され、この場合はサーバーが実行中であることを通知します。

新しいリクエストが受信されるたびに、リクエストイベントが呼び出され、リクエスト(http.IncomingMessageオブジェクト)とレスポンス(http.ServerResponseオブジェクト)の 2 つのオブジェクトが提供されます。

これら 2 つのオブジェクトは、HTTP 呼び出しを処理するために不可欠です。

最初のオブジェクトはリクエストの詳細を提供します。この簡単な例では使用されませんが、リクエストヘッダーとリクエストデータにアクセスできます。

2 番目のオブジェクトは、呼び出し元にデータ返すために使用されます。

この場合、

js
res.setHeader('Content-Type', 'text/plain')

で、ステータスコードプロパティを 200 に設定して、正常な応答を示します。

Content-Type ヘッダーを設定します。

js
res.setHeader('Content-Type', 'text/plain')

そして、end()に引数としてコンテンツを追加して、レスポンスを閉じます。

js
res.end('Hello World')

これにより、クライアントにレスポンスが送信されます。