[wisp]Clojure構文を使ってJavaScriptを記述する
ClojureでJavascript
最近はCoffeeScriptやDart、TypeScript等、JavaScriptコンパイル言語(変換した結果JavaScriptにする言語)がよく使用されています。 ClojureをJavaScriptへコンパイルする場合、「ClojureScript」がありますが、生成されたJavaScriptは普通に読めるものではありません。 (適当なcljsファイルを作成してコンパイルしてみればわかるはず)
今回紹介する「wisp」は、Clojurescriptと同じくClojureの構文を用いてJavaScriptを生成する言語ですが、 「ちゃんと人が読めるJavaScript」にコンパイルされます。 では、wispをインストールしてつかってみましょう。 また、ここを使用すればwispがClojureをどのようにJavaScriptへ変換するか、確認することができます。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.5
- Node.js : v0.10.4
- npm : 1.2.18
npmを使用してwispモジュールをインストールしましょう。グローバルオプションを使用します。
% mkdir wisp % cd wisp % npm install -g wisp
Wispを試してみる
では早速、wispをためしてみましょう。wispコマンドを実行すると、replが起動します。
% wisp =>
Clojureのreplと同じように、対話形式で構文を記述することができます。
=> (print "hello wisp!") hello wisp!
関数も定義して使うことができます。
=> (fn add [x y] ( + x y)) => (add 10 20) 30
ちなみに、fnを使用して関数を定義した場合は単なるfunctionとして変換されます。 defnを使った場合はexportsされ、外部から使うことができるようになります。
//fnを使って定義 => (fn x[a] ( + a 1)) //このように変換される function x(a) { return a + 1; }; //defnを使って定義 => (defn y[b] ( + b 1)) //このように変換される var y = function y(b) { return b + 1; }; exports.y = y;
wispファイル(Clojure形式で記述したファイル)からjsファイルへ出力しようと思い、wispコマンドのオプションとかを探したんですが、 それらしいものがありませんでした。 どうやら現状はパイプとリダイレクトでjsファイルを出力するようです。(違ってたらおしえてください)
次のようなtest.wispファイルを作成します。
;test.wisp (fn greet[name] (+ "hello," name)) (print (greet "taro"))
test.wispファイルをjsへ変換しましょう。出力されたjsはそのままnodeで動きます。
% cat test.wisp| wisp > test.js % cat test.js function greet(name) { return "hello," + name; }; console.log(greet("taro"))
まとめ
ClojureScriptより綺麗なコードになるし、手軽に使えて便利な気がします。Clojure好きな人はぜひチェックしてみてください。
参考サイトなど
- Github: https://github.com/Gozala/wisp
- Wisp playground: http://jeditoolkit.com/try-wisp/