Node.jsでWEBサーバーを構築する

こんにちは。今回はNoode.jsを使用してWEBサーバーを構築してみたいと思います。

Node.jsの概要

Node.jsとは

node.jsとはサーバーサイドのJavaScript実行環境です。元来JavaScriptはWEBブラウザ上でしか動作させることができませんでしたが、サーバにNode.jsをインストールすることでサーバー上でJavaScriptを実行することができるようになります。WEBアプリケーションのサーバーサイド処理の実装によく使われます。

なぜNode.jsが必要なのか

PHPやRubyなどのサーバーサイド言語があるにも関わらずなぜNode.jsが必要されるのでしょうか。それはWebアプリケーションをJavaScriptのみで実装したいというニーズがあるからです。Webアプリケーションを作成する際にはクライアントサイドでHTML、JavaScript、CSS等の技術を使い、サーバーサイドではPHPやPython、Rubyなどのサーバーサイド用の言語を併用する必要がありました。多くの言語を覚える必要に迫られ学習コストが増加したり、複数の言語を使うので混乱したりというデメリットがありました。サーバーサイドでもJavaScriptが記述できれば覚える言語が少なくて済みます。これがNode.jsが必要とされる理由です。

Node.jsで何ができる?

Node.jsを使うとサーバーサイドでJavaScriptを動作させられます。では実際サーバーサイドではどのような処理ができるのでしょう。ざっと挙げると以下のようなことができます。

  • WEBアプリケーションを構築できる(バックエンドのDB処理など)
  • WEBサーバを構築する
  • スマホアプリを構築する

DBアクセスが必要となる動的なWEBアプリケーションはもちろんのこと、WEBサーバーも構築することができてしまいます。

Node.jsでWEBサーバを構築してみよう

ここからが本日の本題。Node.jsでWEBサーバーを作ってみましょう。最も簡単にNode.jsで何かを作るならまずはWEBサーバーを作ってみるとよいと思います。

環境

  • Ubuntu 20.04 (Windows11 WSL上に構築)

Node.jsのインストール

aptでnodeをインストールします。

$ sudo apt update
$ sudo apt install nodejs
$ nodejs -v
v 10.19.0

次にNode.jsのパッケージマネージャであるnpmをインストールします。

$ sudo apt install npm

これでNode.jsのインストールは完了です。

プロジェクトフォルダを作成する

今回はNode.jsでWEBサーバを構築し、静的なコンテンツを配信してみます。まずは適当な場所にプロジェクト用のフォルダを作成し、server.jsファイルを作成します。

node_sample/
 server.js

サーバーサイド処理を記述する

作成したserver.jsファイルを編集していきましょう。

// httpモジュールを読み込みます。これがWEBサーバーとなるオブジェクトです。
const http = require("http");

// createServerでWEBサーバを作成します。
const server = http.createServer((request, response) => {
    // ヘッダーを生成
    response.writeHead(200, {
        "Content-Type": "text/html"
    });

    // レスポンスボディを返します
    response.end("<h1>Hello World!</h1>");
});

// 3000番ポートで待ち受け
server.listen(3000);

まずはrequire(“http")でWEBサーバーとなるオブジェクトを読み込みます。createServerでWEBサーバを構築することができます。ブラウザでWEBサーバーにアクセスした際にはこちらのメソッドが実行されます。response.endメソッドでコンテンツを返します。今回はHTMLを固定で返すようにしています。最後、引数にポート番号を指定してserver.listenメソッドを実行します。すると指定したポートでWEBサーバーがリクエストを待ち受けます。

ブラウザでアクセスする

作成したWEBサーバーにブラウザからアクセスしてみましょう。ローカルに構築したのであればhttp://localhost:3000にアクセスします。今回私はWSL上に構築したので、windowsからアクセスする際にはlocalhostでは接続できません。ubuntu上でifconfigでWSLのIPアドレスを調べてアクセスします。アクセスするとresponse.endで指定したHTMLが表示されます。

簡単にWEBサイトを作成することができました。

まとめ

今回はNode.jsを体験するためにWEBサーバーを構築してみました。わずか数行のコードでWEBサーバーを構築できるのですから、驚きですね。