Node.js

ここからは、Node.jsを使ってTypeScriptでサンプルを作っていきたいと思います。

サーバサイドJavascript

通常、JavascriptはブラウザにパッケージされたJavascriptエンジンで稼働し、ブラウザ上のオブジェクトを操作します。それに対してサーバー上で稼働するサーバサイドJavascriptは異なる目的を持ちます。

サーバサイドJavascriptという使い方は、たしかNetscape全盛の時代からあったと思いますが、実用レベルに達した成功作はNode.js(2009年)が初めてといわれています。私自身もサーバサイドJavascriptを仕事でシステムに組み込んだ事はまだありません。

サーバサイドJavascriptはなにがメリットなのでしょうか?

クライアントとサーバが同じ言語で書ける、クライアントとサーバで動的に機能を補完し合える、などと説明される事が多いようです。それに対して、私の個人的な動機は少々卑近かもしれませんが、以下です。

  • Node.jsによって、ノンブロッキングなI/OライブラリやMVC、テンプレートなどフレームワークも備わった。
  • TypeScriptによって、スクリプト言語でありながらアプリ、システムを安全に組む環境ができた。
  • 上記をふまえ、Java、C#プログラマが参入しやすいサーバサイドのシステム開発環境として採用できるのではないか?

私のように、プロジェクトごとにワーカーの確保に苦慮する人は、今後の普及を望むのではないでしょうか。

また、ノンブロッキングI/Oによって、メモリの無駄な消費無しにひとつのCPUコアをより効率よくぶん回せるので安いサーバでのサイジングが楽になります。

とはいえ、当面のプロジェクトは人の確保しやすいJava等で組むでしょうが、なにかしらの機能でTypeScript、Node.jsを取り入れたいともくろんでおります。

Node.jsのコンセプト

さて、Node.jsは、サーバサイドで使用するために、ファイルやネットワークI/Oなど多くの機能を追加したものです。そしてノンブロッキングI/Oとイベントループで複数の処理を並列で実行できます。

Javascriptで疑似スレッドは、昔プロジェクトで取り入れた事がありました。環境はAdobe Airでしたが、UIのバックグラウンドで非同期なイベントを待ち受け、重たいファイルのダウンロードをするようなアプリでした。

Node.jsの開発者、ライアン・ダール氏が日本で公演した際、重要なコンセプトを語っています。

http://www.publickey1.jp/blog/11/nodejs_node.html

(会場)なぜ新しい言語ではなくJavaScriptだったのでしょう?

RubyやPythonなどほかのプログラミング言語はすでに、ファイルシステムへのアクセスやDNSへのアクセスを備えていて、そうするとノンブロッキング用のAPIとそれらを同時に使わなければならなかったからです。

JavaScriptを選んだのは、I/Oをどうするべきという概念が言語になかったから。そしてJavaScriptを選んだおかげで、Nodeがこんなに知られることになったのだと思います。

(会場)どういう考えでNodeを開発したのかは聞けたのですが、ではなぜ「Node」という名前なのかを教えてください。どういう意味が込められているのでしょうか。

Nodeは、「Node in Network」のNode。これは全体の分散システムの中のスモールピースを示していて、まだそれは実現できていないけれど、今後の追加機能では分散したNodeをまとめるようなことができるようにします。

Hello World

APIドキュメント
http://nodejs.org/api/
モジュール
https://npmjs.org/

以下はAPIドキュメントの最初に出てくるコードです。

var http = require('http');
http.createServer(
  function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
  }
).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');

httpモジュールを読みこんで、httpサーバを生成しますがサーバはスレッド的な振る舞いをします。またhttpインターフェイスにはいくつかのイベントが組み込まれています。

httpインターフェイスの説明はこちら
http://nodejs.org/api/http.html

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>