動かざることバグの如し

近づきたいよ 君の理想に

Railsでrakeタスクから別のタスクを呼び出す

環境

やりたいこと

Railsのtaskから別のタスクを実行したい。

方法

Railsのタスクはbundle exec rails xxx:xxxxのように実行するが、結局実態はただのrakeタスクなのでinvoke()を実行すれば良い

namespace :sample do
   task hoge: :environment do |t|
    puts "hoge"
  end
  
  task piyo: :environment do |t|
    puts "piyo"
    Rake::Task["sample:hoge"].invoke
  end

rails sample:piyoを実行するとpiyoからhogeが実行される。

piyo
hoge

引数を受け取る場合はinvokeメソッドで渡せば良い

namespace :sample do
  
  task :hoge, [:name] => :environment do |task, args|
    puts "hello ! #{args.name}"
  end
  
  task piyo: :environment do |t|
    puts "piyo"
    Rake::Task["sample:hoge"].invoke("taro")
  end

piyo
hello ! taro

となる