はじめに
この記事は.emacs Advent Calendar 2015の20日目の記事です。
Emacsを使い始めたころは、よくわからないこともあってinit.elに設定のすべてを書き入れていましたが、
次第に修正しづらくなり、「ああ、このままだと詰むな」と思い、スリム化を図ることにしました。
何をしたか
スリム化を図るため、下記パッケージを使用しました。
- package.el
- init-loader.el
これらの組み合わせは下記でも紹介されていますね。
- init-loader.el と package.el を導入して快適 Emacs ライフ - Qiita
- package.elとinit-loader.elの同時利用での問題にハマった - $shibayu36->blog;
私は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)))
このアプローチによって、以下の流れを取ることができるようになりました。
- git clone http://myrepos.git
- Emacsを立ち上げる
- 不足しているパッケージを勝手にダウンロードしてくれる
- コーヒーを飲み終わったころには、環境が整っている
- EmacsでASP.NET 5は最高 (後日、場を改めてご紹介します)
スリム化は何をもたらしたか?
私はこのスリム化を以下のように評価しています。
Pros.
- ELPAパッケージをgitで管理しなくて良いため、リポジトリサイズを抑えられる
- リポジトリサイズを抑えられるため、git cloneの所要時間が抑えられる
- ロジックボードが焼けてMacがぶっ壊れても、別のMacでEmacs環境を容易に復元できる
- コードが追いやすくなった
Cons.
- Emacs初回起動時にELPAパッケージをインストールするので、時間がかかる
- ELPAからパッケージが消えると、このアプローチでは復元できない
まとめ
いかがだったでしょうか。
皆様がご存知の通り、Emacsはスマートフォン、タブレットと同様に生活必需品の1つであります。
本エントリーが読者様のEmacsライフに少しでもお役に立てれば幸いです。