Emacsの設定値を保持しておくための変数としてcustom-set-variablesが用意
されている。例えばpackage.elによりインストール済みのパッケージやテーマ
のシンボル、ログの表示方法など様々な環境に強く依存するような値が設定さ
れる。この値は通常.emacs.d/init.elに自動で挿入されるが、custom-file変
数を指定することで任意のファイルに出力するように変更でき
る。.emacs.d/init.elなどの設定ファイルをGitで管理する場合、このファイ
ルはリポジトリに登録するべきだろうか。おそらく登録しない人が多いだろう。
環境固有の値が含まれるのだから、他の環境に影響を与えないために各マシン
間で共有することはしない。では本当に環境固有の値なのかという点が気にな
る。例えばpackage-selected-packagesはpackage.elによってインストールさ
れたパッケージだが、=package-install-selected-packages= コマンドを用い
ると、この値を参照しインストールする。要求は人それぞれに異なると思うが、
インストールするパッケージは出来ればマシン間で同一であって欲しいためこ
の値は共有したい。一方で safe-local-variable-values
には.dir-local.elで
設定したシンボルと値がそのまま記録される。この値の中には隠しておきたい
ような値が含まれていることが多い。例えば秘密のプロジェクト名であったり、
公開していないAPIエンドポイントなどは隠しておきたい。設定ファイルは
Githubの公開リポジトリとしてホスティングしているため、このような値が混
入されると困ってしまう。理想的な状態としては
safe-local-variable-values
のみ独立したファイルに自動的に保存されて
欲しい。 Contents/Resources/lisp/custom.el.gz
を読んでみているが良い
方法は、まだ思いついていない。
仕方がないのでcustom-fileへの反映自体を行わないようにした。
(setq-default enable-local-variables :all)
しかしこれはとても乱暴な方法なので、もっと上手くやれたらとも思う。