ざる魂

真似ぶ魂、学ぶの本質。知られざる我が魂

.emacsに必要なpackage を指定して自動で各種elispをインストールする

今までパッケージ管理には el-get を使用してきたのですが、 Windows環境がメインだと git clone がうまくいかなかったり、 インストール後のビルド工程が失敗したりで、なかなか難儀していたので、 el-getを辞めemacs標準の package.el をメインにすることにしました。

package.el ならば標準装備ですし、サイトリポジトリに各所のelispがダウンロードされた状態なので httpですべてインストールできるので大抵の環境でうまく動きます。

パッケージのリポジトリサイトとしては、昔はMarmaladeが更新が盛んだったのですが、 最近ではMELPAがメインになってきてるようです。なので私は、MELPAメインで使用してます。 Marmaladeは無効にしています。理由は同じパッケージが同時に表示されてしまうからです。

以下は私の設定です。

(require 'mikio-util)

(when (require 'package nil t)

  ;; Marmalade
  ;; (add-to-list 'package-archives
  ;;              '("marmalade" . "http://marmalade-repo.org/packages/"))

  ;; MELPA
  ;; (add-to-list 'package-archives
  ;;              '("melpa" . "http://melpa.milkbox.net/packages/") t)

  ;; MELPAのみにする。
  (setq package-archives (list '("melpa" . "http://melpa.milkbox.net/packages/")))

	

  ;;インストールするディレクトリを指定
  (setq my-package-directory (mikio/elisp-home "package"))
  (mikio/make-directory my-package-directory)
  (setq package-user-dir (concat my-package-directory "/"))

  ;; 
  (package-initialize)

  (setq my-packages
        '(undo-tree
          helm
          auto-complete
          popwin
          smartrep
          color-moccur
          yasnippet

          helm-git
          helm-gtags
          helm-c-moccur
          helm-c-yasnippet

          paredit
          ruby-mode
          php-mode
          js2-mode
          web-mode

          nrepl
          nrepl-ritz
          ac-nrepl
          ;;ac-slime
          magit

          jaunte
          rainbow-delimiters

          ;; window manager by kiwanami
          window-layout
          e2wm

          twittering-mode
          ;;o-blog

          evil
          ))

  (require 'cl)
  (mapcar (lambda (x)
            (when (not (package-installed-p x))
              (package-install x)))
          my-packages)
)

(provide 'mikio-package)

githubはこちら。

こうすることによって、環境が変わってもemacs起動時に自動的にインストール してくれるので楽チンです。

2013/05/13 追記1:

MELPAリポジトリは、常に最新のパッケージを取得してしまうためアップグレードする際は注意が必要です。 Uコマンドなどで間違ってアップグレードしてしまっても多分もとに戻せません。 一方Marmaladeリポジトリの場合、 自分のローカルPCに過去のバージョンの履歴が残っている可能性があるので、 ダウングレードする道があります(手順は知りませんが)。

2013/05/13 追記2:

本文では、gitプロトコルでel-getが失敗すると書きましたが、下記の方法を試せば問題ないかもしれません(未検証)。

2013/05/13 追記3:

el-getも全く使用していないというわけではなく、EmacsWikiなどhttp通信するものに関しては使用しています。