旧gaaamiiのブログ

間違ったことを書いている時があります。コメントやTwitter、ブコメなどでご指摘ください

Leiningen ってなんだ

Clojure触りだして、とりあえずLeiningenっていうのを使って何かするらしいというのを知った。

leiningen.org

lein new myapp
(プロジェクトの雛形作る。)

やら

lein deps
(project.cljに記述したライブラリ群をインストールする)

やら

lein ring server 3000

というのを打ち込んだ。RubyでいうところのBundlerっぽい何かだというのがわかった。

補足

lein ring server 3000

だけど、REPLの他にプロセス立ち上げるのは無駄が多いとのこと。じゃあサーバーどうするのかというと、

https://gyazo.com/c26bb8cda3259c7e123b5a89b163c1c9

REPL の外じゃなくて中でサーバーを起動させれば JVM はひとつだけで済むのでマシンに負担かからないし良い

とのこと。REPL駆動開発という言葉もあるらしい。

つまり、プログラムを作りながら、横でREPLを起動しておき、その関数をロード(またはリロード)して実際に使ってみて、さらに修正して、使ってみて、ということができる、ということです。

サーバサイドアプリケーションだとどうなのでしょう。サーバを起動しないとだめなのでしょうか。

いいえ。

ClojureのサーバサイドプログラムはおおむねRingという環境上で動きますが、そこで使うClojure関数は、リクエストを受け取りレスポンスを返すただの関数であり、そのリクエストというのは、ただのAssociativeなので、マップを渡せば呼べるのです。関数は環境に依存してないのです。セッションすらも、Associativeの中の:sessionというキーにバインドされたAssociativeにすぎません。なので、REPL上で簡単に呼べるのです。Associativeって、つまりマップですからね。

楽しそうだ。

参考