JavaScript界隈で最近注目のライブラリ、jQuery[1]。今回のゲストはその作者にして、Mozilla CorporationでJavaScript Evangelistを務めるJohn Resigさん。日本の「JavaScript先進国」ぶりにはかなりのインパクトを受けたようです。
米国にはない
弾:JavaScriptに関わったきっかけは?
Resig:大学ではPerlを使っていて、Mozillaの前にいたスタートアップ企業に入ってから使うようになりました。以来、JavaScript一筋です。
弾:JavaScriptコミュニティのShibuya.jsで講演されましたが、日本のJavaScriptersはどうでした?
Resig:非常に楽しかったです。そもそも、JavaScriptのコミュニティが日本に存在しているということがおもしろい。アメリカでは、JavaScriptのコミュニティはまったくありません。
弾:それはなぜ?
Resig:アメリカでは、開発者はどちらかというとサーバ指向です。
弾:PHPが好きな人たちだったりして?(笑)
Resig:たとえば自分が住んでいるボストンでは、PHP、Java、Rubyのコミュニティはある。でもJavaScriptのコミュニティはありません。
弾:そういう状況を変えたいですか?
Resig:とても。JavaScriptに対する偏見のようなものが存在してると思うんです。
弾:どんなこと?
Resig:JavaScriptはかつて、あまりよくない言語だったんです(笑)。でもそれからずいぶん成長して、それに合わせてデベロッパ(のコミュニティ)も成長してきたと思います。個人的にはたとえば、JavaScriptにまじめに取り組んでいるベテラン開発者が増えてきたと思います。
弾:Perlプログラマもずいぶん入ってますね。
Resig:Webデザイナだけではなく、コンピュータ科学の学位を持っている人たちが入ってくるようになってきました。
弾:偏見は、日本よりアメリカのほうが強いと思います?
Resig:サーバサイド開発(への関心)が強過ぎて、JavaScriptの課題について話し合われる機会そのものが少ないと思います。
弾:人々に新しいものを学ぼうという気にさせるためには、何が必要ですか?
Resig:世の中には2種類の人間がいると思うんです。パイオニア、先駆者的な人たちは、Railsが出てくる何年も前からRubyを使っていたり、人気が出るずっと前からJavaScriptを使っています。一方で、無難なところにしか行かない人たちもいます。その意味ではJavaScriptのライブラリが、特に後者の人たちにアピールすると思います。
弾:それ、Shibuya.jsが存在してBoston.jsというのはまだ存在しない理由になっているかも。日本人のほうが早く退屈してしまうんです(笑)。新しいものを求めている人たちのパーセンテージが日本は高い。
Resig:(本誌を見ながら)こういう種類の雑誌は、アメリカには存在しないんです。生き残っている種類の雑誌は、非常に企業指向の強いもの。たとえば、MicrosoftとかJavaといったテーマを扱っていて、非常に退屈なものです(笑)。
弾:(笑)
Resig:文化的な違いかもしれないですけど、この種の雑誌がもっと成功してほしいと思っています。
JavaScriptの今後
弾:最近はjQuery以外にはどんな開発を?
Resig:JavaScriptの可視化をしています。
弾:可視化について、アニメーションを描画する際、今のところ関数は1つでループはなくて、表示の数だけsetInterval()とかset Timeout()で関数を呼ばなければならない。これって何とかならないんですか? たとえばwindow.flush()というメソッドを入れるとか、yieldできるようにするとか[2]。
Resig:残念ながらそういったことをしようとすると、抜本的に今のやり方を変えなければならないんです。
弾:私はLispのバックグラウンドも少しあるので何とかついていけますが、従来型の書き方がそのまま動くほうがうれしいユーザが多いと思います。それにその関数の実行も、現在のJavaScriptの実装のほとんどはプリエンプティブではないですよね。プリエンプション[3]の入る余地は?
Resig:これも実装方法次第。JavaScriptでプリエンプションを実装した例も結構あります。たとえばJavaで書かれたRhino[4]とか。
弾:ここまではLarry Wallの言うところのManipulexity(難しいことをどれだけキチっと片付けるか)よりの質問が多かったのですが、Whipuptitude(簡単なことをどれだけサクっと片付けられるか)はどうでしょう。JavaScript 2.0のWhipuptitudeは?
Resig:いくつもありますが、私のお気に入りはモジュールかな。
弾:やったー! ついにuse[5]登場。でも、なんで最初からそうなってなかったんだろ。
Resig:伝統的なオブジェクト指向はあまり役に立たないと思っていたのかもしれません。
弾:アマチュアのJavaScripterで、そんなに専門知識のない人たちにとって魅力的な新機能を2つほど選んでください。
Resig:1つは、プロパティ名ではなく、値をイテレートできるようになったこと。
弾:PerlのHashに対するvalues。
Resig:もう一つは、let宣言[6]です。今のvarによる「関数ローカル変数」ではなく、本物のブロックローカル変数。JavaScriptはもともとこうすべきでした。
オフラインアプリ
弾:jQueryのこともお尋ねしましょう。そもそも、jQueryを作り始めたきっかけは?
Resig:2005年ごろにPrototypeに出会いました。ですが、Prototypeは結構癖があってしつこい。もっと短くてあっさりしたものが欲しかったんです。
弾:PrototypeにしろjQueryにしろ、今のところウィンドウなりタブなりが20個あったら、20個別々にロードされるんですよね。1つのライブラリを共有することはできないんですか? 今はメモリ使い過ぎ。
Resig:Mozilla(のソフトウェア)では現在、ライブラリのローカルコピーを保管し、前もってコンパイルしています。最初は最も人気のあるライブラリからスタートして、せめてそれらのキャッシングをしたいと思います。
弾:次のFirefoxでそれは実現しますか?
Resig:Firefoxに関しては(次々バージョン)4になるかもしれません。それと現在は、JavaScript関連の部分では、HTML 5.0を大きな固まりとして、実装しています。特に、オフラインアプリケーション構築するにあたっての機能を今実装しています。
弾:ちょうどニュースでMozillaのオフラインアプリケーションのフレームワークについて読んだんですけど、えーと、Prism。
Resig:Prismは、通常のWebアプリケーションをデスクトップのアプリケーションに変えるためのしくみです。メリットとして、追加スクリプトが、デスクトップモードにのみ実行されるということがあります。
弾:デスクトップアプリだと、UNIXのsleep()[7]みたいなものがますます欲しくなるかも。
Resig:JavaScriptの実装の中でsleep()の問題点というのは、それがスレッドの存在というものを示唆すること。今までとの断絶が大きい。Google GearsではWorker Poolという方法でそれらを雑ながらも扱ってはいるけど。
弾:デスクトップアプリケーションのもう一つの懸念事項として、ローカルファイルをどういうふうに対応させるかがあります。
Resig:ローカルファイルとかデータベースなどにアクセスしてPrismを使用することはできると思います。
弾:その機能のためのライブラリあるいはオブジェクトは提供してるんですか。データベースオブジェクトのような、あるいはファイルシステムオブジェクトのようなものを。
Resig:Firefoxは階層的なしくみで作られているのですが、その下のほうにXPCOMというものがあります[8]。ファイルシステムとかデータベースに対するインタフェースもそこで提供されています。
弾:XPCOMのようなフレームワークはAdobeやMicrosoft、Googleのベンダが出してくるものと共有されますか。
Resig:今のところ、MozillaとAdobeの間では相当協力していて、特に新しいTamarinエンジン[9]では相当努力を進めています。
弾:クロスライセンスというのは普通にあるもので、デスクトップアプリケーションでもそういう状況はすでに始まっていますね。
Resig:デスクトップアプリケーションを構築するためにWebテクノロジを使うのであれば、それだけ多くのHTML、CSSやJavaScriptなどが多く使われるようになってくるというのは興味深い点です。
弾:jQueryはデスクトップアプリケーションに使われると思いますか? 使わない理由はないと思いますが。
Resig:まったくそのとおりで、Adobe社と彼らのAIRというデスクトップソリューションで協力していて、jQueryの互換性を保証しようとしています。
jQuery UI
弾:jQueryのロードマップは?
Resig:jQueryのコアに関しては短期的なバグフィックスのロードマップしかありません。しかし新しいプロジェクトであるjQuery UIに関しては、インタフェースのウィジェットというものを通じて、機能性をより増やそうとしています。
弾:jQuery UIで提供するカッコいい機能を2つほど何か挙げてもらえますか?
Resig:たいへんいいドラッグ&ドロップのシステムがあります。モーダルダイアログとか、ソータブルリストのようなものが、いくつかその上に構築されています。
すごいエンジニア
弾:ただのエンジニアとすごいエンジニアを分けるものは何でしょう?
Resig:あえて機能を追加しないことができる人がすごいエンジニアだ思います。すなわち具体的に何が重要であり、かつ何が重要でないかということを理解したうえで、その理解のもとで最適化ができる人。というのは、自分のJavaScript APIの経験からすると、その行動を小さく収めれば収めるほど、それだけ保守がしやすく、学びやすく、しかも文章化しやすいんです。
弾:半分は賛成です。なぜ半分なのかというと、それで機能が足りないと、そのギャップを埋めるためのオレ実装が乱立するから。今のJavaScriptみたいに(笑)。
Resig:確かに(笑)。
弾:JavaScriptやFirefox以外に関心があるのはどんなことですか?
Resig:Javaの上で構築されている、可視化のためのビジュアライゼーションのための言語である、Processingというものに最近興味があります。非常に関心を持ったのは、Processingで構築していく中で、非常に美しいものを作り上げているわけですから、芸術としてのコンピュータ科学ということです。
読者へのメッセージ
弾:最後に、本誌読者に対するメッセージをお願いします。
Resig:いつも自分が興味を持っているものに集中し、いつも自分の開発は自分の関心ある内容に対して最適化を加えるように、ということです。自分の経験からすると、自分が楽しく、しかも興味を持てる内容に集中すれば、それだけ自分はもっとハッピーです。