el-getを導入した際にハマっちゃったことを晒します

パッケージ管理にel-getを導入しようとした際にハマったお話です。結論からいうと、マニュアルやREADMEはちゃんと読めということです。

これまでemacsのパッケージ管理にはemacs標準のpackage.elを使用していました。いつかel-getを試してみようと思って放置していたのですが、思うところがあったので、いよいよ重い腰を上げてel-getを導入しました。

el-get自体はGitHub上にあります。

github.com

導入は簡単で、以下のコードをinit.elなどの初期化ファイルに記述するだけです。 

(add-to-list 'load-path "~/.emacs.d/el-get/el-get")

 

(unless (require 'el-get nil 'noerror)

  (with-current-buffer

      (url-retrieve-synchronously

       "https://raw.githubusercontent.com/dimitri/el-get/master/el-get-install.el")

    (goto-char (point-max))

    (eval-print-last-sexp)))

 

(add-to-list 'el-get-recipe-path "~/.emacs.d/el-get-user/recipes")

(el-get 'sync)

 

package.elやel-get、その他のパッケージ管理のメリット/デメリットについては、丁寧にまとめているページが簡単に見つかるのでそちらをあたってみてください。

これでemacsを再起動すると、起動時に必要なファイルをGitHubから取得してel-getの導入が完了します。これだけです。

どこでハマったの?という感じですね。

el-getなどのパッケージ管理システムを導入しようとする動機として、職場と家などの様々な環境ごとに設定を共通にしたいというものがあります。少なくとも僕の動機はそれが一番でした。

なので、この後、さまざまなページで紹介されているように、

(el-get-bundle jbeans-theme)

(load-theme 'jbeans t)

のように、必要なパッケージを記述していったわけです。

これでこれからのパッケージ管理が楽にできる!と喜び勇んでemacsを再起動すると、

error: El-get can not find a recipe for package "jbeans-theme"

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file. Start Emacs with
the ‘--debug-init’ option to view a complete error backtrace.

 とうまく導入できません。

ここで結構な時間悩んでしまったのですが、本家にちゃんと説明がありました。

github.com

Placing el-get-bundle macro calls instead of (el-get 'sync) in your init file to explicitly specify which packages should be installed. 

僕の用途のようにel-get-bundleを用いて導入したいパッケージを初期化ファイルに記述したい場合には、(el-get 'sync)を削除する必要があります。

はじめからちゃんとREADMEを最後まで読んでいれば悩まなくて済んだんですが、そんなこといったところで後の祭りですね。

同じことでハマる人にとって少しでも役に立つことを願い、失敗談として晒します。