K2NR.ME

このエントリーをはてなブックマークに追加 Tweet

Clojure事始め〜Leiningen,VimClojure〜

最近Clojureにはまってます。駆け出しLisperを自認する自分としてはナウいLisp方言のClojureに手を出さないわけにはいかないのです。

布教の一貫として、Clojureを(Macで)スタートするために必要な諸事項をまとめていきましょう。何分過去の色褪せた記憶なので間違って部分もあるかもしませんが、大体は今でも通用するはずです。

アジェンダ

  1. Leiningenのインストール
  2. VimClojureのセットアップ

Lieningen

Leiningenとは、Clojureのビルドツールです。必要なライブラリの依存関係を解決してくれたりするやつ。 これのセットアップはとても簡単です。

% brew install Leiningen

これだけです。ちなみにclojure自体のインストールはleiningenが勝手にやってくれるので必要無いです。むしろ初学者は様々な混乱を引き起こす可能性があるのでclojureを単体でインストールしないほうがいいと思います。

さて、インストールしたら新規のプロジェクトを作成しましょう。

% lein new hello

と実行するとhelloプロジェクトがカレントディレクトリ以下に作成されます。

(defproject hello "1.0.0-SNAPSHOT"
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.3.0"]])

初期状態でproject.cljはこんな感じになってるはずです。project.cljはその名の通り、プロジェクトのタイトルを決めたり、使用するライブラリを定義したりするプロジェクトファイルです。例えば、プロジェクトでclojure-contribライブラリを使用したいなら:dependenciesの部分を以下のように書き換えます。

  :dependencies [[org.clojure/clojure "1.3.0"]
                 [org.clojure/clojure-contrib "1.2.0"]]

この状態でコマンドラインからlein depsと実行すると自動的にプロジェクトで使用するライブラリの依存関係を解決してくれます。便利ですね。

さて、project.cljを以下のように書き換えてみましょう。

(defproject hello "1.0.0-SNAPSHOT"
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.3.0"]]
  :main hello.core)

ここで追記した:main hello.coreは「hello.coreネームスペース内の-main関数がプロジェクトのメイン関数である」ことを示しています。 さらに、src/hello/core.cljを次のようにしてみます。 “`clj (ns hello.core)

(defn -main ) ”`

この状態でlein runを実行すると

% lein run
hello, world

おおおおおお、動きましたね!

ちなみに、lein replを実行することで、プロジェクトの依存関係を解決した状態でREPLを実行することができます。簡単過ぎて鼻血がでそうですね。

VimClojure

鼻血は止まりましたか? さて、みなさん、Vimmerだと思いますので続いてvimでClojureを便利に扱うプラグイン、VimClojureを紹介しましょう。 みなさん、Vimmerだと思いますので既にNeoBundle、あるいはVundleは導入済みですね? 次のように.vimrcに記述してVimClojureをインストールしましょう。

NeoBundle 'VimClojure'

みなさん、Vimmerだと思いますのでプラグインのインストール自体の説明は省きますね。 とりあえずこの状態で.vimrc

let vimclojure#HighlightBuiltins=1
let vimclojure#HighlightContrib=1
let vimclojure#DynamicHighlighting=1
let vimclojure#ParenRainbow=1

と設定しておけば、シンタックスハイライトが有効になると思います。試してみて下さい。

VimClojureをさらに便利に使用するためにはNailGunというツールが必要になります。 Macをご使用であれば

brew install nailgun

これで一発導入OKです。 今インストールしてnailgunはクライアントなので、nailgunを動作させるためにはさらにnailgunサーバーが必要になります。 導入する方法は複数ありますが、ここではleiningenを使用しましょう。

lein plugin install gberenfield/lein-nailgun 2.3.1

これで完了です。 次に、.vimrcに、nailgunを使用するための設定を追記します。

let vimclojure#WantNailgun = 1
let vimclojure#NailgunClient = "ng"

おもむろにターミナルをもう一つ立ち上げて、先ほどのhelloプロジェクトのディレクトリでlein nailgunと実行してみて下さい。

% lein nailgun
NGServer started on 127.0.0.1, port 2113.

こんな風に表示されたらサーバー起動成功です。 サーバーが起動した状態でsrc/hello/core.cljを開きましょう。

試しに

(ns hello.core)

(defn -main []
  (+ 1 2)
  )

ソースを↑こんな感じにして、4行目にカーソルを置いた状態で<LocalLeader>elとキーを押してみると。。おお!(+ 1 2)が評価されましたね!これは捗りますね!

おっと、言い忘れてましたが<LocalLeader>は各自でmaplocalleaderを使って設定しておいてください。

VimClojureには他にも便利機能がたくさんありますので、:h vimclojure.txtを読んでみるとよいでしょう。

とりあえずここまででClojure導入準備が完了しました。次回があれば、もう少し踏み込んだ内容に触れてみたいですね。

comments powered by Disqus