背景 アプリケーションの中で一度だけ行いたい初期化・終了処理を書くことはよくあります. 例えば,データベースへの接続や外部リソースの初期化などです. Clojureプログラムにおいて,このような初期化・終了の処理というのは意外と面倒です. 普通に走るプログラムであれば -main 関数などの開始時・終了時に処理を書けばよいのですが,ClojureプログラムはREPL環境で開発される場合が多いので,そうもいきません. 例えば,データベースへのハンドラを管理する場合を考えてみましょう.アプリケーションの開始時にコネクションを作成し,終了時に開放するとします.一番簡単なのは,varに束縛してしまうことです. (def conn (create-db-conn)) (defn foo [] ;; connを使う ) しかし,これだとconnの解放のタイミングがよくわかりません.REPLのセッション