package.el を使って必要なパッケージを自動インストールする

最近のビルド ツールは使ってるライブラリの取得とかを全部やってくれて素敵!!ということで Emacs で使うパッケージも、使っているものは勝手に取得してくれるようにしてみました。

何に使うの?

家では Windows と Mac OS X、会社では Windows と環境がいろいろあって全部を同じ開発環境にするのは結構面倒です。なので EmacsZsh の設定ファイルは github で管理しています。

ここで問題になってくるのが Emacs などで使っている外部のパッケージです。
外部のパッケージを管理する方法としては次の方法が考えられると思います。

  1. 毎回手動でインストールする。
  2. 他の設定ファイルと同様に一緒にバージョン管理する。
  3. 足りていないものは自動でインストールされるようにする。

1. はとてもつもなく大変ですね。これまでは 2. でやってきました。大体は 2. で十分だと思います。ですがどうにもカッコ悪いです。

そこで、Emacs 24 から標準搭載された package.el に対応しているパッケージについては 3. の自動インストールができるようにしてみました。

package.el についてはすでに色々な方が書かれているのでそちらを参考にしてください。

やり方

以下のコードを Emacs の設定ファイルに書いてください。

「どのパッケージをインストールするか」だけは手動で設定する必要があります。

(require 'cl)

(defvar installing-package-list
  '(
    ;; ここに使っているパッケージを書く。
    undo-tree
    igrep
    grep-a-lot
    auto-complete
    goto-chg
    google-c-style
    ))

(let ((not-installed (loop for x in installing-package-list
                            when (not (package-installed-p x))
                            collect x)))
  (when not-installed
    (package-refresh-contents)
    (dolist (pkg not-installed)
        (package-install pkg))))

これを設定すると、installing-package-list に書かれているパッケージのうち、インストールされていないものを Emacs の起動時に自動でインストールしてくれるようになります。

おわりに

ちょっと家でがんばってみたんですが、うちの会社では Emacs が http proxy を超えてくれなくてこの設定が使えてないです。

package.el 自体は http proxy を使っている環境でも使えるようなので、うちの会社だけの問題だと思いますが。