GWTっぽく python->jsにコンパイルするpyjamasを使ってみる

Pythonで書いたものをjsでAjaxな何かに変換してくれるライブラリ。

pyjamas-0.7.tgz - pyjamas - Pyjamas 0.7 Release - Project Hosting on Google Codeからダウンロード

インストール

インストール手順は日本語でググッても見つからなかったのでmakefile読んだ

choose one of the following:
    make local-build
    make system-install

とのこと。自分は system-install するので

$ cd pyjamas_0.7
$ sudo make system-isntall
$ sudo python bootstrap.py

これでimportできるようになりました
bootstrap.pyはbulid.shを走らすのに必要です

Hello, Pyjamas!

とりあえずサンプルコードをjsに変換してみる
ディレクトリ名とか適時読み替えてください

$ cd examples/helloworld/
$ ./build.sh
Building: Hello
PYJSPATH: ['/Users/mizchi/lib/pyjamas/examples/helloworld', '/Users/mizchi/lib/pyjamas/library', '/Users/mizchi/lib/pyjamas/addons']
Built to : /Users/mizchi/lib/pyjamas/examples/helloworld/output

output以下にjsにコンパイルされたものが作られる。Hello.htmlを開く。
http://gyazo.com/cf607a20f584a22d708d1c3b9952bf6b.png
動いている。

中身

で、肝心のHello.pyがどうなっているかというと

import pyjd # this is dummy in pyjs.
from pyjamas.ui.RootPanel import RootPanel
from pyjamas.ui.Button import Button
from pyjamas.ui.HTML import HTML
from pyjamas.ui.Label import Label
from pyjamas import Window

import pygwt

def greet(fred):
    fred.setText("No, really click me!")
    Window.alert("Hello, AJAX!")

if __name__ == '__main__':
    pyjd.setup("public/Hello.html?fred=foo#me")
    b = Button("Click me", greet, StyleName='teststyle')
    h = HTML("<b>Hello World</b> (html)", StyleName='teststyle')
    l = Label("Hello World (label)", StyleName='teststyle')
    base = HTML("Hello from %s" % pygwt.getModuleBaseURL(),
                                  StyleName='teststyle')
    RootPanel().add(b)
    RootPanel().add(h)
    RootPanel().add(l)
    RootPanel().add(base)
    pyjd.run()

サンプル読みながら動かしていくしかなさそう。サンプルは充実している。
Pyjamas Examples

結局

Pyjamasは学習コストの点から考えるとどうなのだろう。小さなパーツを組み立てたり、簡単なゲームを作るのに向いてる気がする。

自分はjsが書けないわけじゃないし、クライアント側は十二分にリッチなExtJS + jQueryでいいような気もしてきた。
Pyjamas Desktopというものもあるそうだが、この手のものだと、自分はよくTitanium DesktopでサクっとGUIを作ってしまうので、不要な気がする
Use Appcelerator Titanium to build mobile apps for iPhone & Android and desktop apps for Windows, Mac OS X & Linux from Web technologies

Titanium Desktopはデスクトップアプリ限定だけどコンパイルする必要がなく直接pythonが走るし、そのままjsも叩ける。ただサポートを有料化してから開発コミュニティの雰囲気がよくない。