この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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/