init-loaderって必要なの? ほんとに?

こんにちは、あなたのEmacsを起動する[.emacs Advent Calendar](http://qiita.com/advent-calendar/2016/dot-emacs)です。みなさまはどうやってEmacsを起動してますか？

本日はinit-loaderを**利用しなくなった**話をします。「init-loaderが良くない！」って主張ではなく、「めんどくささを感じたのでやめましたよ」ってだけの話です。

現在のファイルはこちら https://github.com/zonuexe/dotfiles/blob/master/.emacs.d/init.el

## init-loaderとは何か

[init-loader](https://github.com/emacs-jp/init-loader)は、ディレクトリにある複数の`.el`ファイルを順に読み込むことができるツールです。init-loaderの利点を説明したblog記事はいくつもあるのですが、[init-loader:init.elを分割で得られる7つの恩恵](http://emacs.rubikitch.com/init-loader/)や ~~[Emacsの設定ファイルをinit-loaderを使ってきれいにした話 - Aqutras Members' Blog](http://blog.aqutras.com/entry/2016/07/14/210000)~~ がわかりやすくまとまってます。

## init-loaderとtadsan氏

じつは、[.emacs Advent Calendar 2013](http://qiita.com/advent-calendar/2013/dot-emacs)の初回に書いた[ぼくの.emacs 2013](http://qiita.com/tadsan/items/c4a80f46623ea266f5c5)の時点では`init-loader`を使ってました。

この頃は当時の`~/.emacs.d/init.el`は[zonuexe/.emacs.d](https://github.com/zonuexe/.emacs.d)からご覧いただけます。この頃の私は[conf/](https://github.com/zonuexe/.emacs.d/tree/master/conf)ディレクトリに小さな`.el`ファイルを作り、`init-loader`で順にロードする思想だったことが観察できます。

しかしこのリポジトリは2013年末から開始して2014年9月頃に抛棄してしまったようです。

## kawabataさんの`init.el`

2014年に[(kantou-emacs #x01) #関東Emacs](https://atnd.org/events/54734)でお会ひした川幡さん(@kawabata@github /[GitHub: @kawabata](https://github.com/kawabata))の`init.el`は衝撃でした。[emacs-zsh-history](https://github.com/kawabata/emacs-zsh-history)の実装に利用されたCCLを使ったロストテクノロジーによる謎テクニック(本人による解説：[Emacs で zsh の ヒストリファイルを閲覧・編集する - A Riddle Wrapped in a Mystery](http://kawabata.github.io/blog/2013-03-17-zsh-history.html))も圧巻でしたが、[init.el](https://github.com/kawabata/dotfiles/blob/master/.emacs.d/init.el)のライブコーディングもそれに匹敵する衝撃でした。

この`init.el`は1ファイルだったのです。──モダンな`.emacs`ファイルは複数分割される。そのような誤解すらもあったのかもしれません。その年末に書いた[ぼくの.emacs 2014](http://qiita.com/tadsan/items/3d3f5d8c6ec24c324963)では<q>殴られたような衝撃</q>とまで表現してます。

## 複数ファイルの複雑さ

たしかに、それ以前から複数ファイル構成に煩しさを感じてたことは確かです。

 1. ファイルのロード順の変更がめんどい (ファイルのリネームが必要)
 2. 設定変更時に別ファイルを開き直すのがめんどい
 3. 連番の管理や「帯域[^1]」の記憶がめんどい
 4. 複数の言語やパッケージにまたがる設定をどこに書くか悩みが生じる
 5. 設定の加除によって「コメントしかないファイル」が生まれる

挙げれば不満はいくつも出てきます。そうです、複数ファイルが開けて嬉しいことなど私にとっては全然なかったのです。

`27-php.el`にPHP向けの設定を書けばわかりやすい……？ いや、別に`init.el`を開いて<kbd><kbd>C</kbd>-<kbd>s</kbd></kbd>とかswoop[^2]とかで`php`って検索すれば一発で飛べるんじゃね？ ([imenu](https://ayatakesi.github.io/emacs/25.1/Imenu.html)[^3]でもいいよ)

かくして悩みを振り切って`init-loader`を捨てて1ファイルの`.emacs`に走ったのでした。kawabataさんほどの藝術性はありませんし、実のところそんなに一貫性もありませんが、たくましい子に育ちました。

## 私とEmacsと頻度

1ファイルにしてから頻繁に`init.el`開くようになったよなー と思ったので集計してみた。……むらはあるものの、今年に入ってから2〜3日に一度以上は更新してるペースですね。仕事中でも、~~忙しいときほど~~自分の行動に疑問を持ったらさくっとEmacsの設定を直してる自覚はあります。

```
% git log --date=short --pretty='%cd' init.el | cut -d- -f1,2 | uniq -c
   1 2016-12
  14 2016-11
  12 2016-10
   6 2016-09
  10 2016-08
   8 2016-07
  18 2016-06
  18 2016-05
  10 2016-04
   8 2016-03
   8 2016-02
   6 2016-01
   5 2015-12
  19 2015-11
  19 2015-10
  14 2015-08
   8 2015-07
  16 2015-06
   6 2015-05
  11 2015-04
   7 2015-03
   9 2015-02
   9 2015-01
   6 2014-12
   8 2014-11
```

## あとがき

生真面目にファイルを分けてちまちま管理するだけじゃなくて、1ファイルで雑にやっていく道もあるんだよ、ってことを選択肢に入れていただければ幸甚ですね ヾ(〃＞＜)ﾉﾞ

## 脚注

[^1]: ここでは、「0〜9はEmacs環境全体の初期化」「10番台はコーディングの基盤になる補助ライブラリ／フレームワークの設定」「20番台は各種プログラミング用モードの設定」「90番台は依存関係を持たないアプリケーションの設定」などと、大まかな役割に分けてファイルを分割すること。
[^2]: [Emacsバッファ内高速ナビゲーションSwoop.elを作りました。 - Web学び](http://fukuyama.co/emacs-swoop)
[^3]: [imenu.el の使い方と応用 — ありえるえりあ](http://dev.ariel-networks.com/Members/matsuyama/imenu/) [i-mode](https://ja.wikipedia.org/wiki/I%E3%83%A2%E3%83%BC%E3%83%89)の公式メニューでゎなぃ