Node.jsについて知っておくべきこと

2009年ごろから始まった「Node.js」フレームワークが、ウェブ・プログラミングの世界に大きなインパクトをもたらしている。

マイクロソフト、ヤフー、LinkedInやPayPalなどに続き、今や多くの開発者がNode.jsのメリットを理解した上でそれを学習し、利用している。

皆さんはNode.jsが「レスポンシブ」で「軽量だ」とは聞いたことがあるかもれないが、その理由まではよく知らないのではないだろうか。ここでは、Node.jsがあなたの次のウェブサイトやアプリケーション、あるいはAPIのバックボーンになるかもしれない理由をいくつか挙げてみたい。

ウェブの利用シーンの変化

かつてインターネットは閲覧することがその利用目的の中心だった。ユーザは受け身でコンテンツを読み、眺め、ダウンロードするだけであり、チャットは掲示板またはブログ上で非リアルタイムに行われていた。

しかしソーシャルメディアが人気を獲得するにつれ、今日のユーザはウェブ上で即時のフィードバックを望むようになった。今やチャット、ゲーム、およびコラボレーション作業はリアルタイムで行われている。さらに重要なのは、これらが莫大な規模で発生しているということだ。1つのサイトで何百万ものユーザーが同時に対話するような世界なのである。

ソフトウェア開発者は、ウェブがこのような利用を前提として構築されていないことを知っている。リアルタイムのレスポンスは、各ユーザのクライアントが絶えずサーバーに処理を要求してくることを意味しており、これが結果的にサーバーの応答を遅らせて待ち時間が発生する原因となっている。

Node.jsが解決してくれること

ウェブをレスポンシブにするためには、通信をクライアント側から開始すべきではない。代わりにサーバーからクライアント側へデータをプッシュした方が良く、それもプッシュするデータがある場合に限るべきだ。絶えずデータをプッシュしてしまうと、これまでと同様にプロセスの遅延が生じてしまうからである。

これを実現してくれるのがNode.jsだ。Node.jsはV8(Chrome用に設計されたグーグルの高速なJavaScriptエンジン)を利用してJavaScriptを実行する。これによってNode.jsがサーバからクライアントにJavaScriptを高速にプッシュするランタイム環境を作成することが可能となるのだ。V8はJavaScriptをバイトコードとして解釈・実行するための無駄な時間を消費する代わりに、ネイティブの機械語に翻訳してNode.jsを高速に動作させる。

この高速化と非同期プログラミングの結合が、Node.jsを非常にレスポンシブにするための2つの重要ポイントなのである。

非同期の利点

Node.jsの発明者であるライアン・ダールは、2009年にFlickr上のローディング・バーを見た時、このフレームワークの最初の着想を得たと語っている。サイトはダウンロードの経過を表示するため、サーバーにリクエストをかけ続けていた。ダールはクライアントがいちいちリクエストをかけるのではなく、サーバー側がクライアントに更新をプッシュすれば速くなるだろうと考えたのだ。例えばあなたが誰かと会話しているときに、常に相手に「話を聞いているよ」というシグナルを送り続ける必要がないのと同じである。あなたは単に相手が発する情報を受け取ればいいのだ。

人間のコミュニケーションはプログラミング言語とは違っている。それは無秩序に、非同期的に、そして非並列的に発生する。私は別に相手の返答を待たずに話を再開したっていいのだ。

Node.jsはこれと同じように、非同期的な方法で動作する。Node.jsは「イベント・ループ」と呼ばれる機能を使用しており、これはデータが絶えず要求されるのを防ぎ、存在するときにだけ送信されるようにする機能である。コミュニケーションにおける「一時待機場所」のようなものだ。このようにイベント・ループが非同期タスクを処理している間、Node.jsはプログラムを通常通りに実行し続けることができ、応答待ちの時間の発生を防ぐことができる。Node.jsは情報をリクエストし続ける必要がなく、処理が何もない場合にはアイドリングさせておけるので非常に効率的だ。

特に開発者が何百万ものユーザー規模を持つアプリケーションを構築するときには、Node.jsの使用が適している。リアルタイムの通信も、多大なメモリを消費することなく上記のイベント・ループによって管理されるからだ。このため開発者は膨大なリクエスト処理によってアプリが固まったりする心配をすることなく、アプリケーションの開発に専念することができる。

Node.jsの学び方

あなたが開発者でなければNode.jsの使い方を知る必要はないだろう。しかし、もし次のアプリケーションで利用することを検討しているのであれば、これに精通するための情報が必要かもしれない。

通常Node.jsはウェブ・ベースのゲームやコミュニケーション・アプリに使用される。こういったサービスには軽さと大人数に対するリアルタイムのレスポンスが要求されるからだ。

ウェブ・エンジニアリング会社のToptalは次のように述べている。「Node.jsは新しい特効薬としてウェブ開発業界を支配する類のプラットフォームではなく、特定のニーズを満たすためのプラットフォームだ。Node.jsが実際に有効なのは、高速でスケーラブルなネットワーク・アプリケーションである」

Node.jsが人気を獲得するにつれ、その使用法に精通した人も増えてくるだろう。Node.jsはポピュラーなJavaScriptがベースとなっているため、プログラマーとっては非常に馴染みやすく習得も速いはずだ。

一番いいのはNodeBeginner.orgから始めることだろう。ここではしっかりとした21ページのチュートリアルが無料で提供されている。

画像提供:Node.js

Pocket