Just do IT

思うは招く

Rails で rake タスクを作成・実行する

Railsでrakeタスクを作り、実行する手順

まず、適当なRailsアプリを作る。そしてコマンドラインで以下を実行する。

#適当なタスクを生成する
$ rails g task task_sample

生成されたファイルを見るとネームスペースができており、この中にタスクを実装する。

namespace :task_sample do
~
end

サンプルタスクを書く。

namespace :task_sample do
  desc "タスクの説明をここに書く"
  task :sample do
    puts "ワイやで!"
  end
end

タスクを実行するコマンドは、以下で確認できる。

#使えるRailsコマンドを一覧する
$ rails -T

#いろいろズラッとコマンドが並ぶ
#さきほど作ったタスクが表示されている
rails task_sample:sample  # タスクの説明をここに書く

実行する。

$ rails task_sample:sample
ワイやで!

タスクが実行できた。

DBのデータを使って処理をしたい場合

:environmentを追加する。

namespace :task_sample do
  desc "タスクの説明をここに書く"
  task :sample do
    puts "ワイやで!"
  end

  #追記
  desc "DBに接続する場合"
  task user_model: :environment do
    User.find_each do |user|
      puts "#{user.name}やで!"
    end
  end
end

ただし、DBのデータを使って処理をしたいケースは多々ある。いちいち:environmentと書くのは面倒。

そんな場合、require "#{Rails.root}/config/environment"を記述することで、いちいち:environmentを書かなくて済む。

#追記
require "#{Rails.root}/config/environment"

namespace :task_sample do
  desc "タスクの説明をここに書く"
  task :sample do
    puts "ワイやで!"
  end

  #:environmentは削除
  desc "DBに接続する場合"
  task :user_model do
    User.find_each do |user|
      puts "#{user.name}やで!"
    end
  end
end

結果。

$ rails task_sample:user_model
username-1やで!
username-2やで!
~
~

ワッショイ💪