cider-ns-refreshのタイミングでシステムを再起動したい
CIDERを利用している場合、cider-ns-refreshを使うと簡単に環境をリロードすることができる。
* CIDER 0.18.0になったときにcider-refreshがcider-ns-refreshにリネームされていることに注意
cider-ns-refreshについては以下の話を読むとよい。
ref. Emacs/CIDER で 5 倍快適 REPL リロードライフ
さて、リロードすることができるのはいいのだが、ComponentやIntegrantを利用している場合はそのタイミングでシステムを再起動したかったりする。紹介するのはそのための設定である。
一般にプロジェクト毎にComponentやIntegrantを利用していて、システムを起動させるための関数も違ったりするので、プロジェクト固有の設定にしたい。そこで利用するのが.dir-locals.elというわけ。
例えば、demo.coreというネームスペースを持つアプリケーションを作っていたとして、そこにシステムを起動/停止させる関数が用意してある場合、以下のように記述するとよい。
code:.dir-locals.el
((nil
(cider-ns-refresh-before-fn . "demo.core/stop-system!")
(cider-ns-refresh-after-fn . "demo.core/start-system")))
こうすることによって、cider-ns-refreshのタイミングでアプリケーションを再起動させることができる。
気をつけないといけないのは、Emacsの設定によってはディレクトリーローカル変数の利用を止めてしまっていることがあるので、そこにだけ注意。
詳細は以下を参照のこと。
Miscellaneous Features#Code reloading
#Emacs #CIDER #Clojure #ClojureScript