開発中は reloader を使うべし

mochiweb に付属の reloader を使うと、更新のあった module を再読み込みしてくれるので、デバックの手間が少し減る。

source の中身

gen_server として常駐する。
timer:send_interval/2 を使って自分自身に一秒間隔でメッセージ doit を送る。
doit を受信すると、code:all_loaded/0 でロード済みモジュールの一覧を取得し、更新があるモジュールは、code:purge/1 して code:load_file/1 している。
更新の判定は、file:read_file_info/1 で beam ファイルの情報を取得して、前回のチェック日時より新しければ更新ありと判定している。

使い方

単純な gen_server なので、reloader.beam がカレントディレクトリに存在するなら下記の通り。

% erl -s reloader

reloader.erl がカレントディレクトリに存在するなら下記の通り。

% erl
1> c(reloader).
2> reloader:start().

あとは、ロード済みの module が更新される度に再読み込みしてくれる。
id:cooldaemon:20071021 の例くらいであれば恩恵を感じないが、ロードしているモジュール数が多いプロジェクトであれば、その恩恵を感じられる。

ライセンス

mochiweb は MIT ライセンスなんだけど・・・reloader も MIT ライセンスだよね?

Mochi Media, Inc.

Mochikit はじめ、Mochi Media, Inc. 製の code は追ってて楽しい。設計が美しく勉強になる。