V8 を使って Python で JavaScript を実行する

Google V8 JavaScript Engine の Python バインディングを試してみました。

直近で gumi Platform 上で簡単な OpenSocial ガジェットを動作させるのに使いたかったということが一番の動機ですが、サーバサイドで JavaScript を実行するというのは、これから当たり前の技術になると思っています。今後、モバイル・プラットフォームの台頭とクラウド・コンピューティングの進展により、非力なクライアントと強力なサーバという今までとは違ったパワーバランスになってきます。そこで重要になるのは、いかにクライアント側の処理をシンプルにするかということです。例えば、ブログパーツとかガジェットなんかは静的コンテンツを汎用的に表示させるためだけに JavaScript を使っています。最初からブログエンジン側でこの部分をレンダリングしてあげれば、非力なモバイル端末にとっては負担が減ります。このことは未だムーアの法則から取り残されているバッテリーの持ちにも影響してきます。

さて、早速試してみましょう。まずは、 bitbucket からソースコードをチェックアウトします。

$ hg clone http://www.bitbucket.org/dfdeshom/v8onpython/ v8onpython

次に libv8.so をビルドします。なお、ビルドには scons と Cython が必要ですので予めインストールしておきます。 scons は Ubuntu の場合はパッケージがあるので、 "aptitude install scons" (または apt-get)するだけです。 Cython も Python のパッケージ・システムを使って "easy_install Cython"するだけです。

$ cd v8onpython/v8-src
$ scons library=shared
...
scons: done building targets.

次に Python バインディングのビルドです。

$ cd..
$ python setup.py build_ext --inplace
running build_ext
building 'v8onpython' extension
g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions build/temp.linux-i686-2.5
/v8onpython.o -Lv8-src -lv8 -o v8onpython.so
$ mv v8-src/libv8.so .

正常に終了するとカレントディレクトリに v8onpython.so ができているはずです。それでは、実際に使ってみましょう。

$ ipython
Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52) 
Type "copyright", "credits" or "license" for more information.

In [1]: import v8onpython
In [2]: v = v8onpython.Script()
In [3]: v.compile("(function(){return 'Hello World'}())")
Out[3]: 'Hello World'

関連リンク:
» v8 - Google Code
» dfdeshom / v8onpython / source — bitbucket.org

Google I/O 翌日

Google I/O の翌日は,あんどうさん佐々木さんと一緒にある場所へと向かいました。レンタカーを借りて,初めてアメリカで運転しました。カリフォルニア州では,国際免許証が無くても日本の免許証で運転できるそうです。右側通行は30分くらいあれば慣れる,と誰かが言っていたけど,全然慣れませんでした。無事に帰って来れて良かった…

Wi-Fi at Mountain view GPS Navigation  Freeway Exit 

どこに行ったかについては,ブログに書いてはいけないことになっているので,ご想像にお任せします。

関連リンク:
TIME: Life in the Googleplex Photo Essay

Google I/O 第2日目

Google I/O の第2日目は,特に集合したりはせず,一人で会場に行って朝食を取りました。下の写真のようなビュッフェ形式の朝食でなかなか美味しかったです。

Google I/O Lobby  Breakfast

ここで,たまたま隣に座った人と話をしたのですが,彼はサンフランシスコのエンジニアで,これから OpenSocial 関連のプロジェクトを立ち上げたいと言っていました。また,JavaScript に関して,僕は jQuery がお気に入りだという話をしたのですが,彼は jQuery を知らないようで,「何だそれ。何がいいんだ?僕はDojoを使っているよ。」と言っていました。jQuery のすばらしい点を説明しておいたんだけど,うまく伝わったかなぁ…
他に何人かと話した感じでは,日本ではあまり話題に上らない OpenSocial の動向について,こちらでは多くの人が注目しているようです。それと LinkedIn の評価が高いようで,彼らはスマートだと口々に言っていました。

Marissa Mayer
Keynote from Marissa Mayer at Google I/O 2008
Photo by jwowens

この日のキーノートは,副社長の Marissa Mayer さんでした。とても美しい女性で鵜飼さんによると,新しいプロダクトは必ずこの人の承認を受けなければならないとか。彼女については,a2cさんがブログにまとめているので参考にしてください。全く持って同感です!「マリッサは大変なものを盗んでいきました」 後から聞いたら,自分と同い年だそうで,軽くショックを受けました。

