Clojure環境

冬季オリンピックがバンクーバーで始まった。私の初海外旅行は、バンクーバー経由で バンフへ行ったスキーだったので、懐かしくなったぞ。って、何年前の話だよー。

冬季オリンピックと言うと、必ず思い出される事がある。スケートなんて、つまんない。 水すましみたいに、リンクをぐるぐる回っているだけじゃん、と言って世間のヒンシュク を買ったおえらいさんが居た事だ。

数日前にテレビでいろいろな競技を解説してたけど、氷上での競馬だか競輪みたいな (追い抜き)競争、面白いね。先頭集団がコーナーで団子状に転倒してしまい、びりで 走っていた選手が、金メダルをGetしちゃうんだもの。はらはらどきどきで、競馬ファン には堪らないかも知れないな。面白くてゲラゲラ笑いながら見てたら、正式な競技名を 失念しちゃった。

おいら的には、上のスケート競技を除けば、スピードもフィギィアも興味無い。なんせ 水すましだし、芸術センスも ゼロだからなあ。昔やってたよしみで、スキー競技がいいな。モーグルなんて最高。 若い頃は、よくモーグルもどきをやって楽しんだものだ。

スキー仲間に直角滑専門な人が居たな。彼曰く、くねくね曲がったりするの面倒じゃん。 曲がらないでまっすぐ滑るのがスキーの醍醐味とか。おいらは、そんなまっすぐに 滑るんじゃ、もったいないじゃんと思ったものだ。

まあ、人それぞれ。自分が楽しみたいようにすればいいだけだから、余りぐだぐだ言う のは控えておこう。

で、初の海外旅行の帰りの事だけど、カルガリーからバンクーバーへ出て戻る予定 だったんだけど、カルガリーが濃霧のために飛行機が出発出来ず。バンクーバーからの 帰路便に間に合わなかったんだ。旅行会社の人が別便を手配してくれたんだけど、それが なんと、ジャンボの2階にあるファーストクラス。ツアーの仲間と王侯気分を味わった 、思い出深い旅でした。

こんな昔話を書くようになっちゃ、じじいになった証拠だな。少し新しい事でもするかな。

Clojureを自分でbuildする

黒にゃー本を最初から読み直している。すると、p12のかこみ記事が気になってきた。 もうとっくに 1.1が出ているのに、落してきた勉強セットは、clojure本体が、α版に なっていたからだ。それに、セットのTOPに置いてある、Rakefileも元ruby屋さんと しては、ちょっと気になるからな。

んでもって、Rakefileをつらつら眺めていたら、セットを最新版にしてくれる手順書の ようだ。まずは、下準備せいと読みとれるので、ソースを取ってきた。

[sakae@fb /home/src]$ cd /home/src
[sakae@fb /home/src]$ git clone git://github.com/richhickey/clojure.git
[sakae@fb /home/src]$ git clone git://github.com/richhickey/clojure-contrib.git
[sakae@fb /home/src]$ git clone git://github.com/weavejester/compojure.git

compojureってのは、最後の章で出てくる、clojureでのRailsっぽい事をしたい人用のセット。 更に下ごしらえを施しておく。

[sakae@fb /home/src]$ cd compojure
[sakae@fb /home/src]$ mkdir deps
[sakae@fb /home/src]$ ant deps

次に、Rakefileを走らせる為の下準備をする。

[sakae@fb ~/code]$ export COMPOJURE_HOME=/home/src/compojure
[sakae@fb ~/code]$ export CLOJURE_HOME=/home/src/clojure
[sakae@fb ~/code]$ export CLOJURE_CONTRIB_HOME=/home/src/clojure-contrib

これでやっと、rake出来るぞ。

kae@fb ~/code]$ rake deps
(in /home/sakae/code)
Already up-to-date.
Buildfile: build.xml
  :
rake aborded..

なんてこったい! エラーだよ。原因は、clojure-contrib の中に、build.xmlが無いためどうやって、antしたらいいか分からん為みたい。全くもう。プンプン。 しょうがないので、README.txt を、読みましたよ。そしたら、

If you downloaded the sources from Github, you will need Apache Maven
(2.0 or higher) to run the build.  See http://maven.apache.org/

Run the following command in this directory:

    mvn package

This will produce the file target/clojure-contrib-${VERSION}.jar that
you can add to your Java classpath.

Additional build commands are available:

    mvn clojure:repl
    To start a Clojure REPL (Read-Eval-Print Loop)

    mvn compile
    To compile sources without building a JAR

    mvn test
    To run unit tests

    mvn assembly:assembly
    To build ZIP/tar distributions containing source and JARs

ですって。みんな大好き俺さま DSL。今度は、Maven ですかい! rake で、うんざりして、 留めは ant かいと思っていたら、っつたくもう。教本も読み終ると、Lancet なるDSL が出来る仕組みだからなあ。全く、車輪の再発明には困ったものだ。環境整えるだけで 日が暮れちゃうよ。 ぐだぐだ言ってても日が暮れるので、

[sakae@fb /home/src/clojure-contrib]$ mvn assembly:assembly

