はじめに

この記事は.emacs Advent Calendar 2015の20日目の記事です。

Emacsを使い始めたころは、よくわからないこともあってinit.elに設定のすべてを書き入れていましたが、
次第に修正しづらくなり、「ああ、このままだと詰むな」と思い、スリム化を図ることにしました。

何をしたか

スリム化を図るため、下記パッケージを使用しました。

  • package.el
  • init-loader.el

これらの組み合わせは下記でも紹介されていますね。

私はinit.elを以下のように書き換え、前述のパッケージを使うようにしました。

init.el
(defconst hp-inits-dir (concat user-emacs-directory "inits"))
(defvar hp-melpa-url "http://melpa.milkbox.net/packages/")
(defvar hp-marmalade-url "http://marmalade-repo.org/packages/")
(defvar hp-use-package-list
  '(
    ;; 以下に使用するパッケージを記述する
    init-loader
    scala-mode2
    yasnippet
    auto-complete
    foreign-regexp
    web-mode
    js2-mode
    csharp-mode
    cmake-mode
    helm
    ruby-mode
    ruby-additional
    ruby-block
    org-tree-slide
    )
)

;;; パッケージ
(require 'package)
(add-to-list 'package-archives (cons "melpa" hp-melpa-url))
(add-to-list 'package-archives (cons "marmalade" hp-marmalade-url))
(package-initialize)

;;; 未インストールのパッケージを探す
(require 'cl)
(let ((not-installed 
       (loop for x in hp-use-package-list
             when (not (package-installed-p x)) collect x)))
  (when not-installed
    (package-refresh-contents)
    (dolist 
        (pkg not-installed)
        (package-install pkg))))

;;; 各パッケージの設定ファイルはinits以下に置く.init-loaderがそれを読み込む
;;; ファイル命名規則が存在する (例 : 10-hoge.el)
(when (require 'init-loader nil t)
  (setq init-loader-show-log-after-init 'error-only)
  (when (file-directory-p (symbol-value 'hp-inits-dir))
    (init-loader-load hp-inits-dir)))

このアプローチによって、以下の流れを取ることができるようになりました。

  1. git clone http://myrepos.git
  2. Emacsを立ち上げる
  3. 不足しているパッケージを勝手にダウンロードしてくれる
  4. コーヒーを飲み終わったころには、環境が整っている
  5. EmacsでASP.NET 5は最高 (後日、場を改めてご紹介します)

スリム化は何をもたらしたか?

私はこのスリム化を以下のように評価しています。

Pros.

  • ELPAパッケージをgitで管理しなくて良いため、リポジトリサイズを抑えられる
  • リポジトリサイズを抑えられるため、git cloneの所要時間が抑えられる
  • ロジックボードが焼けてMacがぶっ壊れても、別のMacでEmacs環境を容易に復元できる
  • コードが追いやすくなった

Cons.

  • Emacs初回起動時にELPAパッケージをインストールするので、時間がかかる
  • ELPAからパッケージが消えると、このアプローチでは復元できない

まとめ

いかがだったでしょうか。
皆様がご存知の通り、Emacsはスマートフォン、タブレットと同様に生活必需品の1つであります。
本エントリーが読者様のEmacsライフに少しでもお役に立てれば幸いです。