---
title: Clojure+Emacsな開発環境を作る(late 2011)
tags: []
categories: ["Programming", "Lisp", "Clojure"]
date: 2011-11-26T06:25:52Z
updated: 2011-11-26T06:25:52Z
---

Clojureは浦島太郎状態なので、リハビリする。

まずはClojure環境構築記事が大分古くなったので最新化

### Emacsの準備 (package.el+Marmaladeでパッケージ管理)

MarmaladeはEmacs24から標準搭載らしいElispのパッケージ管理システム。使ってるEmacsは23なのでとりあえずマニュアルインストール(wgetしてload-pathに追加)。

(「It's fully compatible with package.el and ELPA」って書いてあるけど包含関係がいまいち分かっていない)

    $ cd ~/.emacs.d/elisp
    $ wget http://repo.or.cz/w/emacs.git/blob_plain/1a0a666f941c99882093d7bd08ced15033bc3f0c:/lisp/emacs-lisp/package.el

ちなみに僕は↓のような読み込み設定を書いています(5年くらい前に書いたままだ。。)

    ;; loading local elisp                                                                                                                        
    (let ((my-elisp-dir "~/.emacs.d/elisp"))
      (when (file-exists-p my-elisp-dir)
        (unless (member my-elisp-dir load-path)
          (setq load-path (cons my-elisp-dir load-path)))
        (dolist (f (directory-files my-elisp-dir))
          (when (file-regular-p (format "%s/%s" my-elisp-dir  f))
            (print (format "loding %s" f))
            (require (intern (car (split-string f "\\."))))))))

package.elの設定は以下。レポジトリに[Marmalade][1]を設定。

    (require 'package)
    (add-to-list 'package-archives
                 '("marmalade" . "http://marmalade-repo.org/packages/"))
    (package-initialize)

を設定(`M-x eval-current-buffer`で即反映)。

`M-x package-list`でインストールできるパッケージの一覧取得。
代表的コマンドは以下

 - M-x package-list (インストールしたいパッケージでiを押して、xでインストール)
 - M-x package-install (Enter押したあと、パッケージ名入力)
 - M-x package-refresh-contents

### clojure-modeインストール

`M-x package-install clojure-mode`で。

2011-11-26時点で最新版のclojure-mode-1.11.4がインストールされました。更新が早い！clojurescript-modeとかあるw

あとは.emacs.elに
    
    (require 'clojure-mode)

を書く。

### Pareditの設定
よくわからんけど、clojure-modeのページで説明されてるし、ClojureBoxにも入っているみたいだから、設定しておく。.emacs.elに↓を設定。

    (defun turn-on-paredit () (paredit-mode 1))
    (add-hook 'clojure-mode-hook 'turn-on-paredit)

あとで調べる

### slimeのインストール

同様に`M-x pacakge-install slime`と`M-x package-install slime-repl`を実行（エラーが出ても無視）。

### leiningenのインストール

言わずとしれたClojureのビルドツール[leiningen][2]。wgetするもよし、パッケージ管理システム経由で取得するのもよし。僕はbrewで（バージョンは1.6.1）

    $ brew info leiningen
    leiningen 1.6.1
    http://github.com/technomancy/leiningen
    /usr/local/Cellar/leiningen/1.6.1 (3 files, 36K)
    
    Standalone jar and dependencies installed to:
      $HOME/.m2/repository
    
    http://github.com/mxcl/homebrew/commits/master/Library/Formula/leiningen.rb
    $ brew install leiningen

### swank-clojureのインストール
slimeとclojureプログラムをつなげるサーバーの[swank-clojure][3]をインストール

    $ lein plugin install swank-clojure 1.3.3
 
バージョンは2011-11-26時点の最新。

### 新規プロジェクト作成

    $ lein new hello
    $ cd hello
    $ emacs -nw src/hello/core.clj

ファイルを開いて`M-x clojure-jack-in`でswank-serverが立ち上がる（昔に比べてめちゃくちゃ楽だ。。）

あとはコードを書いてはreplで試して開発を勧めればおk。

代表的なコマンドは[SLIME Commands][4]参照。

個人的によく使うのは↓かな

 - C-x C-l 現在のバッファを読み込んでREPLに反映
 - C-x C-m マクロ展開
 - C-c TAB 補完
 - M-. ソースコードにジャンプ

  [1]: http://marmalade-repo.org/
  [2]: https://github.com/technomancy/leiningen
  [3]: https://github.com/technomancy/swank-clojure
  [4]: https://github.com/technomancy/swank-clojure/blob/master/README.md
