公式サイトの FAQ によると、 rerun を使う方法が推奨されている。
rerun 'ruby app.rb'
rerun はファイルの更新を検知してプロセスを再起動するツールで、要は guard みたいなもの。 Guardfile
のような設定ファイル不要なので手軽に使える。
Sinatra の自動リロード用ツールとしては Sinatra::Reloader が有名だが、 FAQ では推奨されていない。
なぜ Sinatra::Reloader は推奨されていないのか
FAQ は「in-process のコードリロードは難しく、あらゆる状況で動作する解決策は無いので、 out-of-process リロードを推奨する」といっている。
rerun や guard はプロセスを再起動するので、 out-of-process リロードためのツールといえる。一方 Sinatra::Reloader は in-process リロードのためのツールといえる。
公式サイトの立場では、問題が起こる可能性の少ない手法を勧めているのだろう。
rerun を使う場合の注意点
プロセスを再起動するため、ファイル保存からサーバ再起動完了までに若干のタイムラグがある。
アプリケーションが重厚になると起動時間が伸びるので、開発体験を損なう可能性がある。
タイムラグが許容範囲を超える規模のアプリケーションを開発する場合は、 Sinatra::Reloader を検討すべきかもしれない。