Leiningen - sicp/ikoma-sicp GitHub Wiki

Leiningen

どうやら全員処理系はClojureを使うようなので、Clojure関係のツールを紹介していきます。SICPではClojureの機能に依存したコードを書く機会はほとんどないと思いますが、Clojureを実際に使うようになってくると非常に便利です。以下のようなことが簡単にできます。

  • 依存するライブラリをproject.cljに記述するだけで簡単に引っ張ってこれる
  • クラスパスの通ったREPLを呼べる
  • テストを簡単に走らせる
  • (要追記)

インストール

基本的にはleinというシェルスクリプト1つで大丈夫というお手軽設定です(Clojureのインストールすら必要ない!!!)。以下では~/binがPATHの通ったディレクトリだと仮定します(ない人は作成して、作成した後にPATHを通してください)。以下のコマンドを実行すると、とりあえずleinの機能が使えるようになります。

cd ~/bin
wget http://github.com/technomancy/leiningen/raw/stable/bin/lein
chmod +x lein 
lein self-install

lein helpとやってヘルプが見れたらOKです。取ってくる依存関係はproject.cljに記述します。参考までに書いておくと、こんな感じになっています(後述しますが、lein new project-nameとやると雛形を作ってくれます)。

(defproject sicp-practice "0.0.1-SNAPSHOT"
  :description "syou6162のSICPの練習問題置き場"
  :dependencies [[org.clojure/clojure "1.3.0"]
		 [org.clojure/clojure-contrib "1.2.0"]]
  :dev-dependencies [swank-clojure "1.3.2"](/sicp/ikoma-sicp/wiki/swank-clojure-"1.3.2"))

例: テストの実行

clojure-contribはsequenceやstringなどの便利関数をまとめたようなパッケージ、swank-clojureはREPLから実行するときに非常に便利なパッケージです。何かやってみたほうが雰囲気が伝わると思うので、syou6162の書いたSICP用のテストがきちんと通るかやってみましょう。lein depsで依存するライブラリを取得、lein testでtest以下のディレクトリに配置されているテストを全て実行することができます(もちろん選択して実行することもできます)。

cd ikoma-sicp/syou6162/sicp-practice
lein deps
lein test

自分のプロジェクトを作る

人のテストを実行してもあまり面白くないので、自分のプロジェクトを作ってみることにしてみましょう。XXXさんがSICP用の練習ディレクトリsicp-practiceを作ることにします。

cd ikoma-sicp/XXX
lein new sicp-practice
# srcディレクトリ、testディレクトリ、libディレクトリやproject.cljの雛形が生成されます
lein test

FIXMEなんとかと出れば成功です。srcディレクトリ以下にSICPで必要になって書いた関数やデータを置くようにして、testディレクトリ以下にその関数のテストなどを書くようにするのがオススメです。練習問題毎やsubsection単位毎などでファイルを作っていくことが多いと思いますが、1-1.cljのような名前はうまく実行できないので、1_1.cljのように付けるなどして罠を避けましょう。

REPLを使う

REPLとはRead-Eval-Print-Loopの略のことだそうで、対話的実行環境のようなものです。SICPでは4章でREPLっぽいものを作るようなので今から楽しみですね。Clojure + Emacs環境のセッティング(MacOSX Lion 10.7) - やぐブロのメモに従って、clojure-modeなどのインストールを済ませておきます。XXXさんがREPLを立ち上げる場合

cd ikoma-sicp/XXX/sicp-practice
lein swank &

とやるとサーバーが立ち上がるので、Emacsを使って接続します。M-x slime-connectとやってアドレスとポートを指定すると接続できるはずです。その上で、ikoma-sicp/XXX/sicp-practice/src/sicp_practice/core.cljと開いて(println "Hello World!")と書いた上でC-x C-eとやれば画面の隅にはろーわーるどが実行できたのが見えるはずです。swank経由でサーバーを立ち上げると依存関係などを考慮した上であれこれできるのでオススメです。

以下slimeの使い方やキーバインドなどで参考になりそうなリンクです。

Emacs以外の方

vimなどでも似たようなことができるはずですが、まだよく分かりません。よい環境設定などがあったらwikiにどんどん書き込んで行きましょう。