Railsでバッチ処理を書く場合、rakeタスクとrails runnerのどちらにすべきか
Railsでバッチ処理を書く仕事があって、どちらにするべきか迷った。 迷ったのでググったら以下の記事を見つけた。
要約すると
script/runner
は実行時にRailsアプリを起動する。これはrake
の:environment
と似ている- Railsの起動は時間が掛かるので避けられるならrakeにして避けるべき
- それ以外はほぼ同等
ということなので、Railsのモデルを使うバッチはrunnerで、それ以外はrakeにする方が良さそう。
個人的には、
-e
で環境を指定できる- クラスのメソッドを直接呼べるのでテストが書きやすい(rakeだと結局処理を別のクラスに起こさなければいけない)
という点からrails runnerを使うことにした。