RubyのrbenvやPHPのphpenvと同じように、Emacsにもバージョンマネージャがあります。
まあ、だいたいの人は最新のEmacsをエディタとして、もしくは環境として利用していると思いますので、普通のEmacsユーザにはあまり必要ないかもしれません。
ただ、Emacs LispをCIにかけるときに真価を発揮します。そうです、EmacsはEmacs Lispの実行環境でしたね。
なのでEmacsにもバージョンマネージャが必要になります。そうです。必要です。
evm
evmはf.elでも有名なrejeepさんがメンテナンスをしています。
使い方は、
evm install [version]でバージョンを指定してインストールするevm use [version]で指定のバージョンのEmacsを使う
と、RVMに似ています。
例えば、自分がつくったhistoryf.elというライブラリの.travis.ymlは以下のような感じです。
language: emacs-lisp
env:
- ENV_EMACS=emacs-23.4-bin
- ENV_EMACS=emacs-24.1-bin
- ENV_EMACS=emacs-24.2-bin
- ENV_EMACS=emacs-24.3-bin
before_install:
# Emacs
- sudo mkdir /usr/local/evm
- sudo chown travis:travis /usr/local/evm
- curl -fsSkL --max-time 10 --retry 10 --retry-delay 10
https://raw.github.com/rejeep/evm/master/go | bash
- export PATH="$HOME/.evm/bin:$PATH"
# Cask
- curl -fsSkL --max-time 10 --retry 10 --retry-delay 10
https://raw.github.com/cask/cask/master/go | python
- export PATH="$HOME/.cask/bin:$PATH"
- evm install $ENV_EMACS --use
- cask
script:
- emacs --version
- make
これで複数バージョンのEmacsでのテストもばっちりですね!!
裏話:なぜevmを見つけたか
実はたまたまです。
ある自分の業務効率に直結するEmacs Lispの大規模改修をすすめるにあたって、どうしても、もともと書いていたテストをCIに乗せたかったのです。
最初は、ppa:cassou/emacsのリポジトリを利用させてもらっていたのですが、どうしてもemacs-snapshotが.cask以下のライブラリを読んでくれない状況になっていました。
いっとき放っておいたのですが、ふと「どうしてだろう」と調べていたときに、このコメントを見つけて、「えーじゃあ他のEmacs LispのCIはどうしているんだろう?」と調べた結果evmをみつけたわけです。
というわけで、皆さんもevmでCIを回して良いEmacsライフを!!