init-loader 20160528.615(in MELPA)
Loader for configuration files

概要

Emacsを長く使っていくと、
どうしてもinit.elが長くなってしまいます。

そこで提案するのがinit.elを分割することです。

メリットは7つあります。

  1. 管理が容易になる
  2. 設定を加えたときの動作確認が楽になる
  3. 分割されたファイルのみで動作確認できるようになる
  4. 設定を加えるのは新しいファイルを作成するだけ
  5. 設定を外すのはファイルをリネーム・移動するだけ
  6. OS・プラットフォームごとの設定が書ける
  7. 関数は別ファイルに分けてからバイトコンパイルすると起動が早くなる

このinit-loader.elは
特定のディレクトリに定められた
ファイル名で配置するだけで、
自動的に読み込んでくれます。

とても楽に管理できますので、
僕も長年愛用しています。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてinit-loaderを使う方は
以下のコマンドを実行します。

M-x package-install init-loader

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name init-loader

使い方

ディレクトリ ~/.emacs.d/inits/ 以下に
数字2つから始まる.elファイルを配置します。

たとえば、

  • 00_util.el
  • 01_ik-cmd.el
  • 21_javascript.el
  • 99_global-keys.el

のように。

上記のファイル名は数字の後に
「_」を入れていますが、
なくても構いません。

init-loader.elは数字の順番に
設定を読み込んでいきます。

初めて使うには以下の手順を踏みます。

  1. mkdir ~/.emacs.d/inits を実行してディレクトリを作成する
  2. mv ~/.emacs.d/init.el ~/.emacs.d/inits/50_init.el でinit.elを移動する
  3. init.el を以下の内容にする
(package-initialize)
(init-loader-load)

あとは 50_init.el を順番に
分割していってください。

最初は粗く、だんだんと細かく
分割していくといいです。

これはEmacsのinit.elを抜本的に改革しますので、
時間をかけてゆっくり行ってください。

同時にEmacs全体の見直しになります。

不要な設定を除去する
「断捨離」「デトックス」
の効果があります。

それにより、
Emacsがすっきりして
安定稼働するようになります。

OS(プラットフォーム)ごとの独自の設定ファイル

init-loader.elはプラットフォームごとの
設定も書けるようになっています。

以下のファイルはデフォルトのファイル群
(数字2つから始まる)を読み込んだ後で読み込まれます。

プラットフォーム プレフィクス
Windows `windows-` windows-fonts.el
Windows (Meadow) `meadow-` meadow-commands.el
Mac OS X (Carbon Emacs) `carbon-emacs-` carbon-emacs-applescript.el
Mac OS X (Cocoa Emacs) `cocoa-emacs-` cocoa-emacs-plist.el
GNU/Linux `linux-` linux-commands.el
CUI環境 `nw-` nw-key.el

関数と設定を分ける案

init-loader.elで分割されたファイルを
バイトコンパイルすると管理が面倒になります。

そのため、デフォルトでは
バイトコンパイルしないようになっています。

というか、バイトコンパイルはおすすめしません。

なぜなら、
一度だけ実行されるただの設定を
バイトコンパイルしても
速度の向上は得られないからです。

そこで、僕は関数のみを ~/.emacs.d/inits/
以下でmylisp-をプレフィクスしたファイル名で配置し、
バイトコンパイルしています。

たとえば、以下のように

  • mylisp-org.el
  • mylisp-anything.el

設定ファイル群からは

(require 'mylisp-org)

のように読み込んで使っています。

設定ファイル群には極力関数定義を書かずに、
add-hookやsetqなどの設定の記述にとどめておきます。

この管理法ならば、
バイトコンパイルによる速度と、
管理の容易さを両立できます。


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。