shimgo
4/9/2016 - 5:47 AM

Rake でタスクに引数を渡す方法

Rake でタスクに引数を渡す方法

普通の方法

Rakefile

task :hello, 'firstname', 'lastname'
task :hello do |t, args|
  puts "Hello, #{args['firstname']} #{args['lastname']}"
end

実行

shell >rake 'hello[John,Smith]'

通常の引数っぽく渡す方法

Rakefile

task :hello do
  puts "Hello, #{ARGV.last}!"
  ARGV.slice(1,ARGV.size).each{|v| task v.to_sym do; end}
end

普通だとhello と worldのタスクを実行するように解釈されるが、
上記のARGV〜で引数に指定された名前で空のタスクを定義しているため、
worldタスクが呼び出されはするものの何もしない。
注意点は以下の二つ

  • rake -vTとかで見た時に引数が要ることが分からないので、descでしっかり書いておくように。
  • 引数で既存のrakeタスクと同じものが指定されると、それが実行されてしまう。

実行

shell> rake hello world
#=> Hello, world!