Table of Contents
はじめに
この記事は、自分がClojureで開発環境を準備するために調べたことをまとめています。
-
対象読者
- Clojureに興味あるけど始め方がわからんという人。
- 素のREPLでClojureしてるけど使いにくいと感じてる人。
- 普段Emacs使ってるけど、SLIME?なにそれ?って人。
-
推定環境
- Java6
- emacs23
- lein
- slime
OSは、Ubuntu10.04とwindows7, windowsxpで動作確認しています。
Clojureのインストールは、ビルドツールのLeiningenを使えばとっても簡単です。 Leiningenとは、Clojure用のビルドツールで、JavaでいうMavenみたいなものです。 プロジェクトのフォルダのひな形や、コンパイル、ライブラリの管理をしてくれます。
普通に考えると、Clojure本体をインストールして、ライブラリのクラスパスを通して、 起動コマンドを設定してなど、いろいろと手間をかけてやっと動くようになるもんですが、 Leiningenは、leinというシェルスクリプトをパスの通った場所におくだけで、インストールが完了しちゃいます。 あとは、指定のコマンドを叩くだけで、leinスクリプト自体がLeiningen本体はもちろんClojure本体もダウンロードしてくれます (Java本体だけは予め入れておく必要がありますが)。
ちなみに読み方は「ライニンゲン」だそうです。自分はいつも「れい人間」と読んでますw。
Leiningenのインストール
まずはJavaの最新版をインストールしちゃいましょう (現時点ではJavaSE7はいろいろ不安定なのでJava6をお勧めします)。
続いて下記サイトからLeiningenのアーカイブを取ってきます。
直リンは以下。
解凍したらできたフォルダをPATHに通します。 自分の場合は%HOME%\binというディレクトリにleinフォルダの中身(windwosの場合は、lein.batとwget.exe、linuxの場合は、lein)をコピーしました。
$ cd %HOME% $ mkdir bin
Windwosの環境変数だとこんな感じ。
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_24 PATH=%PATH%;%HOME%\bin;%JAVA_HOME%\bin;
linuxの場合は実行権を付与しておきます。
$ chmod +x lein
パスが通ってるのを確認したら以下でインストール開始。
$ lein self-install
これで最新版のClojureも含めてLeiningenがインストールされます。
$ lein Leiningen is a build tool for Clojure. : :
replを起動してインストールされたことを確認します。
$ lein repl
C-cで終了です。
簡単な使い方。
プロジェクト作成
$ cd ~/dev $ lein new myproject $ cd myproject
依存関係の解決
$ lein deps
プロジェクトのパッケージング
$ lein jar
Leiningenの次は
Leiningenがあれば、replも起動できるし、あとはテキストエディタさえあれば開発ができます。 極端な話、メモ帳とDOS窓、Linuxだったら端末とviさえあれば開発できるということです。
とはいえ、今時メモ帳で開発なんてありえません。メモ帳や(素の)viではカッコの対応がすぐ崩れてしまいます。 vimや高性能エディタを使えばそれなりに快適な環境が構築できるかもしれませんが、ほとんどLispで書かれているEmacsにはかないません。1 この際カッコでできたEmacsを使っちゃいましょうw。
てことで、Emacs用のIDEであるSLIMEという統合開発環境をインストールします。
SLIMEとは
Emacsには有名な(というかLispのデファクトスタンダードである)SLIMEという開発環境があります。2
SLIME is the Superior Lisp Interaction Mode for Emacs.
直訳すると「SLIMEはEmacs向けの優れたlisp対話モードです」ですね。
SLIMEの特徴は以下に詳しいですが、
簡単にまとめると
- デバッガやシンボルの補完
- 関数の引数表示やドキュメントへの簡単アクセス
- 処理系ごとに違うREPLの差を吸収したUIの提供
などがあります。
ほかにClojureでSLIMEをつかうメリットとして、スクリプト起動で待たされることがないということがあります。 ClojureはJVMベース故に起動がとても重いので、他のスクリプト言語のようにサクッと起動してちゃちゃっと処理するのが苦手ですが、 SLIMEで開発すればそのようなことはなく、即実行ができるので快適に使えると思います。Linuxなどでいう端末みたいな役割を果たすということですかね。 このように便利なSLIMEですから、多くのLisperはカッコが好きというよりもSLIMEの操作性の虜になってるのではないかっなって思います。
私は最初、LISPの処理系であればなんでもSLIMEが使えるものと勝手に勘違いしていたのですが、 SLIMEはもともとCommonLisp用に開発されたもので、当初はCommonLisp以外の環境はサポートされていなかったようです。 例えばGaucheは、もともとSLIMEに対応していなくて、2009年に最初のバージョンができたようです。意外ですね。
ClojureでSLIMEを利用するには以下のインストールが必要です。3
- SLIME(SLIME本体、SLIME-REPL)
- SWANKサーバー(swank-clojure)
- Clojure-mode
SWANKサーバーとは、SLIMEとLisp処理系を橋渡しするサーバーです。 このSWANKサーバのおかげでClojureでもSLIMEを利用できるわけです。
これらのモジュールは、それぞれ手動でインストールしても良いのですが、 SLIMEとClojure-modeに関しては、最近Emacs界隈で有名なMarmaladeを利用すると簡単です。 MarmaladeはEmacsように開発されたパッケージシステムで簡単にEmacs用ソフトをインストールできます。 次はMarmaladeのインストールを説明します。
Marmaladeのインストール
ほとんど下記にある説明のとおりですが
Marmaladeとは次期Emacs24でサポートされているパッケージ管理サイトで Emacs24からは標準で利用できるらしいです。
インストール方法も上記サイトからのパクリですが
下記を実行して
(install-elisp "http://repo.or.cz/w/emacs.git/blob_plain/1a0a666f941c99882093d7bd08ced15033bc3f0c:/lisp/emacs-lisp/package.el")
下記を.emacsに設定すればインストール完了です。
(require 'package) ;;リポジトリにMarmaladeを追加 (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/")) ;;インストールするディレクトリを指定 (setq package-user-dir (concat user-emacs-directory "vendor/elpa")) ;;インストールしたパッケージにロードパスを通してロードする (package-initialize)
これでパッケージを簡単にインストールできるようになりました。
SLIMEのインストール
Marmaladeからインストールします。
M-x package-list-package
下記をiで選択し、xで実行してください。
- slime
- slime-repl
- clojure-mode
SLIME自身は、SLIME本体とSLIME-REPLという2部構成になっているっぽいです。 また、Clojure-modeはSLIMEと直接関係ありませんが、ついでにインストールしておきます。
設定は以下になります。
(require 'slime) (setq slime-net-coding-system 'utf-8-unix slime-protocol-version 'ignore) (slime-setup '(slime-repl)) (require 'clojure-mode) (add-hook 'slime-repl-mode-hook (lambda () (clojure-mode-font-lock-setup)))
自分の場合、下記のようにslime-fancy, slime-bannerを指定すると動きませんでした。
(slime-setup '(slime-repl slime-fancy slime-banner))
続いてSWANKサーバーをインストールします。
swank-clojureのインストール
Clojure用のswankサーバーは、Leiningenのプラグインとしてインストールします。
$ lein plugin install swank-clojure 1.3.3
下記でswankサーバーを起動できます。
$ cd ~/dev/project $ lein swank
この方法では、Projectディレクトリに移動してから起動しますが、 こうすることにより、必要なクラスパスが設定された状態でSWANKサーバーが起動されます。
下記は、プロジェクトを指定しない起動方法です。
$ ~/.lein/bin/swank-clojure
この場合、クラスパスの指定がないので、clojure.coreの関数ぐらいしか使えません。
SLIMEの使い方
ここまでで、Leiningen, SLIME, SWANK-Clojure, Clojure-modeをインストールしてきました。 最後にこれらの使い方をまとめます。
REPLサーバ起動
依存するクラスライブラリが設定された状態で起動します。
$ cd myproject $ lein swank
接続
SWNAKサーバーを起動した状態で、
M-x slime-connect localhost:4005
とします。
操作方法
C-c C-c | カーソル位置のコードのコンパイル |
C-c C-z | REPLバッファの表示 |
C-c C-k | ファイル全体のコンパイル |
M-. | 定義にジャンプ |
M-, | 元の定義に戻る |
M-r | 正規表現で履歴検索 |
参考URL
SLIMEの操作方法については、下記が非常に参考になりました。
このサイトでも解説されていますが、ACモードやPopwinも入れたほうが格段に操作方法がよくなります。
windowsで日本語を扱う場合
Windowsからlein swankで起動したswankサーバと連携する場合 SLIME-REPL上で日本語を評価すると、サーバーが停止してしまいます。 これを回避するには、lein.batの先頭で下記を追記しておきます。
set JAVA_OPTS=-Dswank.encoding=utf-8-unix
注釈
Footnotes:
1 こんなこというとVimmerから非難されてしまいますがw。
2 SLIMEは、最近ではvimやeclipseからも利用できるようです。普及すればEmacsにこだわる必要はないかもですね。ライトユーザにはEclipseはよさそうです。
3 ちなみに普段emacsを使ってない人は、ClojureBoxをインストールするのが一番手っ取り早いです。 これは、Emacs+SLIME+CLojure、開発環境一式をすべてまるごとインストールしてくれる夢の様なプロダクトです。 Emacsはそれ自体の設定が大変煩雑なので、面倒が嫌いな人はこれをインストールすればOKかと思います。
Date: 2011-11-12 19:20:44
0 件のコメント:
コメントを投稿