Marmaladeはお手軽感が素敵なEmacs Lispのリポジトリサイト


長ーい歴史をもつEmacsでも、いまだ解決できてない問題はいろいろあるわけで、その一つにパッケージ管理があると思います。
これには、すでにいろいろな試みがあります。

EmacsWiki: ELPA
auto-install.elでEmacsLispパッケージを自動インストール→anything.el関連を一括インストール – (rubikitch loves (Emacs Ruby CUI Books))
el-get.elでEmacs Lispパッケージをインストール・アップグレードする – (rubikitch loves (Emacs Ruby CUI Books))

他のプログラミング言語やLinuxディストロに目を向けてみますと、それぞれ独自のパッケージ管理方法があるわけですがCRAN、CPAN、PyPIのようなELPAに当たるサイトで集約的に管理されているものがほとんどです。

EmacsでもELPAのようなサイトで集約的にパッケージが管理されていると良いのですが、残念なことにELPAに登録されているパッケージはごくわずかで、現状のEmacs Lispの頒布形態はカオスとしか言いようがありません。

auto-install.elやel-get.elは、そういった現状を改善するとても有用な方法ではありますが、他のパッケージ管理の分野にはあまりいないかなり特殊な存在で、どうしてもユーザがわに負担、というかめんどくささがあります。

そんな中、Emacs24にELPAからインストールするためのEmacs Lisp、package.elがマージされたというのがemacs-develに流れました。

Package.el merged

Emacsのパッケージ管理に関して大きな変化ですが、依然ELPAは貧弱です。ELPA側の問題が解決しないと現状は恐らく何も変わらないのですが、Marmaladeはその問題をさらっと解決してしまいそうな雰囲気です。

Marmaladeとは

Marmaladeとは、Emacs Lispのパッケージをアーカイブするサイトで、Emacs24に標準で搭載される予定のpackage.elに対応しています。つまり、package.elでELPAからも、Marmaladeからもインストールすることができるようになります。UbuntuでいうところのPPAみたいなものです。

Marmalade: Spreadable Elisp

作者は、Googleにお勤めのNathan Weizenbaumさん。offline Gmailの担当をなされているそうです。

その魅力ですが、「お手軽」の一言につきます。ELPAのサイトを見ますと、登録は簡単と書いておきながら、登録にはメール送ってねーとか、その時点で敷居が高すぎます。 その点、Marmaladeは規定のフォーマットでヘッダー部分を書けば、後はアップロードするだけというお手軽さ。実際、サイトが開設されたのが去年の末頃だったようですが、すでに70以上のパッケージがアーカイブされていて、ELPAのそれに迫る勢いです。

また、親切な方がMarmaladeが解釈できるelispを登録していただいているようで、拙作のanything-R.elもいつの間にか登録されていました。このように作者以外が登録できる(ヘッダーのフォーマットがあえば)というのも、登録数を伸ばしている理由の一つかもしれません。

Marmaladeからインストールするための準備

すでに書いたとおり、Marmaladeからのインストールにはpackage.elが使われます。Emacs24であればすでに入っているのですが、余程の先端好きな方でないとEmacs24を使っていないはずですので、package.elまではマニュアルでインストールする必要があります。以下のサイトから落としてきます。

package.el

package.elをロードパスが通ったところに置き、以下のようなものを.emacsあたりに書いておきます。

(require 'package)

;;リポジトリにMarmaladeを追加
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))

;;インストールするディレクトリを指定
(setq package-user-dir (concat user-emacs-directory "vendor/elpa"))

;;インストールしたパッケージにロードパスを通してロードする
(package-initialize)

Marmaladeからダウンロードしてインストールする

早速、Marmaladeからダウンロードしてインストールしてみます。まずは、Marmalade.elをインストールです。
M-x list-packageとすると次のような感じでパッケージのリストがでてきます。

http://img269.imageshack.us/img269/2531/018thumb.png

ここから、Marmalade.elを選択。iキーを押すとマークがつきます。さらにxキーを押すとインストールが始まります。他のキー操作については、hキーを押すと詳しい説明がエコーエリアに出てきます。diredのキーバインドだと思っておけば良いかもしれません。

この時点でインストールしたパッケージの中で;;;###autoloadによって自動ロード対象の関数が明示されているものは、インストール完了です。ただ、パッケージによっては、;;;###autoloadによって指定されていないものもあります。Marmalade.elもその一つです。そういうものはrequireなり、loadで読みこんでやる必要があります。

今回の場合はMarmalade.elを(load “/hoge/fuga/Marmalade.el”)のようにして読みこませて、インストール完了です。

Marmaladeにパッケージを登録する。

登録作業は、とても簡単です。まず、Marmaladeのサイトでsign upします。その後はsing inしてパッケージをアップロードするだけです。他には先ほどインストールしたMarmalade.elを使ってアップロードする方法もありますので、こちらの方法も試してみます。

まず、登録するサーバを選択します。今のところ選択肢はMarmaladeしかありませんので、(setq marmalade-server “http://marmalade-repo.org/“)を.emacsあたりに書いておきます。次はM-x marmalade-login とするとログイン名とパスワードを尋ねられますので、先程登録した内容を入力します。その際”Save Marmalade username and auth token? “と尋ねられますが、ここでyesを選択するとtokenなどの情報が保存されるため、これ移行loginをする必要がなくなります。後は登録したいelispを開いて、M-x marmalade-upload-buffer とすれば登録完了です。

Emacs Lispの頒布形態が変わるかも

ひとしきり使ってみて、アップロードしたファイルが削除できない、とかファイルの内容を編集する手段がバージョンをあげるしかない、など荒削りなところもいろいろありますが、かなり有望ではないかなと感じました。

開発者側の視点から見ると、公開するまでの手数が少なくてすみます。ヘッダーのコメントを規定のフォーマットで書く必要がありますが、ELPAのそれとほとんど変わらないためにほとんど編集せずにすみます。

ユーザの視点で見ると、言わずもがなインストール作業がとっても楽チンです。autoloadが明記されていれば、ユーザは.emacsを開く必要すらありません。

残念なことにデフォルトのEmacsは非常に使い勝手が悪いので、効率よく作業しようと思うと外部パッケージのインストールが欠かせません。しかし、カオスな頒布形態とインストールの面倒さで、これまでEmacsは憂き目を見てきたわけです。

逆にインストールがしやすくなれば、便利なパッケージを手軽に使えることでEmacsの良さが理解してもらいやすくなるんではないかなー、と思います。

というわけで、多くのEmacs LispがMarmaladeに登録されて、たくさんの人にEmacsの便利さが伝わればいいなー、と感じました。