quelpa 20170727.557(in MELPA)
Emacs Lisp packages built directly from source

以下のコードをinit.elの先頭に加えてください。

(package-initialize)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(if (require 'quelpa nil t)
    (quelpa-self-upgrade)
  (with-temp-buffer
    (url-insert-file-contents "https://raw.github.com/quelpa/quelpa/master/bootstrap.el")
    (eval-buffer)))

概要

quelpa は、 M-x package-install の欠点を解消する
新しいパッケージシステム(というかpackage.elラッパー)です。

以下のメリットがあります。

  • package.elユーザならばすぐに使える
  • README.mdやサンプルコードが見られる
  • リポジトリが保存されるのでパッケージの更新履歴が見られる
  • リポジトリのソースコードが見られる
  • MELPA管轄外のパッケージも管理できる。

現在、package.el以外にも Caskel-get などの
パッケージシステムがありますが、quelpa作者は
どれもイライラさせるものだったので自作した
と言っています!

これからが楽しみですね。

なお、作者のEmacsページはここです。
http://steckerhalter.co.vu/steckemacs.html

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてquelpaを使う方は
以下のコマンドを実行します。

M-x package-install quelpa

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name quelpa

なぜ新しいパッケージシステムが必要か

Emacsもパッケージシステムが標準添付されて
パッケージという概念も当たり前になってきました。

今では非公式パッケージアーカイブMELPAが隆盛ですね。

設定を1行加えればMELPAの膨大なパッケージにアクセスできるのは嬉しい限りです。

有名どころのパッケージはたいていカバーされています。

そんなMELPAにも大きな欠点があります!

M-x package-install でEmacs Lispをインストールしても、
Emacs Lispファイルそのものしかインストールされないことです。

その使い方が書いてある README.md がインストールされないで
使い方を調べるにはわざわざぐぐる必要があります。

ライブラリの場合、テストファイルやサンプルファイルも
使い方を学ぶのには重要な資料です。

それらが手軽に見られないのは
本当に非効率極まりないです。

パッケージをアップグレードしたとき変更点が知りたくても
リポジトリがダウンロードされないので簡単には調べられません。

そもそもMELPAに置いていないパッケージは管理できません。

そこでquelpaの登場です!

quelpaはMELPAに覆い被さるような作りでその欠点を解消します。

また、必要に応じてEmacs起動時に最新パッケージに自動更新してくれます。

quelpaでインストールされたパッケージはpackage.elで管理されるので、
すでにpackage.elを使っている人ならばすぐに使い始められます。

基本的な使い方

init.elに
(quelpa 'パッケージ名)
と書き加えれば、そのパッケージを必要に応じて
インストールして使用可能にします。

たとえば

(quelpa 'magit)

などのようにします。

また、起動時に常に最新のパッケージを使いたい場合は

(quelpa 'magit :upgrade t)

のように:upgrade tを加えてください。

すべてのパッケージを自動更新するには

(setq quelpa-upgrade-p t)

をinit.elに加えます。

ただし、自動更新は思わぬトラブルが生じることがあるので注意してください。

非互換な変更やエンバグのせいで
不意に問題解決に時間がとられるリスクがあるので
僕の方としてはおすすめしません。

手動でパッケージをインストールする

手動でパッケージをインストールするには
M-x package-install の代わりに
M-x quelpa を実行してください。

パッケージをアップグレードするには
C-u M-x quelpa を実行します。

リポジトリのソースコードのありか

quelpaでインストールされたパッケージのソースコード一式は
~/.emacs.d/quelpa/build/ 以下に存在します。

たとえば、パッケージagのリポジトリは
~/.emacs.d/quelpa/build/ag/
以下にあります。

README.mdは
~/.emacs.d/quelpa/build/ag/README.md
にありますし、
C-u M-x magit-status ~/.emacs.d/quelpa/build/ag/
magit が起動し、さらに l l を押せば履歴が見られます!!!

MELPA管轄外のパッケージをquelpaで管理する

いくらMELPAが偉大だといっても、すべてのパッケージはカバーできません。

管轄外のパッケージだってあります。

そこでquelpaにMELPA形式のレシピを渡すことでその問題を解決します。

以下の例ではどれもMELPAに登録されていますが、あくまで例ということで。

EmacsWikiにある eval-sexp-fu.el はこのように指定します。

(quelpa '(eval-sexp-fu :fetcher wiki :files ("eval-sexp-fu.el")))

githubにある ag.el はこうなります。

(quelpa '(ag :repo "Wilfred/ag.el" :fetcher github))

URLからインストールする rainbow-mode.el は次のように指定します。

(quelpa '(rainbow-mode :url "http://git.savannah.gnu.org/cgit/emacs/elpa.git/plain/packages/rainbow-mode/rainbow-mode.el" :fetcher url))

まだ完璧ではない

quelpaは現状でもかなり便利です。

しかし、現状ではpackage.elの上に成り立っているので
package.elが受け付けないフォーマットで書かれた
Emacs Lispを指定するとエラーになってしまいます。

たとえば、この前紹介した 妹を召喚するoniisama.el

(quelpa '(oniisama :repo "yu-i9/oniisama" :fetcher github :files ("oniisama.el")))

と指定しても
Packages lacks a file header
と怒られてしまいます。

<2014-09-02 Tue>追記: 怒られなくなりました。

超強力なウィンドウ構成管理Emacs Lispの windows.el だって

(quelpa '(windows :url "http://www.gentei.org/~yuuji/software/euc/windows.el" :fetcher url))

と指定しても
Quelpa: failed to checkout `windows': `Search failed: ";;; windows.el ends here"'
と怒られてしまいます。

エラーが起きるパッケージでも回避方法を指定して管理できるようになれば
相当イケてるパッケージシステムになるのではないでしょうか。

現状では auto-install などで個別にインストールすることになるでしょう。

これからの成長が楽しみでなりません。


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。