WebrubyをMacにインストールしてみる
webrubyとは、ブラウザの上でrubyを動かしてしまおうというものです。
http://qiezi.me/talks/rubykaigi2013/index.html#/
https://github.com/xxuejie/webruby
RubyKaigi2013でのお話を聞いて、試してたくなったので、開発環境の準備をしてみた。
↓を参考に。
http://qiezi.me/2013/01/09/webruby-1-2-3-tutorial/
Emscriptenが必要→LLVMが必要→Homebrewあった方がいいな→macports消さないと
という感じで色々準備が必要だった。
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
Emscriptenのインストール
https://gist.github.com/nathanhammond/1974955
LLVMのバージョンが3.2である必要があるらしいが、デフォルトだと3.3がインストールされてしまったので、下記の手順で修正。
なるほど、git checkout で切り替えるのかー。
$ brew versions llvm 3.3 git checkout c4cc4cc /usr/local/Library/Formula/llvm.rb 3.2 git checkout f8f4ca1 /usr/local/Library/Formula/llvm.rb 3.1 git checkout 7d15192 /usr/local/Library/Formula/llvm.rb $ cd /usr/local/Library/Formula $ git checkout f8f4ca1 /usr/local/Library/Formula/llvm.rb $ brew info llvm llvm: stable 3.2 (bottled), HEAD http://llvm.org/ Not installed From: https://github.com/mxcl/homebrew/commits/master/Library/Formula/llvm.rb ==> Options --all-targets Build all target backends --disable-assertions Speeds up LLVM, but provides less debug information --disable-shared Don't build LLVM as a shared library --rtti Build with C++ RTTI --universal Build a universal binary --with-asan Include support for -faddress-sanitizer (from compiler-rt) --with-clang Build Clang C/ObjC/C++ frontend --without-python Build without python support ==> Caveats For non-homebrew python (2.x), you need to amend your PYTHONPATH like so: export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH Extra tools are installed in /usr/local/Cellar/llvm/3.2/share/llvm and /usr/local/Cellar/llvm/3.2/share/clang. If you already have LLVM installed, then "brew upgrade llvm" might not work. Instead, try: brew rm llvm && brew install llvm $ brew install llvm --with-clang
これで準備はできたので、webrubyのビルドへ。
$ git clone git://github.com/xxuejie/webruby.git $ git submodule init && git submodule update
build_config.rb中の下記の行のコメントを外す。
conf.gem :git => 'git://github.com/xxuejie/mruby-js.git', :branch => 'master' # This is the line to uncomment!
rake mrbtest を実行して、問題なければbuildディレクトリ以下に、webruby.jsが出来上がっている。
mruby、emscriptenはmodulesディレクトリ以下に収まっている。
appディレクトリにある*.rbのソースコードは自動的にコンパイルされて組み込まれるそうだ。
後はこれをHTML上で読み込んで、案内にあるサンプルの通り呼び出せば、mrubyが動いていることが確認できた。
<!DOCTYPE html> <html> <head> <title>Webruby tutorial</title> <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script src="webruby.js"></script> </head> <body> <h1>This is a skeleton for Webruby tutorial!</h1> <div id="container"></div> <script> $(document).ready(function() { var mrb = WEBRUBY(); /* Runs embedded source code in mruby.js file. */ mrb.run(); mrb.close(); }); </script> </body> </html>
動的にテキストを読み込んで実行することも可能。
そのときは"mrb.run_source(source)"を実行する。
mruby→JSの呼び出しと、コールバック登録ができることは確認出来た。
ただ、JS→mrubyでコールバックを呼ぶ時にオブジェクトを引数に入れると、繰り返し呼んでいるうちにスタックが溢れてしまうという現象が起きた。setjmpやらlongjmpがからむemscriptenの問題らしいが、詳しくは分からない。
いやしかし、すごいものだ。