2011年はサーバサイドJavaScriptの年になる
「2011年はサーバサイドJavaScriptの年になる」 こう書いているのは、JavaScriptのテストフレームワークZombie.jsの作者Assaf Arkin氏。ブログLabnotesで、エントリ「2011 is year of the Server-Side JavaScript」を公開しています。
5年前のRubyや90年代のJavaに似ている
Arkin氏は、JavaScriptが登場したときにNetscapeはサーバサイドJavaScriptも用意していたのを覚えている人はいないだろうな、との書き出しで過去を振り返っています。
not many people remember, Server-Side JavaScript for writing the back-end logic. I believe back then it was called LiveWire.
多くの人はバックエンドロジックのためのサーバサイドJavaScriptを覚えていないだろう。それはたしかLiveWireと呼ばれていた。
そしてそれから十年以上がたち、Node.jsやRhinoといったサーバサイドJavaScriptの実装が複数登場してきたことを紹介。
We’ve got three runtime platforms for choose from: the insanely fast Node.js, the JVM-based Rhino and it’s C-based sibling SpiderMonkey. Competition is healthy. Then again, I’m betting on Node.js.
いまは3つの(JavaScript)ランタイムプラットフォームを選ぶことができる。狂ったように速いNode.js、JVMベースのRhino、そしてCベースの兄弟のSpiderMonkey。競争は健全なことだ。そして私はNode.jsに入れ込んでいる。
まだサーバサイドJavaScriptは未成熟で、セグメンテーションフォルトも何度か経験しているとArkin氏は指摘しつつ、これは5年前のRubyや、90年代のJavaの状況に似ていると。
it’s not much different than what Ruby was five years ago, or Java back in the late 90′s. We’ve all got to start somewhere.
5年前のRubyの状況とそれほど違わないし、あるいは90年代後半のJavaのようでもある。まだ始まったばかりなのだ。
RubyやJavaのように、サーバサイドJavaScriptも広く使われるようになるだろうという彼の思いを言外に感じます。
シングルスレッドで動作するNode.js。リクエストを細分化して処理
サーバサイドJavaScriptの実装でもっとも注目されているのがNode.jsです。これはどのようなものなのでしょうか? gihyo.jpの新春特別企画として掲載された記事「2011年のJavaScript ─ウェブアプリ全盛の時代へ」で分かりやすく説明されていますので引用しましょう。
基本的にWebサーバは多くのリクエストを処理するために多数のスレッドを用いますが、Node.jsはそうではない、というところから説明が始まります。
Node.jsはシングルスレッドで動作するので当然スレッドを増やす必要がありません。しかしそうすると,1台のサーバー(アプリケーション)では一人ずつしか対応できないように思えます。実際,Node.jsは一度にひとつのタスクしか行いません。しかし,実際に複数人のリクエストを並列で処理することができます。
Node.jsはシングルスレッドであることが最大の特徴。それでどうやって複数のリクエストを処理するのでしょうか。
重要なのは,リクエストとタスクの違いです。ここで言うタスクとはリクエストを細分化したもので,例えばリクエストの解析や,キャッシュサーバーやデータベースサーバーへの問い合わせ,レスポンスの作成といった個々の処理を指します(もしくはイベントといったほうが適切です)。Node.jsはリクエスト(コネクション)という単位に縛られることなく,細分化したタスクを順番に処理していきます。より具体的に言えば,一人目がデータベースに問い合わせている間に二人目のリクエストの処理を行い,データベースから結果が返ってきたら一人目の処理へ戻り,といった具合です。データベースやファイルI/Oに問い合わせている間に何もすることがない,といったことが起こりません。
こうしたリクエストの細分化による高い効率性が、Node.jsが注目を集めているポイントだということです。
Node.jsの特徴
昨年末の12月28日にマイコミジャーナルで公開された記事「JavaScriptでつくる高効率サーバアプリ「Node.js」を試す方法」でも、Node.jsの特徴を次のように紹介していました。
- JavaScriptを使ってサーバサイドアプリケーションを開発できる。
- スケーラビリティの高いネットワークプログラムを高いスキルを要求されずに開発することが可能。
- 高い並列性を実現。内部の実装はepoll(7)、kqueue(2)、/dev/poll、select(2)などOSごとに提供されているポーリング機能を使い、スレッドは使っていない。結果として、スレッドベースのサーバと比較してコネクションあたりのメモリ消費が少なく、かつ高速に動作する。プロセスデッドロックも発生しない。
- 活発に開発が進められているChrome JavaScriptエンジンV8の開発成果の恩恵を受けられる。
Yahoo!もサーバサイドJavaScriptを開発中
Publickeyで昨年11月に公開した記事「米Yahoo!で議論された、フロントエンドエンジニアリングの将来(前編)」では、Yahoo! User Interfaceラボ(YUI)のThomas Sha氏が次のように発言しています。
YUIがサーバサイドといった新しい領域にも努力を広げようとしているのは本当です。研究段階から脱しようとしています。これはとても重要なものになるでしょうし、短期間で終わるものでもないと思っています。
「短期間で終わるものでもないと思っています」というのは重要な発言ですね。そしてNode.jsの作者であるRyan Dahl氏は、Node.jsの人気について次のように分析しています。
Nodeにこれだけ人気があるのはサーバでもJavaScriptが使えるためで、それは僕が意図したことでもあります。と同時に、それはサーバサイドを書く手段として望まれていたことでもあったんです。それは大きな断絶だったんです。実はサーバを書くエンジニアはクライアントサイドを書くエンジニアと同じだったのですから。
そしてこのシングルスレッド化されたサーバサイドのプログラミングスタイルこそ、サーバを書くのに求められていたものなんです。
Webアプリケーションがアプリケーションの主流になるとき、そのバックエンドも同じテクノロジーであるJavaScriptで開発したいというニーズは確実にあります。サーバサイドJavaScriptは今年から来年にかけて成熟度を上げていき、新しもの好きのためのエマージングテクノロジーから、いずれ業務アプリケーションの開発の分野にまで影響を及ぼすことは確実と思います。
あわせて読みたい
2010年12月のPublickey人気記事トップ10!「NoSQLの恐ろしいこと」「少人数は高品質」「無料で使えるクラウドDB」
≪前の記事
[速報]マイクロソフト、ARMプロセッサ対応の次期WindowsをCESで初披露。CES2011