環境
- Ruby 3
やりたいこと
rakeタスクでは通常引数を渡したいときは
task :greet1, [:name] do |t, args| name = args.name if name puts "こんにちは、#{name}さん。" else puts "名前を指定してください。" end end
のようにして
bundle exec rake 'greet1[taro]'
で実行する。ただ[]で囲むの面倒だし、zshの場合はさらにシングルクォーテーションで囲まないとシンタックスエラーになってしまう。
一般的な rake greet taro でスペース区切りで渡せるようにしたい
解決方法
実はrakeタスクにはデフォルトでは用意されていない。ただハックすると使える。
task :greet2 do if name # Rakeが引数を未定義のタスクだと解釈してエラーを出すのを防ぐため引数と同名のダミータスクを定義する task name.to_sym do ; end puts "こんにちは、#{name}さん。" else puts "名前を指定してください。" end end