Rakeの引数

Rakeの引数って args.target_date みたいに取れるなと思っていて、ふと気になったので、

desc 'testタスク'
task :test_task, ['target_date'] => :environment do |task, args|
binding.pry
end

してみた。で、以下のようにしてみたら

$ rake test_task[1]
[2] pry(main)> args.target_date
=> "1"
[3] pry(main)> args['target_date']
=> "1"
[4] pry(main)> args[:target_date]
=> "1"

みたいになった。ハッシュでアクセスする方法に加えてドットでも取れる。

# 一見ハッシュのように見えて
[5] pry(main)> args
=> {:target_date=>"1"}
# Rakeの引数用のクラスだった
[6] pry(main)> args.class
=> Rake::TaskArguments

Rake::TaskArgumentsさんがいい感じにしてくれてたみたいですね。
https://docs.ruby-lang.org/ja/latest/class/Rake=3a=3aTaskArguments.html
ソースはこちら
https://docs.ruby-lang.org/ja/latest/class/Rake=3a=3aTaskArguments.html
これを見てる感じ

def method_missing(sym, *args)
lookup(sym.to_sym)
end

↑でドットの呼び出しをしていそう。

def [](index)
lookup(index.to_sym)
end

ハッシュ的な呼び出しはこっちでシンボルにして呼び出していそう。