他のrakeタスクに依存するrakeタスクの実行

rakeタスクの前に別のrakeタスクを実行

ある特定のRakeタスクを実行する前に別のタスクを実行したい場合、このようにタスクを書きます。

task(:x) { puts "x" }
task(:y) { puts "y" }
task(:z) { puts "z" }

desc "dependency rake task"
task foo: [:x, :y, :z] do
  puts "foo task"
end

結果はこんな感じ。

$ rake foo
x
y
z
foo task

タスクx, y, z が実行された後にタスクfooが実行されます。

別の方法

また下記のようにfooタスクのみ先に定期して、別のtaskとして依存を定義することも可能です。

task(:x) { puts "x" }
task(:y) { puts "y" }
task(:z) { puts "z" }

desc "dependency rake task"
task(:foo) do
  puts "foo task"
end

task foo: [:x, :y, :z]
$ rake foo
x
y
z
foo task

rakeタスクの後に別のrakeタスクを実行

ある特定のRakeタスクを実行する後に別のタスクを実行したい場合、enhanceを使ってこのようにタスクを書けます。さっきの書いたタスクをenhanceしてみましょう。

task(:x) { puts "x" }
task(:y) { puts "y" }
task(:z) { puts "z" }

desc "dependency rake task"
task foo: [:x, :y, :z] do
  puts "foo task"
end

Rake::Task["foo"].enhance do
  puts "foo enhancing task"
end

結果はこんな感じ。

$ rake foo
x
y
z
foo task
foo enhancing task

enhanceの中にかいた処理はしっかりfooタスクのあとに実行されていますね。

参考