(本記事は Ruby Advent Calendar jp: 2011 に賛同している記事です.この記事は本 Advent Calendar 最初の記事になります.)
Ruby Advent Calendar の最初の記事です.どうもこんにちは.
さて,今回は Ruby と Coffeescript, javascript について語ります.
Ruby から Javascript を使う
さて最近はたくさん javascript のインタプリタがありますね.node とかだとコマンドラインインターフェースも充実しているし.
それらをつかえばもちろん ruby から js を使うことはできるわけです.しかし方法が多すぎる.
それをまとめるために execjs という gem があります.
これは複数の javascript 実行方法に対応していて,自動でどれが現在の環境において実行可能かを判別し どれか適当な方法で実行してくれます.
execjs/README.md 曰く,
- therubyracer - Google V8 を採用した C 拡張ライブラリ (MRI)
- therubyrhino - mozilla rhino 組み込み JRuby ライブラリ
- Johnson - Mozilla SpiderMonkey 組み込み C 拡張ライブラリ (MRI)
- Mustang - Mustang V8 組み込み C 拡張ライブラリ (MRI)
- Node.js - node.js コマンド
- Apple JavaScriptCore - Mac OS X 付録
- Mozilla SpiderMonkey
- Microsoft Windows Script Host
つまり,execjs で Javascript を実行すれば適当な方法が採用されるので Ruby から Javascript を使うには向いています.
require "execjs"
ExecJS.eval "(function(name){ return ['hello', name, 'world'].join(' ') })('javascript')" #=> 'hello javascript world'
しかし, javascript を ruby から使うメリットはあるのでしょうか.
Coffeescript
Coffeescript という Javascript にコンパイルされる Javascript で実装された言語があります.
この言語は ruby に python をちょっと混ぜたものをコーヒーに突っ込んだような言語です.
Ruby 等を書いていて Javascript の書きにくさを実感しますが,Coffeescript を使うことでそれをある程度解消することができます.
最近だと Rails 3.1 などでデフォルトが Coffeescript になった事で Ruby 界で一層有名になった感じですかね.
Ruby から Coffeescript をコンパイルする
Rails 3.1 などもやっているように,Coffeescript を Javascript にコンパイルしています.
Coffeescript のインタプリタ (Javascript コンパイラ) は Javascript で実装されているため,JS が実行できれば Coffeescript のコンパイルをすることができます.
そして,先ほど紹介した execjs を利用して coffeescript を javascript にコンパイルする gem があります.
https://github.com/josh/ruby-coffee-script
これを使うことで簡単に coffeescript を javascript にコンパイルすることが可能です.
Sinatra では coffee :the_script
などでこれを利用して coffeescript を javascript として render することが可能です.
では,Happy coffeescript life を!