Clojure Scriptを使ってみる
Clojure Scriptとは
先日、Clojure Scriptという技術が発表されました。 Clojure Scriptとは「Clojureで書くことができるJavaScript」です。 Coffee Scriptと同じように、Clojureで記述したファイルをコンパイルしてjsファイルに書き出します。 Clojure自体よくわからない人もいらっしゃるかと思いますので、順番に説明していきます。
Clojureとは?
みなさんはClojure(クロージャー)という言語をご存知でしょうか? Clojureとは、JVM上で動作するLISP系の言語です。 最近はHerokuでサポートされたりして、知名度があがりつつある言語です。 Clojure言語自体の説明については、Clojure公式サイト※1や、Clojure入門記事※2などを参照してみてください。
Google Closureとの関係
Clojure言語はGoolgeが提供しているClosure Library/Compilerと名前がよく似ていますが、まったくの別物です。 前者はJVM上で動くプログラミング言語、後者はJavaScriptのライブラリおよびツールです。 しかし、Clojure ScriptはClosure Library/Compilerに依存している(コンパイルやオプティマイザ時に使用)ので、少々ややこしい状態になっています。 ClojureとClosureを混同しないように注意してください。
Clojure Scriptを動かしてみる
ではClojure Scriptを実際に動かしてみましょう。 本記事での動作確認環境は下記の通りです。
-
- OS : MacOS X 10.6.8
- Git : 1.7.6
- Java : 1.6.0_26
- ※Java6以上が必須です
github※4からClojure Scriptをcloneしてきて、初期化スクリプトを実行します。
$ git clone git://github.com/clojure/clojurescript.git $ cd clojurescript $ script/bootstrap
bootstrapコマンドを実行すると、Clojure本体やClosure Libraryなど、必要なものを取得してくれます。
bootstrapの実行が終了したら、動作確認をしてみましょう。 まずはREPLの確認です。
$./script/repl Clojure 1.3.0-beta1 user=>
bootstrapで取得されたClojureのREPLが起動します。 REPLを終了したら、次はClojure ScriptのREPLを確認します。
$./script/repljs #'user/jse "Type: " :cljs/quit " to quit" ClojureScript:cljs.user>
この2つの起動を確認したら、次は環境変数の設定を行います。
Clojure ScriptのrootディレクトリをCLOJURESCRIPT_HOME環境変数に設定します。
$ export CLOJURESCRIPT_HOME=/path/your/clojurescript $ export PATH=$PATH:$CLOJURESCRIPT_HOME/bin
pathに追加したら、確認してみましょう。
$ cljsc Usage: cljsc <file-or-dir> cljsc <file-or-dir> {:optimizations :advanced}
cljscコマンドが認識されていればOKです。
では、Clojure Scriptを用いて簡単なサンプルを作成してみましょう。 JQueryをClojure Scriptから呼び出し、クリックでdiv要素の値を変更するサンプルを作成します。 まずはJavaScriptに変換される、Clojureファイルを作成します。
;jquerytest.cljs (ns jquerytest.core) (def jquery (js* "$")) ;ボタンクリック時の関数 (defn clickBtn [] (-> (jquery "#text") (.html "Hello Clojure Script!"))) ;htmlファイルよみこみ時に実行. ;ボタンのクリックイベントに関数をセット. (jquery (fn [] (-> (jquery "#btn") (.click clickBtn))))
Clojure Scriptのファイルは拡張子をcljsにします。 htmlのロード時にクリックイベントをセットし、ボタンがクリックされるとdiv要素に対してテキストを変更しています。
では、作成したファイルをjsファイルにコンパイルしましょう。
$ cljsc jquerytest.cljs > jquerytest.js
同じディレクトリに、jsファイルとoutディレクトリができているはずです。 そしてjsファイルを使用するjquerytest.htmlファイルも作成します。
<html> <head> <script type="text/javascript" src="out/goog/base.js"></script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script type="text/javascript" src="jquerytest.js"></script> <script type="text/javascript"> goog.require("jquerytest.core"); </script> </head> <body> <div id="text">Click Me.</div> </br> <input type="button" id="btn" value="execute jquery" /> </body> </html>
JQuer本体と、コンパイルしたjsファイル、あとはclosureのファイル読み込んでモジュールをロードしています。
htmlファイルをブラウザで開いてみてください。ボタンを押下するとテキストが変更されます。 プログラムの詳細内容については、 Clojure Script Quick Start※3を参照してください。
ClojureからJQueryを使用してフロントサイドのプログラミングを行ってみました。 フロントだけでなく、Clojure Scriptはnode.jsにも対応していますので、サーバサイドもClojure Scriptで実装することが可能です。 今後はこういった特定言語からJavaScriptへコンパイルするようなアプローチがもっと出てきそうですね。
参考サイトなど
-
-
- ※1 Clojure公式サイト http://clojure.org/
- ※2 Clojure Script Quick Start https://github.com/clojure/clojurescript/wiki/Quick-Start
- ※3 Clojure Script github https://github.com/clojure/clojurescript
-