少しだけ僕が分かった範囲で補足しておくと,Google Products の UI について語っていました。"Split A/B Testing"の手法を使って,ユーザごとに微妙に異なるデザインのページを表示して変化を調べているそうです。サンプルとして挙げていた検索結果ページのデザインの場合だと,微妙にロゴの周りのスペースが違うだけなのですが,このレベルでテストを行っているようです。また,検索トップページを作ったのはセルゲイ・ブリンで,彼に聞いたら "We didn't have a Webmaster, and I don't do HTML." (参考)と答えたそうです。会場は爆笑。

Even Faster Web Sites by Steve Souders

Steve Souders

キーノートの後は,『ハイパフォーマンスWebサイト』の著者で,YSlow を作った Steve Souders のセッションを聞きました。なるほど,この人,Yahoo! から Google に転職してたんですね。会場に対する「みんな YSlow を使っているかい?」との問いかけに,20%くらいの人しか手をあげていなかったのが意外でした。 YSlow は全人類が使うべきだと思います。

内容については,箇条書きで申し訳ないですが,次のような感じでした。 Facebook を名指しでパフォーマンスが悪いサイトの例に出していたのに驚きました。さすがアメリカ。

  • iGoogle ではほとんどページのレンダリングに時間がかかっている
  • empty cache と prime cache の違いを知る
  • Google と LiveSearch は 0% になる
  • 80-90% はフロントエンドにかかっている
  • Facebook はほとんどスクリプトの読み込み。ひどい
  • JavaScript のブロックを回避することが重要
  • cuzillion ← Webページ構造によるパフォーマンス・テストツール。これ面白い!
  • スクリプトはレンダリングに必要なものとそれ以外を分けるべき
  • MSN はスクリプトを動的に挿入してパラレル読み込みを実現している
  • evalよりscript挿入の方がいいよ
  • <script defer> IE only, different domain
  • document.write only IE パラレル
  • パフォーマンス測定には IBM Page Detaierを使っていた
  • 実行順序とインジケーターで切り分けを行う
  • don't scatter inline scripts

OpenSocial

OpenSocial に関するセッションも slide.com の人のプレゼンなどいくつか聞いたのですが,残念ながら,あまりピンと来るものはありませんでした。一応,こちらもメモ程度のものをあげておきます。以前からブログを読ませて頂いていたえーじさんと,こちらで初めて会うことができた(Twitterのおかげ)のですが,やっぱり目新しい情報はあまり無かったと言っていました。OpenSocial に対する日本とは違った盛り上がり方を肌で感じることができたのが一番の収穫かなと思います。

  • lane liabraaten's opensocial - appengine
  • save users from re-registration hell
  • ユーザは,どのSNSにするか選ぶ必要がない
  • 適用範囲はSNSだけじゃないよ
    • profiles,homepage
    • personal dashbords
    • site based social object
    • corporate CRM systems
    • aay web site
  • profile pages - owner,
    home pages - owner is viewer (must be logged in)
    のパターンで表現できる
  • viewer friends are your firend to visit the web site
  • 言語には依存しない Pythonも歓迎
  • socialsite by SUN (powered by shindig)
  • Orkut, Myspace, hi5, Netlog open to 200M useres now
  • container to containerの通信はRESTful APIで実現可能になる

発表の中にFacebookの話題が全く出てこなくて,質問タイムに誰かが「Facebook?」と質問していたのですが,スピーカーの人の答えは「Next questions.」のみ。これには会場の皆も苦笑い。後から少し補足はしていましたが。
Plaxo の Joseph Smarr 氏のプレゼンは,別のを聞きに行っていて見逃しました。えーじさんによると,これは面白かったそう。残念ですが,a2cさんのブログに YouTube とスライドのリンクがあるので,後で見ようと思います。

# MySQL のことをみんな「マイシーケル」って呼んでいた。

Google I/O 第1日目

Google のディベロッパー向けカンファレンス「Google I/O」がついに始まりました。この日は,朝7:30に集合して,Google 渡部さんの助けを借りて Registration を済ませました。そして,たぶんこれはIOの間違いだと思うのですが,バイナリで「GOOGLEKO」と書かれたTシャツをもらって,会場に用意されている朝食を食べました。海外のエンジニアは,どんな人達なのか興味津々だったのですが,日本のエンジニアと雰囲気が似ていて親近感を覚えました。この日,世界各国から集まった技術者は3,000人だそうです。すごい…

Just before key note Keynote Speech

幕開けは,Vice PresidentのVic Gundtra氏によるキーノートスピーチでした。初日のすべてのセッションの中でこれが一番良かったと思ったくらい,本当に上手で非常に分かりやすいものでした。

