Expressを使用しない単純なNode.jsサーバーの作成


Node.jsとは?

Node.jsとは、サーバーサイドのJavaScript実行環境です。
ブラウザGoogle Chrome用に開発されたJavaScriptエンジンV8がサーバ上でプログラムを実行できるように、ファイルやネットワークI/Oなど多くの機能を追加しています。軽量で効率よく多くのリクエストを処理するネットワークアプリケーションの構築ができるプラットフォームです。

Node.jsでは“⁠軽量で効率良い”処理を実現するために次の2つのモデルを採用しています。

  • ノンブロッキングI/O

  • イベントループ

JavaScriptの1つの特徴として、シングルスレッドで動作することがあげられます。Node.jsにおいても同様で、デッドロックなどを意識する必要がなくなるというメリットがあります。しかしその反面、同時に1つの処理しかできず、複数の処理をさばけません。そのためNode.jsではノンブロッキングI/Oを採用しています。
例えば、データベースにアクセスして検索結果を取得するという処理を行う場合、データベースに問い合わせてから結果が返ってくるまで、待ち時間があります。
一般的にはライブラリなどを用いてデータベースから結果が返るまでの間、呼び出し元の処理を止めておきます。そのため結果を利用した処理を続けて定義できます。
それに対してノンブロッキングI/Oは、データベースに問い合わせたら次の処理に移ります。結果の受け取りはコールバックで実現します。このように基本的に重い入出力処理を非同期で実行するのがノンブロッキングI/Oです。

リクエストやコールバックの発生はイベントとして登録し⁠、そのイベントに関する処理が終わったら次のイベントを処理する。
このようなイベントループをNode.jsは採用しています。

Node.js 公式サイト

Node.jsインストール方法

公式サイトから推奨版をダウンロードし、PCへインストールします。
公式サイトにアクセスすると、自動的に自分のPC環境に合ったパッケージが表示されます。
Node.js ダウンロードはこちらから

Node.jsインストール後、ターミナルで以下のコマンドを実行してください。
Node.jsのバージョンが表示されれば、正常にインストールできています。

ターミナル
$ node -v
v.14.15.4

Webサーバーを作ってみよう!

Node.js公式サイトのガイドにしたがって、Webサーバーを構築してみます。

app.jsという名前のファイルを作成し、以下のコードを書きます。

app.js
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('<h1>Hello World</h1>');
});

server.listen(port, hostname, () => {
    console.log(`Server is running at http://${hostname}:${port}/🎉✨`)
});

node app.js というコマンドを入力してWebサーバーを起動します。
ターミナル上に、Server is running at http://127.0.0.1:3000/🎉✨というメッセージが表示されます。

また、Webブラウザで http://127.0.0.1:3000 にアクセスすると、Hello World というメッセージが表示されます。

コード解説

Webサーバーを構築するには、「httpモジュール」を使います。
httpモジュールとは、HTTPサーバーやHTTPクライアントとしての機能を構築するために使用します。

httpモジュールをrequire()で呼び出して使用します。

const http = require('http');

httpモジュールをrequire()で呼び出したら、createServer() メソッドを使って、Webサーバーを構築します。
createServer()メソッドの引数には、ステータスコードやヘッダー情報、表示するコンテンツなど、さまざまなサーバー側の処理を設定することができます。
setHeader()で「Content-Type」を設定します。
end()の引数にはHTMLを設定し、'Hello World'をブラウザに表示するようにしています。

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('<h1>Hello World</h1>');
});

hostname 127.0.0.1について

127.0.0.1 はループバックアドレスの1つで、ネットワーク上においてそのPC自身を示す仮想的なIPアドレスのことです。同一ホスト内でのみ通信を行います。ホスト名としては、慣用的に localhost が用いられます。
そのため、

const hostname = 'localhost';

このように書き換えても、同じようにWebサーバーを起動することができます。

このようにして、Node.jsを使ってWebサーバーを構築することができました!

参考文献