Rakefileでnamespaceを使ったときにハマることがあります。
- namespaceの内と外で同じタスク名(例えば
foo
)を定義 - そのnamespaceの中から外の
foo
を参照したい
以下のようなことです。
Rakefile
task :foo do
puts '外のfoo'
end
namespace :bar do
task :foo do
puts 'bar:foo'
end
task baz: [:foo] do
puts '"外のfoo" と表示されているはず'
end
end
しかし rake bar:baz
の結果は
console
$ rake bar:baz
bar:foo
"外のfoo" と表示されているはず
つまりタスク bar:foo
が外側のタスク foo
をマスクします。こういうときはルートのnamespaceからのタスク名を指定(絶対指定)するか相対指定すると良いです。参照: Rakefile Format > Name Resolution
絶対指定の例を記します。ルートのnamespaceは rake
ですので、タスク bar:baz
の依存タスクの指定は
- task baz: [:foo] do
+ task baz: ['rake:foo'] do
のようにすればよいです。相対指定の例は省略します。