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



このエントリーのはてなブックマーク (-)