emacs の elisp 達を el-get で管理する

他にも el-get を扱った記事はあるので今更感もあります。
しかし Vim の bundle/neobundle に比べて
「これを使えば間違いない」といったものが無いので、
自分の使い方に一番あっている el-get を今一度紹介してみたいと思います。


参考

Vim の bundle の良いところはなんといっても
「設定ファイルの内容から必要なプラグインを自動的にインストールする」ところだと思っています。
必要な拡張をまとめて記述しておくことで
* github などから最新の状態(指定のリビジョン)のソースを取得することが可能
* コマンドによってそれらの最新化(git pull)も可能
これにより複数の環境で共通のエディタ環境を構築することが容易になります。
メリットとしてコマンド一発インストールできる点もありますが、
このメリットはプラグインを試すときなどに限定された副次的なものでしょう。


さて、Vim の neobundle では以下のように設定ファイルへ記述しておきます。

NeoBundle 'git://github.com/Shougo/neobundle.vim.git'
NeoBundle 'git://github.com/Shougo/neocomplcache.git', 'ver.7'

シンプルですね。
github 上のリポジトリをしているするだけです。
カンマ区切りでブランチの指定も可能です。
こういったプラグイン管理のプラグインが使いやすく充実していることは
VimEmacs に対する大きなアドバンテージでしょう。


一方で Emacs の現状はどうでしょう。
個人的には、と付け加えておくと、
最新かわからないソースの置かれた Emacs Wiki からインストールする気は起こらず、
インストールされた elisp の更新や管理はほぼ不可能です。
また、elisp に頼らず git submodule を使って各リポジトリを取り込んで管理するのは面倒です。


この問題を Vim の bundle に近い形で解決してくれるのが el-get です。
必要な elisp の記述方法は簡単な場合、

  (setq el-get-sources
        '(
          (:name anything
           :after (lambda ()
                          (define-key global-map (kbd "C-;") 'anything)
                          以下設定 ))))

となります。
あらかじめレシピとして各 elisp に対応したリポジトリの情報が記録されているため、
必要な elisp の名前と読み込み後の設定を after 以後に書くだけで使えるようになります。


また、レシピに存在しない elisp を使いたい場合は、

          (:name auto-complete
           :url "http://cx4a.org/repo/auto-complete.git"
           :after (lambda () 以下設定 ))

のように名前と URL を指定します。
簡単ですね。


el-get 自体のインストールは

  ;; el-get インストール後のロードパスの用意
  (add-to-list 'load-path "~/.emacs.d/el-get/el-get")
  ;; もし el-get がなければインストールを行う
  (unless (require 'el-get nil t)
    (url-retrieve
     "https://github.com/dimitri/el-get/raw/master/el-get-install.el"
     (lambda (s)
       (let (el-get-master-branch)
         (end-of-buffer)
         (eval-print-last-sexp)))))
  (require 'el-get)

などのようにしておくと気持ち悪いくらい勝手にインストールしてくれます。


el-get がインストールされると、
次回起動時や el-get-install などのコマンドを実行すると
非同期に git pull などが行われていきます。
つまり init.el などに el-get 自体の設定と必要な elisp の情報を記載しておけば、
まっさらな状態から初回起動時に el-get がインストールされ、
面倒な場合さらに Emacs を再起動すると elisp のインストールも行われます。
elisp の更新も el-get-update-all で一発です。
複数のマシンや環境で Emacs を使っているのなら便利でしょう。


もし時間と elisp 記述力が許せば

(bundle hogehoge)

のように記述可能な elisp 管理プラグインを作りたいところですが、
現状は上記のような理由で el-get で満足しています。


el-get の設定方法と言うよりは、
何が便利なのか、に焦点を当てて記事を書きましたが
elisp の管理でしっくりこない方は試されてはいかがでしょうか?

*1

*1:それにしても Vim の記事の次が Emacs とは節操ない