Emacsの設定をel-getベースにしました。

最近尋常じゃないくらい肩が痛く、そろそろ病院か整体に行っとかないとまずいんじゃまいか、というくらい痛い状態です。左肩だけというのがまた。多分姿勢が原因なんでしょう。やっぱ座椅子があかんのかねー。

さて、年に一回くらいの割合で、Emacsの設定を見直したくなってくるのですが、今年は早くもその時期が(個人的に)やってきました。モチベーションの元になったのは、emacs-jpでの、.emacs.dを晒している方々の議論を拝見してからでした。

元々の構成

この一年くらいは、.emacs.d以下はこんな構成になっていました。

  • auto-install
    • auto-installでインストールしたeslip
  • etc
    • 辞書など
  • init.d
    • 初期化ファイル
  • public_repos
  • site-lisp
  • local-lisp
    • ある特定用途のためのeslip

この構成になんでしたかはもはや覚えてないのですが、そもそも入れているelisp自体がやたらと多く、使っていないものなども含まれていました。また、初期化で利用するelispが複数箇所に分散しているなど、かなり問題のある構成になっていました。

今度の構成

今度の構成は、auto-installメインだった前回から、現在モダンとなりつつあるel-getベースとしてみました。

  • init.el
    • 初期化ファイル。初期load-pathの設定と、conf以下の初期ファイルの読み込み
  • conf
    • el-get.el
      • el-getの初期化ファイル。el-getのインストールと、基本となるパッケージの読み込み
    • exec-path.el
      • 内部で利用するexec-pathの設定
    • startup.el
      • init.d以下の初期化ファイルを順番通りに読み込む
    • site-lisp
      • recipeの無いelisp、自作パッケージ
    • init.d
      • 初期化ファイル群
    • init.d/el-get
      • el-getでインストールしたパッケージの初期化ファイル
  • el-get
  • recipes
    • 使用するpackageのrecipe

色々な方の.emacs.dを参考にして、こんな感じにしてみました。conf/init.d配下は、init-loader風の初期化ファイル配置にしていますが、簡単なinit-loader的なものをstartup.elで定義して使っています。一応、読み込み時に更新されていたら、読み込み後にバイトコンパイルするようにしてます。

このような構成にしたのは emacs -q -l init.el で環境が試せるような状態にするためです。実際、この構成にするためにファイルをかなり弄りましたが、その間元の.emacs.dから分離させて作業ができました。

しかし、こんな構成にして思いましたが、recipesの中身が妙に多いんですね。使うところでパッケージをインストールするようにしたらいいのかどうかがいまいち判断できないため、ほとんどのパッケージをel-get.elで読み込む羽目になっています。
また、色々なパッケージを入れているため、初期起動が半端なく長いです。大体10分くらいかかります。が、二回目以降はautoloadがかなり効くのか、以前よりも起動時間は短いくらいになりました。まぁ、一回設定が安定したらそうそう起動とかしたりしないんですが・・・。

el-getにしてみて

最初は、前の構成でel-getを利用しようとしてみましたが、なんか色々なものが干渉するのか、どうにもインストールが上手くいかず、これで頑張るくらいなら、そもそもel-getベースでやった方が早いんじゃね?ということで構成を一気に切り替えることにしました。
まだちょっと動作がわかっていないところはありますが、必要な場所でインストールしたりなどもできますし、el-getをgrepすれば、どこでインストールしているかも把握できるのが、やりかたを統一した利点、といったところでしょうか。
emacs版homebrewと言われることもあって、基本的にネット必須な点だけはどうしようもないので、もしネット環境の無いに行く必要があるならば、ちゃんと事前に一回は起動しておく、などやる必要があります。

どうでもいいですけど、こういう設定を見直したりするのって、現実逃避に最適ですよね。やらないとならんものが色々ありますが、いい感じに現実逃避できたので、見事に間に合わなさそうです。

ちなみに、今回の構成はhttps://github.com/derui/dot.emacs.dリポジトリとして置いてありますので、もし試したい方がいらっしゃればどうぞ御自由におためしください。多分そこまで弄り倒しているわけではないとは思いますが・・・。