.emacsなの? .emacs.elなの? init.elなの?

[.emacs Advent Calendar 2016](http://qiita.com/advent-calendar/2016/dot-emacs)初日です！ [Emacs Advent Calendar](http://qiita.com/advent-calendar/2016/emacs)ではありません！

--------

私は昨年[Emacsを起動する](http://qiita.com/tadsan/items/4f5743de21b7aa06ca35)といふ記事を書きましたが、みなさんもEmacsを起動しますよね。

## 初期化ファイルとは

Emacsの起動時に読み込まれるスクリプトのことです。

Emacsはコアの部分こそC言語ですが、テキストエディタとしての多くの機能はEmacs Lispで実装されてゐます。つまり初期化ファイルは単なる設定ではなく、ほかのEmacsの機能と同じようにテキストエディタを形作り一部分を実装することにほかならないのです──。

などとお題目はさておいて、公式マニュアルを読んでみます。

 * [GNU Emacs Manual: Init File](https://www.gnu.org/software/emacs/manual/html_node/emacs/Init-File.html)
 * [GNU Emacs日本語マニュアル: Init File](https://ayatakesi.github.io/emacs/25.1/Init-File.html)

いまは[ayatakesiさんの最新版のEmacs日本語マニュアル](https://ayatakesi.github.io/)があるからべんりですね ヾ(〃＞＜)ﾉﾞ☆

> Emacsを開始したとき、Emacsは通常、*初期化ファイル(initialization file)*、短くは*initファイル*から、Lispプログラムのロードを試みます。このファイルは、もし存在する場合は、Emacsをどのように初期化するかを指定します。Emacsはファイル名`~/.emacs`、`~/.emacs.el`、`~/.emacs.d/init.el`を使用してinitファイルを探します。これら3つのファイル名から、使用するものを選択できます([Find Init](https://ayatakesi.github.io/emacs/25.1/Find-Init.html#Find-Init)を参照してください)。ここで`~/`は、ホームディレクトリーを意味します。

要は`~.emacs`、`~/.emacs.el`、`~/.emacs.d/init.el`の順番に検索されるってことですね。問題は、このうち複数のファイルがあったときはひとつしか読み込まれないので、どれかひとつに決めておく必要はあります。

昨年も書いたことではあるのですが、実はこのみっつのファイルの**どれが推奨・非推奨**といったことはマニュアルにもソースコード中にも書かれてません。

## 表記について

[Emacs JP](http://emacs-jp.github.io/)コミュニティで2014年から毎週土曜22:00から開催されてる[init.el読書会](http://emacs-jp.github.io/reading-initel)は`init.el`の表記を採ってゐます。

「Emacsテクニックバイブル」などの著書やブログ「[新生日刊Emacs](http://emacs.rubikitch.com/)」やメールマガジン「[Emacsの鬼るびきちのココだけの話](http://www.mag2.com/m/0001373131.html)」で今なほ精力的に情報発信されてる[るびきち(@rubikitch)](https://twitter.com/rubikitch)さんは以下のような方針を採ってゐます。

> Emacs起動時に読み込まれる初期設定ファイルは
> `~/.emacs` や `~/.emacs.d/init.el` などがありますが、
> 本メルマガでは伝統的に「`.emacs`」と表記しています。
> 初期設定ファイルに書き加えることを「設定を加える」
> と表現しています。

**どっちでも意味は同じ**なので、みなさま好きなように<var>(ry</var>

ちなみに私は、るびきちさんに近い方式の両併記で記述してます(例: [auto-complete環境で補完の大文字小文字を区別する - Qiita](http://qiita.com/tadsan/items/ab3c3b594b5bf6203f02))。

> [![本文では`.emacs`と、コードブロックのファイル名には`.emacs.d/init.el`と書いてある](https://qiita-image-store.s3.amazonaws.com/0/4121/250ad2c3-d58b-4e7a-1d77-02e173d94cd2.png)](http://qiita.com/tadsan/items/ab3c3b594b5bf6203f02)

*ヾ(〃＞＜)ﾉﾞ.｡o( まったく気に留められてなささう… )*

## 結局どれがいいのさ

ここまで「どっちでもいい」と引っ張っておいて、私は**`~/.emacs.d/init.el`推し**です。

その理由としては**dotfilesの管理しやすさ**ですね。私の[.emacs.d/init.el](https://github.com/zonuexe/dotfiles/blob/master/.emacs.d/init.el)はEmacsを利用しはじめた頃からずっとGitHubに置いてあるのですが、`.emacs`や`.emacs.el`はホームディレクトリに置かなければならないのでシンボリックリンクを貼ったとしても`git commit`するためにはディレクトリ移動の手間があって[^1]管理が面倒くさいのです[^2]。一方で`.emacs.d/init.el`を編集した状態で`M-x magit-status`をすると、カレントディレクトリが`~/.emacs.d/`に移動した状態になってますので、そのままコミットができるので捗ります。

ちなみに私は`~/local/dotfiles`に`.emacs.d`やら`.zshrc`やら`.vimrc`やらやらを含めた[zonuexe/dotfiles: @zonuexe's dotfiles (.emacs, .zsh*, .profile... etc.)](https://github.com/zonuexe/dotfiles)を`git clone`してきて、`rake symlink`でシンボリックリンクを自動生成する方式を採ってます。

ちなみにこのファイルはMacBook、会社の開発サーバー、個人のVPSなどすべてのUNIXログイン環境で同じものを利用してます。コミットログとか綺麗な編集単位に拘るとめんどくさいので、特に重要な変更でもしない限りは「Update」としか書きません。他人のためのプロジェクトではなく自分が複数マシンで共有することが最優先のリポジトリなので、このぐらゐの雑さで良いのです ヾ(〃＞＜)ﾉﾞ

## あしたの`.emacs`アドベントカレンダーは？

おにぎりのアイコンでお馴染みの@g000001さんです！ ([#:g1](http://g000001.cddddr.org/)には豊富なLisp情報がありますが、なかでも私の好きな記事は[#:g1: MIT LOOPの紹介](http://g000001.cddddr.org/3628335600)です。並走中の[レトロ Lisp Advent Calendar 2016](http://qiita.com/advent-calendar/2016/retro-lisp)も楽しみ！)

ちなみにこのあとの私の`.emacs`アドベントカレンダー担当回では、もっとカジュアルな内容を書いていくつもりです ヾ(〃＞＜)ﾉﾞ

## 脚注

[^1]: ホームディレクトリ直下に`.git`を置いて丸ごと管理しようとしない限り
[^2]: ファイルを開いた時点で`default-directory`を変更するとかの方法もあるけど、それはそれでめんどくさくない？