Emacsのバージョンマネージャ "evm" がEmacs LispのCIにおすすめ

RubyのrbenvやPHPのphpenvと同じように、Emacsにもバージョンマネージャがあります。

まあ、だいたいの人は最新のEmacsをエディタとして、もしくは環境として利用していると思いますので、普通のEmacsユーザにはあまり必要ないかもしれません。

ただ、Emacs LispをCIにかけるときに真価を発揮します。そうです、EmacsEmacs Lispの実行環境でしたね。

なのでEmacsにもバージョンマネージャが必要になります。そうです。必要です。

evm

https://github.com/rejeep/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ライフを!!