Edited at

Rake タスクの作り方(引数を複数設定してみる)

More than 1 year has passed since last update.


やったこと


  • rake タスクをジェネレート

  • 引数付きのrakeタスクを作成

※ rakeタスクの作り方を毎回忘れるのでメモ!


rake タスクファイルをジェネレートする

$ rails g task task_name

task_nameに任意の名前をつける。

今回はそのままtask_nameをそのまま使用する。

lib/task/配下に以下のようなファイルが作成される。


task_name.rake

namespace :task_name do

end


タスクの処理を追加してみる。(引数付き)

次にブロック内に実行する処理を追加する。


task_name.rake

namespace :task_name do

desc "実行処理の説明"
task :create, ['name'] => :environment do |task, args|
p task
p args
end
end


rake タスクの確認をする。

$ rake -vT

# 出力結果

...
rake task_name:create[name] # 実行処理の説明
...

実行してみる

$ rake task_name:create[hoge]

# 出力結果

<Rake::Task task_name:create => [environment]>
{:name=>"hoge"}


複数の引数を与えたい場合。


task_name.rake

namespace :task_name do

desc "実行処理の説明"
task :create, ['name', 'description'] => :environment do |task, args|
p task
p args
end
end

実行してみる

$ rake task_name:create[hoge,foo]

# 出力結果

<Rake::Task task_name:create => [environment]>
{:name=>"hoge", :description: => "foo"}

上記で確認できるように、引数はHashで渡されるので、あとは以下のようにHashとして扱えばOK!

または、'args.name'のような形でも呼び出し可能。


task_name.rake

namespace :task_name do

desc "実行処理の説明"
task :create, ['name', 'description'] => :environment do |task, args|

# どちらも同じ値を呼び出す。
p args[:name]
p args.name

end
end