そしたら、Apache方面から大量に色々な物をお取り寄せして、packageを作っておりました。

[sakae@fb /home/src/clojure-contrib]$ ls target/
archive-tmp/
classes/
clojure-contrib-1.2.0-SNAPSHOT-dist.tar.bz2
clojure-contrib-1.2.0-SNAPSHOT-dist.tar.gz
clojure-contrib-1.2.0-SNAPSHOT-dist.zip
clojure-contrib-1.2.0-SNAPSHOT.jar
maven-archiver/
test-classes/

bz2まで、ご丁寧に作って頂きまして、ありがとうございました。 こうなると、Rakefileは、そのまま使えないね。面倒だから、手でコピーしちゃったよ。 で、下記は、起動した直後です。

[sakae@fb ~/code]$ bin/repl.sh
WARNING: clojure.lang.Repl is deprecated.
Instead, use clojure.main like this:
java -cp clojure.jar clojure.main -i init.clj -r args...
Clojure 1.2.0-master-SNAPSHOT
user=>

後は、お好きにどうぞ、かな。repl.shは、いろんなJarファイルを背負い込んで 立ち上がってくるので、起動まで随分と時間がかかる。適当に、Jarファイルを 間引いてあげると吉かも知れない。

clojure-box

Windowsでは、repl.batで起動するんだけど、生憎emacsが入っていないんで、ちと 使いづらい。幸い、 Clojure boxなるものが提供されてるので、この際 だから入れてしまおう。(あれ? Windowsには、開発環境を入れないポリシーじゃなかったっけ? いいえ、emacsは純然たるeditorですと、強弁しておきます。)

こいつを入れると、emacsも自動的に入り、clojureを便利に使えるようにセットアップ された状態になる。インストール後にアイコンをクリックすれば、emacsの上でREPLが 自動起動する。

; SLIME 
user> (defn sq [n]
	(* n n))
#'user/sq
user> (sq 11111)
123454321
user> 

勝手にインデントもやってくれるし、閉じ括弧を入力した時、一瞬対応する開き括弧へ カーソルが移動して教えてくれたりして、括弧の対応を間違う事もない。また、clojureで 使える関数名を知っているので、名前がうろ覚えでも、適当な所まで入力した後で TABキーを押せば、候補を教えてくれる。これだけでも、格段に使いやすくなるはずだ。 なお、 終了は、,q した後、ファイルメニューからquitだ。

後は、好みなんだけど、バックグランドの色が白だったり、(私に取って)目障りな アイコンやメニューがあったので、そこらを変更する為、下記の.emacsを書いて、%HOME% に置いてあげた。

そうそう、Windowsでは、頭が ドットで始まるファイルは容易に作れないので、emacsに おまかせしましょう。C-x C-f すると、カーソルが最下欄に移動します。そこで、 ~/.emacs して、出力ファイルを決定後、下記をコピペして から、C-x C-s すれば大丈夫です。(注: C-xは、コントロールキーと、xキーを同時に 押す要領です)

; ---------------------- base configuration ----------------------

;; color customization
(global-font-lock-mode t)

;; delete whole line
(setq kill-whole-line t)

;; inhibit startup message
(setq inhibit-startup-message t)
(setq initial-scratch-message nil)

;; no backup mode
(setq make-backup-files nil)

;; color-resion & CR posision
(transient-mark-mode t)
(column-number-mode t)

(menu-bar-mode -1)
(tool-bar-mode nil)
(set-cursor-color     "gold")
(set-face-background 'default "black") 
(set-face-foreground 'default "white") 

(set-locale-environment "ja_JP.UTF8")
(set-language-environment "Japanese")
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)

; ---------- user configuration ---------------------
;; too big window and auto-complete
(require 'widen-window)
(global-widen-window-mode t)

;; for clojure book code
(cd "~/code")
(setq swank-clojure-classpath
     (list "c:/homes/code"  "c:/homes/code/lib/hsqldb.jar"))

;; horizontally split and move
(defun other-window-or-split ()
  (interactive)
  (when (one-window-p)
    (split-window-horizontally))
  (other-window 1))

(global-set-key (kbd "C-t") 'other-window-or-split)

上記で、widen-window と言うのは、emacsの画面を分割して使う場合、カーソルの ある方を自動的に広くしてくれるものです。 ここからDLしました。

repl.batでは、いろいろなJarファイルを指定して起動してます。また、*.cljが置いて ある場所も調整されてます。jarファイル類は、"~/.clojure"というdirを作ってその中 へ入れるか、examples-dir内も含めて参照出来るように、.emacsの最後の部分で位置調整 しておきます。(cdとsetqによる設定部分)

(注).emacsを少々修正。おいらのPCは画面が横長なので、emacsを画面一杯に開いて、画面を 左右に分割するようにした。あの人のお勧めによる。

おいらは、いつもこんな風に道具の整備に余念がなく、道具を使ってのoutputが少ない んだよなぁ。自戒しなければ!

一度は、黒にゃー本をSequential Readしてる訳だから、2度readする事はあるまいに。 Random Writeぐらいはせいよ。writeが難しいなら、せめて、Read Modfy Write でもいいぞ。