普段ブラウザまわりのjavascriptが必要な時にはCoffeeScriptで書いているけど、最近ではHaskellでもかけるしPythonでもかけるようになってきているので調べてみた。尚、Fayに関しては「Introduction to Fay」がわかりやすい。
見つかったのは次の5つのプロジェクト。最初の2つはjavascriptで実装されたPython実行環境で残りの3つはPythonコードをJavascriptに変換するトランスレータ。
Brython
ゴールが非常にわかりやすい。
Brython's goal is to replace Javascript with Python, as the scripting language for web browsers.
CoffeeScriptなんかとは競合しますね。
<script type="text/python" src="test.py"></script>
で実行できるのでpythonでwebアプリが作れます。Galleryも面白いのが増えてた。カンバンエミュレータとかヨーロッパの国名一致させるデモとか。
Compiling and running によるとjavascriptのパーサを通して構文解析して構文木をつくってjavascriptを出力してevalしている。そのため最初立ち上げると若干モサッと感はある。あとjavascriptでモジュール書か必要があるのかな(import implementationのところ)
それからjQueryみたいなjavascriptのライブラリを使いまわせるかどうかは分からなかった。ajax用のライブラリとか実装しているところをみるとできないのかなぁ(要調査)
Skulpt
ブラウザでPythonの実行環境を提供するのが目的なのかなぁ。立ち位置がよくわからん。教育を目的としているのかなぁ。
PythonScript
コードを読んだ感じでは、pythonで書かれたトランスレータを通してjavascriptにコンパイルするという流れ。まず最初に、コードがPythonのastモジュールでパースされ抽象構文木に変換された後、PythonToPythonJSにより抽象構文木がちょいちょいといじられてPythonJS(これまた抽象構文木の状態)という中間言語というか制限付きのPython(RPythonみたいなニュアンス?)みたいなものにされる。その後javascriptにダンプされてます。
ドキュメントもあわせて読むとわかりやすいかも。それからPyPyを参照しているのだけどPyPyも同じような流れなのだろうか?あとで調べるかも。
livereloadなんかのサポートを借りればさくさく開発出来そうという意味で、イメージとしてはSass/Compassに近いかなぁ。
JSで囲めば素のjavascriptとして実行されるのと、jQueryがJ()で使えるようになっている。fayがpreludeを置き換え版を提供しているように、PythonScript用の標準モジュールみたいなものを提供することになるのだろうかな?
あとCreating bindings is very easy, jQuery bindings are available. と説明されているようにバインディング書くのは楽そうなので、既存のjavascript資産は有効利用できそうな感じなんだけど、手で書かなきゃいけないのかなぁ。あとでなんか書いてみる。
Pyjaco
py2jsのフォークらしい。PythonScriptと似た感じだけど開発はアクティブではない感じ。version1.0だからひと通り実装できたと見るべきなのかなぁ。
jQueryの呼び出しはこんな感じ。デコレータ使えるのはいいかも。
Pyjs
webアプリケーションを作るためのフレームワークを目指しているらしい。
pyjs contains a Python-to-JavaScript compiler, an AJAX framework and a Widget Set API. pyjs started life as a Python port of Google Web Toolkit, the Java-to-JavaScript compiler.
もともとpyjamasという名前だったのが、名前を変えて新しい開発体制で動いているそうだ。PythonScriptやPyjaco同様トランスレータでjavascriptに変換しているとのことだが、ソースコードをちゃんと読んでないので詳しいところはわからん。
PyjsもJS()で囲めばjavascriptをそのまま実行するらしくjQueryの呼び出しはこうやれば良いらしい。
まとめ
自分が使うならPyjacoがいいかなと思うが、開発の勢い次第ではPythonScriptのほうが充実しそうかなぁ。多分両方使って使いやすい方を選択することになると思う。Brythonも気になるけどjQueryを一緒に使えるのかどうかわからないのとCoffeeScriptみたいにコンパイルされたJavascriptを出力できるのかどうかわからない(プロダクション環境では毎回コンパイルさせたくない)のでそこら辺調べてから決める。
個人的にはbrythonでpython版Spineを書いてみるのは面白いかなと思っているんだけど。まぁそのうちpython版のクライアントサイドMVCフレームワークはなんか出てくるんじゃないかなぁ(出て欲しいなぁ)と。