MELPAへのパッケージの登録の仕方

昨日の関西 Emacs勉強会でパッケージ管理の話がちらっと出たん
ですけど、あんまり自分でパッケージを登録する人が少なそうだったん
でその手順を簡単に示します。

recipeを書いて、pull requestを送る

https://github.com/milkypostman/melpa


上記の MELPAのリポジトリを forkします。その中に recipesディレクトリに
目的のパッケージの レシピを追加して pull requestを送り、それが master
ブランチにマージされたら、package.elからインストールできるように
なります。


pull requestを送るに当たっては、とにかく他の recipeを参考にする
ようにしてください。MELPAをリポジトリを管理している方はとても
寛容な方ですごく丁寧に受け答えしてくれるのですが、たくさんの
pull requestが来ているので、余計な手間をかけさせないように
しましょう。そのためにも既にマージされた recipeで類似のものが
たぶんあるはずなので、それを参考にして recipeの追加を行なって
ください。依存するパッケージがある場合は後述の依存関係の記述にも
注意してください。


なお基本的に 1回の pull requestにつき recipeは 1つとしてください。
登録しようとしているものに依存関係がある場合はよくわからないんですが、
あまりそういうケースはないと思いますし、あったとしても既に登録して
いるものに依存している(auto-complete, helmなど)ことが多いと思い
ますので、原則 (1 recipe/ 1 pull request)としてください。

依存関係の記述

依存関係はレシピに書くのでなく、elisp中に書いている必要があります。
以下は helm-R.elから抜粋しましたが、Package-Requires:の部分が
依存関係を示します。パッケージ名とバージョンを記述します。

;; Description: helm-sources and some utilities for GNU R.
;; Author: myuhe <yuhei.maeda_at_gmail.com>
;; Maintainer: myuhe
;; Copyright (C) 2010,2011,2012 myuhe all rights reserved.
;; Created: :2012-05-20
;; Version: 0.0.1
;; Keywords: convenience
;; URL: https://github.com/myuhe/helm-R.el
;; Package-Requires: ((helm "20120517")(ess "20120509"))

この性質のため、他の人が書いているパッケージをインストールする
ためには他のモジュールが必要なんだけど、Package-Requiresが
記述できていないとか、依存関係のものも登録していないって
なるとかなり面倒になってしまいます。el-getは依存関係が recipeに
書けるようなので手間がだいぶ違うので人気があるのかなと思って
います。


package.elだと、依存しているものはとりあえず登録されている
状況である必要があるので、有用なパッケージを書いている人は
積極的に登録していただけたらと思います。

recipe例

githubで管理されるパッケージの recipe
(helm :repo "emacs-helm/helm" :fetcher github)
Emacs Wikiで管理されるパッケージの recipe
(ascii :fetcher wiki)
ファイルを明示的に指定する場合の recipe
(calfw :repo "kiwanami/emacs-calfw"
       :fetcher github
       :files ("*.el"))

そんなに難しくないですよね。

テスト

recipeが追加できたらトップディレクトリで

  % make recipes/(追加した recipe)

と実行してください。ちゃんと recipeがダウンロードできるか
確認できます。この段階では依存関係までは見てくれないようです。

おわりに

MELPAもパッケージがかなり増えてきて、検索しやすさとか次の
便利さを求める段階に来ているかなと思うんですけど、まだ登録
されていない有用なパッケージが僕が知っているだけでもいくつか
あるんで、自分が書いたものでもなくても、これは簡単に
インストールできるようにしたらみんな Happyっていうような
パッケージがあったらぜひ登録してみてください。

Enjoy Emacs Life