RedScript : Ruby 風の JavaScript 変換言語
今回は JavaScript 変換して使う Ruby っぽい RedScript について紹介します。
RedScript とは
RedScript は Ruby 風の言語で、 JavaScript に変換して使います。 変換後の JavaScript のコードが読みやすいといった特徴を持っています。という風に説明すると "それってもう CoffeeScript があるじゃん" と思う人もいるかもしれません。
確かにそのとおりなのですが、 RedScript は CoffeeScript よりも、もっと Ruby よりです。 Ruby を知っていれば、かなり学習コストの低い言語になっていると思います。 Python 由来のあのインデントブロックなんかもありません。
位置づけとしては CoffeeScript のような JavaScript の軽いラッパーにあたるのではないかと思います。
これは別にラッパーだから劣っているというような意味ではないです。ラッパーにはラッパーの良さがあります。 Ruby から JavaScript からの変換というと Opal というツールもあります。
こちらは逆にガッツリと Ruby で、 ラッパー感がなくなり、 JavaScript への変換を意識したコーディングというものができなくなります。
RedScript はその辺の間を狙った言語ではないかなと思います。
また、言語のホームページによれば、 クライアントサイドの JavaScript というよりも Node.js で使うコードとして使うことをメインに想定しているようです。
RedScript の特徴
RedScript のサイトには、多くのサンプルコードが変換後の JavaScript と一緒に載せられています。 Ruby と JavaScript の知識があれば、眺めているだけでなんとなく書き方は分かるのではないでしょうか。ここでは、その中からいくつか抜粋して紹介したいと思います。
静的クラスでの定義や継承ができます。
ただ、 end の後の , や ) はちょっと気持ち悪いです。
class Animal def init(name) @name = name end, def sayHi puts "Hello" end end) class Duck < Animal def init super name alert("#{@name} is alive!") end, def sayHi super puts "Quack" end end) duck = new Duck('Darick') duck.sayHi()クラスではなく、 オブジェクトを直接作ることもできます。
プロトタイプへのメソッドの追加用に >> なども用意されています。
object auto wheels: 4, engine: true, def honk puts "hoooonk" end, def sayHi(msg) puts msg end end # object ブロック外での定義 def auto.add(x, y) return x + @wheels end # プロトタイプへのメソッド追加 def Car >> sub(x,y) return x - y end無名関数を渡す場合に do ... end ブロックを使うことができます。
getUser('/users/1', do alert(user) end)
インストール
Windows でのインストール方法について説明します。 Node.js の npm を使うので、他の環境でもあまり変わらないと思います。Node.js 上で動作するので、先にインストールしておく必要があります。 Node.js のインストール方法については以下の記事を見て下さい。 npm を使ってインストールします。 コマンドとして使うので、 -g が必要です。
~/lang/rs $ npm install -g redscript
これでインストールは完了です。
redscript(.cmd) で動作します。使い方
コマンド引数にソースファイルを指定して実行すると、拡張子を js にした JavaScript ファイルが生成されます。ただ、出力に制御コードを使っているらしく、対応していないターミナルだと変な文字が出ます。
~/lang/rs $ redscript test.rs 笨\224 Writing test.js引数なしで実行すると Usage が表示されます。
~/lang/rs $ redscript
No RedScript files specified, type --help for more info
redscript [filename1] [filename2]
redscript watch [filename1] [filename2]
"--help" で詳しい情報と出てますが、ヘルプはまだ実装されていないらしく、エラーとなります。
感想
ちょっと使ってみたところバグがボロボロと出てきました。(Ver. 0.1.0)ただ、そこはまだ開発段階みたいなので、今後は直っていくのではないかと思います。
ブロックの表現に関して、私はブレース {} と end が適度に混ぜられる Ruby が一番読みやすいと思っています。 ブレースばっかり、 end ばっかりは読みづらいです。インデントだけなんてのは論外でしょう。
RedScript も多少 ブレース {} と end の組み合わせはできます。 ただ、 end の後に対応のない
)
とかが気持ち悪く、
ここは改良して欲しいところです。また、 Ruby の優れている点の一つとしてエレガントなコードブロックがあります。
関数の引数に無名関数を渡すところは do ... end を差し込むのではなくて、 もっと Ruby っぽいコードブロックになるといいのになと思います。
RedScript はまだまだ問題点の多い言語ですが、 Ruby っぽく JavaScript が書けるのは魅力的です。 CoffeeScript にとって代わるくらいに頑張ってほしいです。
- 関連記事
Facebook コメント
コメント