Leiningen ってなんだ
Clojure触りだして、とりあえずLeiningenっていうのを使って何かするらしいというのを知った。
lein new myapp (プロジェクトの雛形作る。)
やら
lein deps (project.cljに記述したライブラリ群をインストールする)
やら
lein ring server 3000
というのを打ち込んだ。RubyでいうところのBundlerっぽい何かだというのがわかった。
補足
lein ring server 3000
だけど、REPLの他にプロセス立ち上げるのは無駄が多いとのこと。じゃあサーバーどうするのかというと、
REPL の外じゃなくて中でサーバーを起動させれば JVM はひとつだけで済むのでマシンに負担かからないし良い
とのこと。REPL駆動開発という言葉もあるらしい。
つまり、プログラムを作りながら、横でREPLを起動しておき、その関数をロード(またはリロード)して実際に使ってみて、さらに修正して、使ってみて、ということができる、ということです。
サーバサイドアプリケーションだとどうなのでしょう。サーバを起動しないとだめなのでしょうか。
いいえ。
ClojureのサーバサイドプログラムはおおむねRingという環境上で動きますが、そこで使うClojure関数は、リクエストを受け取りレスポンスを返すただの関数であり、そのリクエストというのは、ただのAssociativeなので、マップを渡せば呼べるのです。関数は環境に依存してないのです。セッションすらも、Associativeの中の:sessionというキーにバインドされたAssociativeにすぎません。なので、REPL上で簡単に呼べるのです。Associativeって、つまりマップですからね。
楽しそうだ。