Chapter 05

便利ライブラリへの依存を見直す

zk_phi
zk_phi
2020.09.24に更新
このチャプターの目次

Emacs Lisp には cl-lib をはじめ、便利関数をまとめたライブラリが色々あります。これらを使うことで設定ファイルをスマートに書くことができますが、ロードはもちろん無料ではありません。

マクロだけに依存する init.el

各種便利ライブラリを使うとき、「使うのはマクロだけにとどめる」ことを意識すると起動の高速化になります。たとえば cl-lib で定義されている cl-case は関数ではなくマクロですが、一方 cl-every は関数です。マクロはコンパイルの時にマクロを使わない形の式に展開されるので、一度コンパイルしてしまえば、起動時にそのマクロが定義されている必要はありません。

依存をマクロだけにすることができると、

(require 'cl-lib)

を以下のように書き換えて、

(eval-when-compile
  (require 'cl-lib))

ロードをコンパイル時に限ることができます。これによって便利マクロたちを実質無料で使用することができ、起動は当然速くなります。

あるシンボルが関数なのかマクロなのか調べたい場合は、 M-x describe-function が便利です。


注:「起動時にロードしたいパッケージ」の中に cl-lib (など) の関数に依存しているものがあれば、せっかく頑張って init.el から依存を消したところで結局 cl-lib はロードされてしまいます。どのパッケージがどのパッケージに依存しているかは、次の章に紹介する方法で解析できます。