概要
Sinatraを何度か使っているのですが当たり前のように変更して再起動して...を繰り返していたのですが、ある時これ変えられないのかな?と思って調査したのでその報告です。
【余談】
変更自動反映ってホットリロードではないしオートリロードという言葉もちょっと違う気もして...良いフレーズありますかね🤔
選択肢
変更自動反映の方法を調べると下記のような選択肢がありました
- Sinatra::Reloader
- shotgun
それぞれの動きの話と、なぜその上でshotgunが良いのかお話したいと思います
Sinatra::Reloader
こちらは文字通りファイルを変更したら反映されるものになってます。
使い方
Gemfileに下記を追加
gem 'sinatra-contrib'
app.rbファイルに
require 'sinatra/reloader'
を追加する。
以上!!
これでapp.rbで変更を加えると再起動しなくてもリロードすると変更が反映されてます。
ただ、app.rbで外部のファイルをrequireで呼び出している場合、そちらのファイルを変更しても自動反映されません。
shotgun
こちらも文字通りファイルを変更したら反映されるものになってます。
使い方
Gemfileに下記を追加
gem 'shotgun'
既存ファイルへの変更無し。
起動時に
bundle exec ruby app.rb
となっているところを、
bundle exec shotgun app.rb
というように起動する。
以上!!
これでapp.rbで変更を加えると再起動しなくてもリロードすると変更が反映されてます。
更に、app.rbで外部のファイルをrequireで呼び出している場合、そちらのファイルを変更しても自動反映されます!!!!
なぜshotgun??
上記で軽く記載したのですが、shotgunは読み込んでいるファイルを変更してもちゃんとそれが反映されるんですよね。
ほんとにこれがありがたい。
自分の場合クロールする処理を別ファイルでクラスとして用意してそれを呼び出す形にしているので、これがあるととてもありがたい...
まとめ
ほんとに簡単なapp.rbにしかロジックを書かないのであればよいのですが、そうでない場合はshotgunを入れておいたほうが幸せなのではないでしょうか?