Cask
昨年 ELPA で elisp を管理 - naoyaのはてなダイアリー に書いたとおり、昨今は Emacs にもパッケージ管理システムが搭載されいて、どこからか elisp をコピペしてきてその後管理できなくなる・・・みたいなことはなくなった。
ただ、じゃあ ELPA で全て解決したかというとそんなことはなくて、ELPA はパッケージのインストール自体は簡単にしてくれるけれども、それだけだった。
elisp の管理も Bundler のように入れたいパッケージ一覧を書いて bundle install すれば全部まとめて入るみたいな、そういうのが欲しい・・・と常々思っていた。
と思っていたら、Cask というのを見つけた。これがずばりそのものだった。
(source gnu) (source melpa) (source marmalade) (depends-on "ag") (depends-on "anything") (depends-on "auto-complete") (depends-on "browse-kill-ring") (depends-on "color-theme") (depends-on "elscreen" :git "[email protected]:knu/elscreen.git") (depends-on "flycheck") (depends-on "git-gutter") (depends-on "pbcopy") (depends-on "popup") (depends-on "popwin") (depends-on "powerline") (depends-on "quickrun") (depends-on "recentf-ext") (depends-on "zlc") ;; prog modes (depends-on "coffee-mode") (depends-on "go-mode") (depends-on "js2-mode") (depends-on "json-mode") (depends-on "less-css-mode") (depends-on "motion-mode") (depends-on "puppet-mode") (depends-on "rhtml-mode") (depends-on "ruby-mode") (depends-on "sass-mode") (depends-on "slim-mode") (depends-on "rubocop") (depends-on "ruby-block") (depends-on "ruby-electric") (depends-on "ruby-end") (depends-on "go-autocomplete")
こんな感じで Cask というファイルを用意しておいて
$ cask
これで、.cask ディレクトリ以下に所望のパッケージがインストールされる。
$ cask update
でまとめてパッケージをアップデートすることもできる。
途中
(depends-on "elscreen" :git "[email protected]:knu/elscreen.git")
とあるように、パッケージソースを GNU や melpa ではなく Github レポジトリにできる。これがかなり嬉しい。
Cask で入れた elisp にロードパスを通すには二つやり方があって
cask exec emacs
で起動するinit.el
でcask-initialize
を呼んでやる
の二つ。
元々 Cask は Bundler に同じく elisp の依存関係を特定のディレクトリ内に封じ込めてやって、ライブラリの開発などで無用のトラブルを避けるために開発されたもの。前者はそのユースケースのための方法。
一方、Cask は普段使いの Emacs の elisp 管理にも使えて、後者がその方法だと思われる。
Cask をワンライナー ($ curl -fsSkL https://raw.github.com/cask/cask/master/go | python
) で入れた場合
$ cask init
すると ~/.cask
ディレクトリが作成されてそこに cask.el
が入ってるので、これを使って
;; cask (require 'cask "~/.cask/cask.el") (cask-initialize)
と、init.el の中で呼んでやる。すると普段使いの emacs は ~/.emacs.d/.cask
ディレクトリ以下を読むようになる。このディレクトリ用の Cask ファイルは ~/.emacs.d/Cask
になる。
あとはこの Cask ファイルと init.el を git で管理すれば十分、ということになる。実際には Cask で入れられないパッケージ化されてない elisp は相変わらずロードパスに置かれたままだけど、その辺はおいおい整理していこう。
上記手順は記憶を頼りに適当に書いてるので詳しくは http://cask.github.io/usage.html などを参照されたし。