gihyo.jp×東京Node学園祭2011コラボ企画―「東京Node学園祭2011」の見どころ教えます!

第2回 Node.js の過去,現在,未来

この記事を読むのに必要な時間:およそ 4 分

Socket.IO の功績

Socket.IOは,今回の東京Node学園祭 2011 でもスペシャルゲストとして来日するGuillermo Rauchによって開発されたリアルタイム通信モジュールです。ざっくりと説明するなら,WebSocketの機能+αを,スマートフォンを含むほぼすべてのブラウザで動かすことができるモジュールです。以下に公式サイトに載っているサンプルコードを記載しておきます。これだけのコードでブラウザ互換性を気にすることなくリアルタイムなメッセージングが実装できるのは驚きの便利さです。

Server

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
  console.log(data);
  });
});

Client

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

現在,Node.js = リアルタイムWebを簡単に実装できるプログラミング環境,というイメージができ上がってきているのは,Node.jsの高速に多数のアクセスを捌ける素性の良さに加えて,Socket.IOというモジュールが存在したから,といっても過言ではありません。筆者も含めSocket.IOを使いたいからNode.jsを利用している,という意見も数多く聞かれます。ブログなどの記事を見ても「チャットを実装してみた」⁠ホワイトボード共有してみた」などの内容で,Node.jsとSocket.IOをセットで取り上げているところも多く,Node.jsの普及にあたってSocket.IOが果たした功績はとても大きいです。

なお,Socket.IOでは本家のサイトの他に,Jxckさんが書いたAPI解説記事マニュアルの日本語翻訳がありますので,ぜひ目を通してみてください。

Node.jsの現状に関するFAQ

「Node.js の現在」の最後の項では,現時点でのNode.jsに関して最近良く聞かれるいくつかの質問と回答を紹介していきます。

Node.jsはどんな風に使うのが便利?

Node.jsは既存の言語やフレームワークを置き換えるものではなく,むしろ相互補完的に利用していくのが良いのではないでしょうか。実際の運用事例でも,Socket.IOを利用して,既存のアプリケーションにチャットやメッセージング,プッシュ通知など「リアルタイム」的を要素を付与する部分に実装に用いたり,多数のアクセスを捌ける特性を利用してAPIサーバとして利用されている事例が多いです。

もちろん,Node.jsでもExpressSocketStreamといったフレームワークを利用して,ある程度の規模なアプリケーションも構築可能ですが,Railsのようのフルスタックのフレームワークの決定版はまだ存在していません。今後の発展に期待しましょう。

既存のライブラリやモジュールはどうやってみつけたらいいの?

npmがデファクトのパッケージ管理ツールとなっていて,コマンドラインツール,またはnpm registryというWebサイトからキーワードで検索ができるようになっています。npmにはすでに1,000個を超えるモジュールが登録されており,ネットワーク,C++バインディングからハードウェア制御まで種々の面白いモジュールが揃っていて,世界中でNode.jsが盛り上がっていることが実感できます。

v0.4系とv0.5系のどちらを使えばよい?

現在,Node.jsは安定板のv0.4系と,開発版のv0.5系が存在します。v0.5系は,Windows対応を目玉とし,Non-blocking I/Oのライブラリがlibev,libeioからlibuv※1に置き換えられています。2011年9月末現在,Windows版のバイナリは公開されていますが,パッケージ管理ツールであるnpmのバイナリ版が提供されていないことや,既存のネイティブ(C++)モジュールがWindowsでビルドできないものがあるなど,実際の利用はまだ難しいといえます。現時点でNode.jsを使ってみたいという方は,UNIX/Linux/Mac OS X環境でv0.4系を利用することをお勧めします。

ただし,Node.jsは鋭意開発中のプロダクトであり,バージョンがすごい勢いで上がっていきます。インストールする際は,複数バージョンを管理できるツールであるnvmまたはnaveを使ってインストールすることをお勧めします。

※1)
libuvは,Non-Blocking I/Oを抽象化するラッパライブラリで,Linux/UNIX環境ではlibev,libeioを利用し,Windows環境ではIOCPをコールするようになっています。libuvは単独でも利用できるため,JavaScript以外の言語(Ruby, Lua, PHP, C#)のバインディングも開発されていることがNode.js公式ブログで紹介されています。いずれNode.rbとかNode.phpとかNode.csとか出てくるかもしれませんね。

実際に運用されているサービスってあるの?どれくらいの規模の事例があるの?

Node.js作者であるRyanの所属するJoyentはもとより,世界中でさまざまな規模の運用事例が報告されています。現状だと,ゲームなどで利用されるケースが多いようです。まだ詳細は発表できませんが,東京Node学園祭 2011では,講演やライトニングトークで,具体的に日本でのNode.jsの小規模から大規模までの実運用事例を多数紹介していきます。

詳細はわかり次第,公式サイトで発表していきます。お楽しみに。

Node.jsの未来

今後のロードマップ

Node.js の今後のロードマップですが,2011年5月に開催されたnodeconf 2011の Ryan の基調講演[動画]5 Roadmap">[資料]で,今年中に Windows 対応を目玉とした安定版の Node.js v0.6 がリリースされる予定であることが発表されています。Windows で動くようになることで,開発環境構築の敷居が下がり,より多くの開発者が Node.js に触れられるようになるのではないでしょうか。

Node.js の未来を「東京 Node 学園祭 2011」で聞こう!

v0.6 以降の具体的なロードマップは明かされていませんが,もしかしたら,東京Node学園祭2011にて,作者であるRyan Dahlからその辺りについて新しい発表があるかもしれません。発表の内容については実行委員である私たちもまだ知らないので,東京Node学園祭2011のRyanの基調講演は,今後のNode.jsの未来を知る上でも要チェックです。

Node.jsの未来を直接聞けるかもしれないまたとない機会ですので,皆さま,ぜひ東京Node学園祭 2011にお越しください。

東京Node学園祭2011
http://nodefest.jp/2011/

著者プロフィール

本多一行(ほんだかずゆき)

エムスリー株式会社勤務。

日本アイ・ビー・エムで5年間勤務した後,Web業界に憧れて2009年2月より現職。Node.jsは実際の業務で使う傍ら,趣味でKinectとつなげて遊んだりしている。npmモジュールとしてKinectバインディングMeCabバインディングを公開中。

Twitter:hakobera

ブログ:Scalaとlift のはずだった・・・