Aqutras Members' Blog

株式会社アキュトラスのメンバーが、技術情報などを楽しく書いています。

Emacsの設定ファイルをinit-loaderを使ってきれいにした話

こんにちは。taniyuです。
前回、前々回に引き続き、またしてもEmacsのお話です。
今回は、巨大になりがちなinit.elをinit-loaderを使って分割することで、きれいにしたという話です。
ちなみに、前回、前々回のブログ記事は以下のようになっています。

前回:あると便利なEmacsのおすすめパッケージ 2選 - Aqutras Members' Blog

前々回:よく使っているEmacsの拡張 - Aqutras Members' Blog

はじめに

Emacsをお使いのみなさま。コーディングの効率を良くするために、様々な拡張を導入していると思います。
私も、10種類程度の拡張を導入し活用しています。また、既存の機能をより自分の好みに合うように、設定を記述しています。
拡張を導入したり、既存機能を自分の好みにカスタマイズするとどうしても、設定ファイル(init.el)の行数が長くなってきます。
すると、「ある機能の設定どこに書いたっけ?」といったような問題が発生します。そういった問題を解決するために、
init-loaderを導入して設定ファイルを分割した話になります。

init-loaderで分割管理

init-loaderとは

init-loaderは、名前の通りユーザが任意に指定したディレクトリの設定ファイルを読み込んでくれるものです。

github.com

導入は、package.elを使うことで簡単に導入できます。package.elは、Emacs24からデフォルトで導入されたものとなります。
Emacsが24より前の人は、下記のサイトを参考にすることで導入してください。

package.el - Emacs JP

続いて、初期設定になります。設定方法は非常に単純で、ほとんど上記のサイトからの引用となりますが、以下のように記述することで任意のディレクトリを読み込むようにできます。

(require 'init-loader)

(init-loader-load "設定ファイル群があるディレクトリのpathを記述")

また、init-loaderでは、設定ファイル名にルールがあり、xx_c-mode.el (xxは任意の二桁の数字)という風に書くことで、
数値の低い設定ファイルから読み込むようにすることができます。これにより、設定ファイルを読み込む順番を制御することができ、読み込み順序の依存関係にも対応できます。

init-loaderを使うと何が良いのか

続いて、init-loaderの利点になります。init-loaderを使うことで得られる恩恵としては、以下の様なものが挙げられます。

  1. 環境ごとの設定が楽にかける
  2. 分割することで分かりやすくなる
  3. 設定がおかしくなった時に、被害が小さくなる

1.環境ごとの設定が楽にかける

まず、環境ごとの設定が楽にかけるについてです。windowsやlinuxのように異なる環境でEmacsを使う際に、
windowsでは、この設定、linuxではこの設定みたいに分けたいことがあると思います。
init-loaderでは、そういう時に、ファイル名に環境を指定することができ、その環境時のみ設定を読み込むことができます。
具体的な指定方法については、上記のinit-loaderのサイトに記載しているため省略します。

2.分割することで分かりやすくなる

次に、分割することで分かりやすくなるについてです。これは、冒頭の部分でも説明しましたが、
拡張やmodeごとに設定ファイルを分けることで、必要な情報をすぐに参照することができます。

3.設定がおかしくなった時に、被害が小さくなる

最後に、設定がおかしくなった時に、被害が小さくなるについてです。Emacsを拡張する際によくある問題として、
ある設定を書いた際に、その設定にエラーがあるとエラーが起きた行から下の行の設定が反映されなくなるということがあります。
init-loaderでは、設定ファイルを分割することで、途中で失敗しても他の設定を読み込むことができます。これにより、
突然、Emacsがおかしくなるという問題が起きにくくなります。

実際に分割した結果

私自身の分割前のinit.elは、コメントの行も含めると、975行ありました。このため、「どこにどの設定を書いたか」、
「そもそも設定を書いているのか」といったことを調べるのが手間でした。しかし、分割後は、
導入した拡張やmodeに対して一つのファイルを対応付けるように設定を分けることで、長いものでも100行程度となり、
既存の設定の確認や変更が楽に行えるようになりました。

終わりに

init-loaderを使うことで、設定ファイルをきれいに、分かりやすくすることができます。
非常におすすめの拡張ですので、ぜひ導入してみてください。