Welcome to Node.js

Node.jsをはじめよう

Node.jsで5行Webサーバを書いてみよう〈Node.jsシリーズ vol.1〉

今回から、代表的なサーバーサイドJavaScriptである「Node.js」を実際に触りながらご紹介していきたいと思います。

フロントエンドに登場する印象が強いJavaScriptですが、サーバー上でこれが動いてしまうとは、どういうことなんでしょうか? そして、それによってどんなメリットがあるんでしょう? 初回となるこの記事では、そのあたりの説明からはじめたいと思います。

Node.jsの特徴

Node.jsとは、Google V8 JavaScript Engine上で動作するサーバーサイドJavaScript環境です。2009年、ライアン・ダール氏によって開発が始まり、2015年6月現在の安定版は0.12.4となっています。

Webサイト

JavaScriptのわかりやすい文法に加え、DBへのアクセスなどさまざまな機能を持ったバイナリ形式のコアモジュールを読み込むことで、比較的簡単かつ高機能なサーバープログラムを記述することができます。

最近ではLinkedInのモバイルサイトやWalmartなどの大企業のサービス、またGitHubが開発したチャットボットフレームワーク「Hubot」にも採用されているNode.js。いったいどんな点が魅力的なのでしょうか。

サーバーを書きやすい

Node.jsの大きな特長のひとつは「イベント駆動型言語」であるということ。プログラムは起動すると同時にイベントを待機する状態となります。言語の基本仕様にこの仕組が組み込まれているため、私達はイベントハンドラを記述することにのみ専念することができます。この「イベント駆動型」は、随時リクエストを受け付けるサーバープログラムを記述する上ではとても好都合というわけです。

非同期処理でリクエストをがんがんさばける

Node.jsのイベント処理は「ノンブロッキング(非同期)IO」という方式をとっています。簡単にいえば「通信の完了を待たずにどんどんリクエストを処理していく」ということ。一般的にはプロセスごとの通信がひと通り完了してから次のリクエストを処理しますが、Node.jsでは文字通り非同期にどんどんリクエストを受け付けていくため、サーバーの返答待ちが発生しないのです。たとえばNode.jsでWebサーバーを記述した場合、Apacheなどの一般的なWebサーバーに比べ、同規模ではるかに大量のリクエストをさばくことが可能なのです。

あなたも、この魅力を体感してみたくなりませんか?

さっそく手元の環境にNode.jsをインストールして、さわってみることにしましょう。

Node.jsのインストール

まずNode.jsの公式サイトにアクセスし、最新のパッケージをダウンロードします。Windows・Mac環境でサイトにアクセスすると、トップページの「INSTALL」ボタンから専用のインストーラパッケージがダウンロードできます。ソースからインストールしたい方は、その下の「DOWNLOAD」ボタンをクリックしてダウンロードページに進みましょう。

インストールが終わったら、terminalで$ node -vと打ってみましょう。

バージョン番号が表示されたら、インストール完了です。

サンプルコードを書いてみよう

たった5行でWebサーバーが書ける

Node.jsの手軽さを体感するため、手始めに簡単なWebサーバーを記述して起動してみたいと思います。 エディタを開き、コードを書いてみましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
// httpモジュールを読み込み、インスタンスを生成
var http = require('http');

// HTTPサーバーのイベントハンドラを定義
http.createServer(function (req, res) {

    // HTTPヘッダを出力
    res.writeHead(200, {'Content-Type': 'text/plain'});

    // レスポンスの中身を出力
    res.end('Hello World\n');

}).listen(1337, '127.0.0.1'); // 127.0.0.1の1337番ポートで待機

たったこれだけです! コメントを除いたら、たったの5行で済んでしまいます。 もちろん、ポート番号やIPアドレスは自由に定義することができます。 文法的にも、jQueryを触った経験のある方ならば飲み込みやすいのではないでしょうか。

さて、続いてはターミナルから$ node webserver.jsのnodeコマンドでサーバーを起動してみましょう。

サーバーが起動し、待機状態となったら、ブラウザで127.0.0.1の1337ポートにアクセスしてみましょう。

ブラウザの画面に、記述した文字が表示されました。とっても簡単!
こんな感じで、サクサクサーバーを書いて走らせることができます。

ここまではただ静的な文字列を表示するだけでしたが、今度はもう少しインタラクティブなものも作ってみましょう。ターミナルから送信した文字列をそのまま返すechoサーバーを書いて、起動させてみたいと思います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// netモジュールを読み込み、インスタンスを作成
var net = require('net');

// サーバーのイベントハンドラを定義
net.createServer(function (socket) {

    // ソケット経由でメッセージを送出
    socket.write('This is RLS Tech News Echo Server\r\n');

    // データを受信したら、そのままメッセージとして送出
    socket.on('data', function(data) {
        socket.write(data);
    });
}).listen(1337, '127.0.0.1'); // 127.0.0.1の1337番ポートで待機

こちらもコメントを除いてたったの5行で記述できました。
$ node echoserver.jsでさっそく起動してみましょう。

ターミナルからtelnetコマンドでアクセスすると、ちゃんと打った言葉がそのまま帰ってきました!

どうでしょうか。とてもお手軽にWebサーバを建てることができました。

今回のコードを見てもわかるとおり、Node.js環境での開発には、すでに沢山存在するコアモジュールを利用すると便利です。次回は、このコアモジュールを使ってみながら、だんだんアプリケーションらしいものを書いていこうと思います。

どうぞお楽しみに!

Tech Blog

(編集部)

株式会社リクルートライフスタイルのTech Blog編集部です。いま流行りのTechネタやちょっと使えるTipsなどをお届けしていきます。

NEXT