読者です 読者をやめる 読者になる 読者になる

Thanks Driven Life

日々是感謝

Emacs のパッケージ管理を package.el + el-get から Cask + pallet に乗り換えました

経緯

Cask は今まで Emacs Lisp を TravisCI でテストする用にしか使っていなかったのですが

最近では普段の開発環境で用いるパッケージの管理にも使われる事例を目にするようになったので、便乗して私も乗り換えてみました。

とりあえず私の Emacs の環境です

gongo/elfactory

Cask 導入して変わったこと

1. package.el や el-get のインストールコードが消えた

https://github.com/gongo/elfactory/commit/191eea76d42b889aa045ea51d095ebaf3a11d553#diff-5

これまでは ↑ のようなコードを準備しておいて

$ make install-elisp

を実行するとパッケージがインストールされる、といった運用をしていました。 今となっては

$ cask

一発でインストールできるようになったので身軽になりました。

2. el-get の独自レシピが要らなくなった

el-get 使わなくなったので関連するやつ削除 · 191eea7 · gongo/elfactory

  • melpa や Marmalade に登録されてない
  • el-get 本家の recipe にも登録されていない
  • だけど自分のリポジトリ化に置くのも気がすすまない(最新版との同期がめんどい)
    • git submodule するほどでもない

みたいな時はよく自分で el-get 用の recipe ファイルを作っていたのですが、Cask では

(depends-on "ecukes")
(depends-on "magit" "0.8.1")
(depends-on "magit" :git "https://github.com/magit/magit.git")
(depends-on "magit" :git "https://github.com/magit/magit.git" :ref "7j3bj4d")
(depends-on "magit" :git "https://github.com/magit/magit.git" :branch "next")
(depends-on "magit" :git "https://github.com/magit/magit.git" :files ("*.el" (:exclude "magit-svn.el")))

といったように (参考) git リポジトリ(加えてブランチやコミット)の指定も可能なので、これも不要となりました。

「git clone したあとに何かしらのコマンドを実行する (こういうやつ)」とかまでやりたい場合は el-get の方がいいと思いますが、今のところ私の中でそういう需要が無かったので問題ありませんでした。

Pallet との組合せ

Pallet は「Cask の機能を用いたパッケージ管理ツール」ということで、例えば

  • M-x pallet-init
    • 既に package.el でインストール済みの elisp を Cask ファイルに書き出す
  • M-x pallet-install
    • cask install と同様

といった機能があるらしいです。が、私としては下記の機能がとても便利に感じました。

Pallet's main job, though, is to add and delete package references from your Cask file as you install and delete them using the built-in Emacs package management system. It does this automatically and silently.

via rdallasgray/pallet

つまり M-x package-installM-x list-packages からパッケージの install or uninstall を行うと 自動的に Cask ファイルに反映してくれる ということです。

よくあったのが

「家にあるマシンで package-install したあのパッケージ、Cask ファイルに書き忘れてた…」
「もう要らないから消したのに、Cask ファイルに残りっぱなしだったからインストールしやがった」

みたいな状況です。pallet を使うとそこらへんをよしなに同期とってくれるので Cask ファイルにまで気を使う必要が無くなりました。

まとめ

Cask、最初は Carton って名前だったのに Perl の Carton名前被って紛らわしい!!って話になって 投票の結果 Cask って名前にしたのに、今度は homebrew-cask被ってしまったがもういいわ みたいな感じで大変そうですが、これからも応援しています。

続き → Emacs 環境の管理を Cask + Pallet から Cask だけにした - Thanks Driven Life