Emacs
AdventCalendar2015
.emacsDay 20

init.elのスリム化を目指す (Part1)

More than 1 year has passed since last update.


はじめに

この記事は.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ライフに少しでもお役に立てれば幸いです。