MELPAにレシピを投稿するには

MELPAは有志によるEmacs Lispパッケージリポジトリです。Emacs標準の`package.el`/ELPAと互換性があり、2016年現在でのEmacs Lispパッケージの配布手段としては主流です。そのあたりの事情は、[2015年Emacsパッケージ事情](http://qiita.com/tadsan/items/6c658cc471be61cbc8f6)に書いた通り。

[MELPA](https://melpa.org/)はWebブラウザから簡単にEmacs Lispパッケージを検索することができます。利用者が多いので、自作のEmacs Lispを公開したときに当時にMELPAに登録しておくことでインストールされやすくできます。

特徴としては、「レシピ」の形式でインストール情報を定義することができます。GitHubのプルリクエストでのレシピ投稿は[RubyGems.org](https://rubygems.org/)や[Packagist](https://packagist.org/)(PHP)と比べて多少の手間はかかりますが、一定の品質が担保されてゐる強いメリットがあります。

慣れれば簡単、なことではあるのですが、初心者にはつまづきやすい「お作法」のようなものがあるので注意する必要があります。投稿前に注意すべき条項については[melpa/CONTRIBUTING.md](https://github.com/melpa/melpa/blob/master/CONTRIBUTING.md)にまとめられてるので

この記事は[2016年3月13日現在](https://github.com/melpa/melpa/commit/fedea91a497eb66a1ac5e3b1cc7795a56f3cf769)のをもとにしてます。

↓ ここから翻訳

----

## レシピを追加する

新規のレシピ追加はガイドラインを遵守する必要があります。

- ひとつのレシピごとにひとつのプルリクエストを送ること。複数のプルリクエストを送る際は複数のブランチを切って構いません。
- ソースコードは著名な[バージョン管理システム](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0)に保管されている必要があります。EmacsWikiは保管場所として認められなくなりました。
- パッケージの**公式な**配布元からインストールされるようにする必要があります。特殊な状況を除いて、フォークしたリポジトリからインストールするレシピは認めれらません。
- パッケージは[GNU Emacs Lisp Reference Manual: Packaging](https://www.gnu.org/software/emacs/manual/html_node/elisp/Packaging.html)によって説明された`package.el`の形式を遵守すべきです。詳細な情報は[marmaladeパッケージマニュアル](https://web.archive.org/web/20111120220609/http://marmalade-repo.org/doc-files/package.5.html)にもあります。
- レシピはインストールされるファイルサイズが最小になるように指定してください。詳しくは[READMEの#Recipe Format](https://github.com/melpa/melpa/blob/master/README.md#recipe-format)を参考にしてください。
- パッケージの「安定版」を作成するには、`version-to-list`関数で解釈できる形式の「タグ」を付けます。MALPAはタグをもとに安定版パッケージを生成します。
   - *(訳注: 要は、Gitなら`git tag 0.1.0; git push --tags`みたいな感じです)*

## レビューを迅速にするには

我々はMELPAを構成するパッケージの品質に気を掛けてるので、提出されたレシピはすべてレビューします。次の手順に従ってくれれば、レビューのプロセスが迅速化できて助かります。

- [flycheck-package](https://github.com/purcell/flycheck-package)はパッケージのメタデータについての基本的なミスを指摘してくれます。
- プルリクエストには以下の情報を含めてください。
    - 何をするためのパッケージなのか簡潔に説明
    - パッケージのリポジトリへのリンク
    - あなたとパッケージの関係(たとえば、メンテナー? 貢献者? パッケージの利用者?)
    - 上流パッケージの管理者とコミュニケーションをとっておいてください。(たとえば、このレシピが投稿されたことで互換性に変化が生じないか)
        - <q>Relevant communications with the upstream package maintainer (e.g., package.el compatibility changes that you have submitted).</q> ~~(訳注: 私にはこの英文は訳せなかった…)~~
- パッケージのビルドをテストするには、コマンドラインから`make recipes/<recipe>`を実行してください。あるいはEmacsでレシピを開いて<kbd>C-c C-c</kbd>を押してください。
- パッケージのインストールをテストするには、`package-install-file`を実行します。あるいは、<kbd>C-c C-c</kbd>を押したときに`yes`と入力することでもインストールできます。

## テスト

説明文の中の`<NAME>`は、レシピ名を指します。

 1. [MELPA](https://github.com/melpa/melpa)リポジトリをフォークします
 2. 新しいレシピファイルを`package-build-recipes-dir`変数のディレクトリ(デフォルトではpackage-buildパッケージがインストールされたディレクトリの下の`recipes/`)に置いてください。`package-build.el`で定義されたコマンド`M-x package-build-create-recipe`では、その手順を案内してくれます。
 3. コマンドラインで以下のコマンドを実行し、パッケージが正しく構成されることを確認してください。  
  ```
  make recipes/<NAME>
  ```
   * あなたの環境の`emacs`のバージョンが23以上であるか、Emacsの実行ファイルに`$EMACS_COMMAND`が設定されてることを確認してください。  
   * またはレシピファイルをEmacsで編集して<kbd>C-c C-c</kbd>を押すと、新しく構築されたパッケージをインストールするか尋ねられます。
 4. もしリポジトリがリリースのためのタグを含むなら、`STABLE=t make recipes/<NAME>`を実行することで正しいバージョン番号が検出できることを検証できます。バージョン検出はレシピに`:version-regexp`を記述することで調整できます([README.md#Recipe Format](https://github.com/melpa/melpa/blob/master/README.md#recipe-format)を参照)。

```
EMACS=/path/to/emacs make sandbox
```

そして`M-x package-list-packages`を実行すると、適切にテストと実行ができます。これは依存性が不足してないか検証するのに便利です！

## プルリクエストを送る

正しく動作することを検証できたら、GitHubでプルリクエストを送りましょう！ [hub](https://github.com/github/hub)コマンドを導入すればプルリクエストを送る手間が簡単になるかもしれませんよ…

---

翻訳ここまで。

## あとがき

文意がとれなかった文章は翻訳を諦めた。tadsan氏は中学高校時代は現代文には自信があったが英語は赤点常連だったことで有名なので、翻訳は信頼せず原文を読むべき。