ワシはワシが育てる

週刊少年ジャンプと任天堂のゲームが三度のメシより好きです。

Rakeタスクをライブリロードする

Railsアプリの資産を活かしたまま、ウェブサイトのクロールなど自動化したい処理を書くにはrakeタスクが便利です。

rspecのように自動更新したままタスクを書いていけると効率的ですね。

guard-rakeという専用のgemがあるのですが、taskを変更した際に実行されるものの、中身が更新されなかったので、今回紹介するのは別の手法です。
※rakeファイルがオートロードされていないとか別の原因がある気がします

guard-shellというgemを使って、ファイルの変更を検知したらコマンドラインを操作してもらいます。

# gemに以下を追加
gem 'guard-shell'

# Guardfileに以下を追加
# guard init shellで自動でひな形が作成されますが今回は自分で書きます
guard :shell do
  watch 'lib/tasks/hogehoge.rake' do
    `rake hogehoge`
  end
end

watchに変更を検出したいファイル、「``」にコマンドを入力します。
コーテーションで囲うとそのままターミナルに文字が出力されるだけなので注意。

基本的にはこれだけでOKですが、より素早く更新したい場合はspringなどのライブラリを別途使うとよいでしょう。

guard :shell do
  watch 'lib/tasks/hogehoge.rake' do
    `spring rake hogehoge`
  end
end

と先頭にspringを追加してあげれば、驚くほど素早く実行されます。