内容としては,Googleが目指すところのおさらいだったのですが,scalability, distribution, storage,…といったキーワードのタグクラウドで表現していて,直近のテーマとして「Make the cloud more accessible」を中心に考えているそうです。また,ウェブ・アプリケーションがクライアント・アプリケーションに追いつく日は近いということも言っていました。
考えてみると,Googleという会社が今していることは,インターネットを徹底的に活用してインフラ的な地位を築いていくという点で一本の筋が通っていて全くブレがないように見えます。僕が知らないだけでこのような会社は他にもあるのかもしれませんが,少なくとも日本にはここまでの先進性を持った企業は確実にないような気がします。

Android

次に一番の目玉だと思われる Android 新バージョンのデモが行われました。iPhoneのような指でドラッグするようなインタフェースと,新機能のガジェット,そして電子コンパスと連動したストリートビューのアプリケーションが紹介されていました。Androidはバージョンが変わるごとに大きな進化を遂げていて,今年一番の注目株であることは間違いないようです。

Google App Engine

Google App Engine についていくつかの発表がありました。有料オプションが提供されるようになったことと Memcache と Image Manipulation の機能が使えるようになりました。そして,ついにディベロッパー登録の制限がなくなり誰でも利用可能になりました。 Memcache は汎用的な技術でちょっと意外な印象を受けたのですが,画像操作ができるようになったのは大きいですね。今まではサムネイルも作成できませんでしたから。

Google Web Tollkit

いまいち日本では盛り上がっていないように見える GWT ですが,Java 5 への対応と20%のスピードアップを果たしているそうです。Google社員の方に聞いたところによると,Google社内のJavaScriptエンジニアが手で書いたコードよりも速くて,そのエンジニアはショックを受けていたそう。また,BlueprintというGWTで書かれたビジネスアプリケーションのデモをしていたのですが,これが Flash と見間違えるほどの良い動きをしていました。また,Eclipse上で,ブレークポイントを設定してDOMの内容を確認するデモは興味深かったです。

OpenSocial

OpenSocial については,API v.0.8 が発表されたものの,内容についての詳しい説明はなくて,特に目新しい点はありませんでした。
OpenID, OAuth, OpenSocial の技術を軸に Web 上のあらゆる場所をソーシャルにしていくということ,現時点で2万人のディベロッパーがいるということを言っていました。あと,この Gundtra 氏は 「REST」を「リスト」と発音していましたが,他の人は「レスト」と言っていたので,レストでいいのだと思います。

Rapid Development with Python, Django and Google App Engine

そして, Python 言語の開発者で Google 社員の Guid van Rossam によるセッションを聞きました。Google App Engine で Django フレームワークを使うという内容で,正直そんなに面白くなかったのですが,生 Guido を拝めただけでも非常に感激でした。思わず,一緒に記念撮影をお願いしてしまいました。その時にGuidoが「日本人なのにRubyを使わないのか?」と言っていたのが,ちょっと面白かったです。

Guido at Python session  Guido

その後はパーティーに参加して,いろいろな人と名刺交換をしたりしたのですが,安藤恐竜さんの Android on Zaurus や佐々木さんのAndroidケータイが大人気で羨ましかったです。僕は英語が得意じゃないので,話をしていてもすぐにお互いに沈黙という状態になりがちなのですが,今度はそれを回避するためにも何かネタを用意していこうと思います。

その後,a2cさん,佐々木さんと Google App Engine の SDK1.1 を試したり,ホテル最上階のバーで軽く一杯飲んでから帰りました。

Google App Engine BoF  Blackberry and Night San Francisco

関連リンク:
Google I/O '08 Keynote: Client, Connectivity, and the Cloud

Google I/O 2008 前夜

Google I/O に参加するためにサンフランシスコに来ています。a2cさん,佐々木さんと一緒の飛行機だったのですが,SFO到着後にお二人とはぐれてしまうというトラブルもあったものの,ユニオン・スクエアのハートの下で再会を果たし,軽く市内観光と食事をして過ごしました。

San Francisco  Union Square

夕食は,Google Japanの方々(シニアプロダクトマネジャーの及川さん,鵜飼さん,渡部さん)と先に来ていたあんどうさん, Google API Gulu の松尾さんとダウンタウンで食事をして明日の予定の打ち合わせを行いました。どのセッションに参加するか考えていたのですが, Python, Google App Engine, Open Social そして Android と気になるものが目白押しです。しかも,部屋が6つくらいあって,同じ時間に行われるセッションが結構あってまだ悩んでいます。

とりあえず, Guido van Rossum のセッションはマストとして,Open Social を中心に攻めていこうと思います。