nREPLサーバをClojureアプリケーションに組み込んでおくと、動作中のClojureアプリケーションに接続して、デバッグを行ったり、動作を書き換えたりすることができます。
試しに、デスクトップGUIアプリケーションを動的に書き換えてみます。
Clojureからは、JavaのSwingを直接利用できますが、せっかくなので、よりClojureっぽく書けるSeesawを使ってみます。
project.cljは以下のとおり。
アプリケーションのコードは以下のとおり。
6行目でnREPLサーバを起動しています。
アプリケーションを起動
以下のようなウィンドウが表示されます。
「Show Message」ボタンを押すとメッセージが表示されます。
このアプリケーションにnREPLクライアントで接続し、動作を書き換えてみます。
nREPLクライアントとして、nrepl.elを利用する場合、Emacs内で以下のコマンドを実行します。
1
2
3
| M-x nrepl
Host: 127.0.0.1
Port: 7888
|
Portで指定するのは、アプリケーション中のstart-serverで指定したポート番号です。
以下のようにnREPLプロンプトが表示されます。
表示されるメッセージを変化させてみます。
1
2
| user> (in-ns 'nrepl-test.core) ;namespaceセット
nrepl-test.core> (def msg "Changed Message.") ;msgを再定義
|
ボタンを押すと、メッセージが変化します。
ログ機能を付けてみます。
1
2
3
4
| nrepl-test.core> (let [old show-msg-actn]
(defn show-msg-actn
[e]
(println "LOG: show-msg-actn") (old e))) ;show-msg-actnを再定義
|
ボタンを押すと、コンソールにログが表示されるようになりました。