Railsでバッチ処理を書く場合、rakeタスクとrails runnerのどちらにすべきか

Railsバッチ処理を書く仕事があって、どちらにするべきか迷った。 迷ったのでググったら以下の記事を見つけた。

stackoverflow.com

要約すると

  • script/runner は実行時にRailsアプリを起動する。これは rake:environment と似ている
  • Railsの起動は時間が掛かるので避けられるならrakeにして避けるべき
  • それ以外はほぼ同等

ということなので、Railsのモデルを使うバッチはrunnerで、それ以外はrakeにする方が良さそう。

個人的には、

  • -e で環境を指定できる
  • クラスのメソッドを直接呼べるのでテストが書きやすい(rakeだと結局処理を別のクラスに起こさなければいけない)

という点からrails runnerを使うことにした。