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

package.elから Caskに切り替えました

emacs package


私もしばらく前に Caskに切り替えたのでそのメモ.

Caskを使う利点

  • (あまりいないだろうけど)Emacsのバージョンごとにパッケージを管理できる
  • Gitで管理されていれば, MELPAに登録されていなくてもインストールできる
  • 0.6から Gitのタグ, コミット IDの指定ができるようになり, バージョンの固定化が可能に.
  • 自分の環境をファイルに落とし込める

インストール

 % curl -fsSkL https://raw.github.com/cask/cask/master/go | python

Macユーザの人は homebrewで入れれるみたいです.

 % brew install cask
Caskのアップデート

まだ開発中で問題修正も稀にあるので, うまくいかないときなどあれば,
Caskをアップデートして再度試してみるとよいかと思います.

 % cask upgrade # upgrade-caskでも可

Caskファイルを書く

http://cask.github.io/dsl.html


ファイル名は Cask となります.

source

パッケージリポジトリの指定. gnu, melpa, marmalade, SC, orgが現状指定可

(source gnu)
(source melpa)
depends-on

インストールするパッケージをつらつらと指定していく.

;; CoffeeScript
(depends-on "coffee-mode")
(depends-on "sourcemap")

;; Perl
(depends-on "cperl-mode")
(depends-on "xs-mode" :git "https://github.com/emacsmirror/xs-mode.git")


現状以下のような指定方法が可能です.

(depends-on "magit")
(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")))

その他にも(主にテスト向けの)コマンドがありますが, パッケージ管理では
この 2つで十分かと思います. 詳細はドキュメントを参照してください.

私の Caskファイル

https://github.com/syohex/dot_files/blob/master/emacs/Cask


参考までに私が現在使用しているものを示します

パッケージのインストール

Caskファイルの配置

デフォルトでは Caskファイルがあるディレクトリにインストールするので,
~/.emacs.d ディレクトリに設置するとよいでしょう(シンボリックリンク
良いです).

インストール
  % cd ~/.emacs.d
  % cask install # caskだけでも可

この場合はパッケージは ~/.emacs.d/.cask/emacs-version以下にインストール
されます.

パッケージのアップデート

たまにアップデートしたくなったら, cask updateを実行してください

  % ~/.emacs.d
  % cask update
不具合??

現状 gitリポジトリを直接指定した場合, 更新がなくてもアップデート時に
再インストールされてしまいます.



新しいバージョンだとこの問題が見られなくなっていました.

設定

cask.elをロードして, cask-initializeを呼べば, load-pathの設定,
autoloadに関する設定を読み込んでくれます. cask-initializeの
第一引数にはインストールパスを指定できるので, ~/.emacs.d以外に
インストールした人は明示的に指定する必要があります.

(require 'cask "~/.cask/cask.el")
(cask-initialize)

おわりに

el-getほど細かいことができるわけではないですが, package.elを
そのまま使うよりかは管理しやすくなったのではないかと思います.
特に複数のマシンで同じ環境を構築したいという人には良いと思います.


https://github.com/rdallasgray/pallet


Palletという Caskベースのパッケージ管理ツールもあるので,
気になる方はそちらも参照してください.(プロジェクト名の重複ということで,
名前が変わってしまうかもしれないそうですが)