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

  • 65
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

やったこと

  • 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