できる気がしてきた。

僕の興味のあることを共有します。

環境の引っ越しをした時にMELPAから自動でパッケージをインストールをする。

新年なので、OSをUbuntuからManjaroに移行してみて遊んでいるta2gchです。

Emacsを使っていると、随分前にインストールしたパッケージを標準パッケージと勘違いしてしまうことがあります。 当たり前のように設定ファイルでrequireされていて、いざOSの引っ越しをした際に未インストールでErrorとなる、というのは誰しも経験があるかと思います。

これの解決策をいくつかあげたいと思います。

1. ファイルの先頭付近で一括インストールする

よくある解決方法ですね。

(defvar favs '(autocomplete yasnippet ddskk))
(dolist (pkg favs)
  (unless (package-installed-p pkg)
    (package-install pkg)))

2. requireを置き換える

自分が使っている方法です。 嬉しいのは、いちいち先頭に戻ってインストールしたいパッケージを追記しなくてよいということです。

(defun use (pkg)
  (unless (pacakge-installed-p pkg)
    (package-install pkg)))

;;;使い方

(use 'yasnippet) ;; (require 'yasnippet)の代わり(※1)
(yas-global-mode t)

※1 package.el では自動でautoloadsファイルが生成されるので、本来requireすることはありません

3. el-getをつかう

el-getはpackage.elの登場で死んだ(?)と思われていたパッケージ管理システムです。 実はel-getはpackage.el登場以降も開発が活発で、package.elとの統合も行われたので、 package.elのスーパーセットといった感じになっています。

(el-get-bundle yasnippet
  (yas-global-mode t)) ;; yasnippetをインストールしたときの設定を書く

el-getは独自のパッケージシステム(レシピ)をもっているので、自分でレシピを書くことで 手軽に開発版などを導入することもできます。

(参考: Caskはもう古い、これからはEl-Get - いまどきのEmacsパッケージ管理 - 貳佰伍拾陸夜日記

4. Quelpaをつかう

紹介したものの中では最も新しいシステムで、内容は 2で紹介したuse関数のスゴい奴です。

(quelpa 'yasnippet)
(yas-global-mode t)

use関数との違いはパッケージの自動更新やgitリポジトリなどを指定できるということです。

(参考:emacs quelpa : 【本邦初公開】MELPAを改善した新しいパッケージ管理システム | Emacs Lisp Elisp パッケージ インストール 設定 使い方 | るびきち「日刊Emacs」

まとめ

これ以外にCaskもあるのですが、別ファイルに記述しなくてはいけない時点で、面倒だったのでやめました。 Quelpaやel-getは、最近まで使っていたのですが、DDSKK(日本語のインプットメソッド)がMELPAからインストール可能になった時点で、僕の利用目的としてはMELPAのリポジトリで十分になってしまったので自作のuse関数を利用するに至っています。

どれが一番良いかというとel-getが無難かなぁとおもいます。

Quelpaは使用感として極端に人を選ぶプロダクトでした。 というかパッケージを更新しろ!と勧めてくるのが五月蝿かった。(静かにすることもできます)

いろいろと言ってみましたが、全部試してみるのが手っ取り早い気がしますね。

それでは。