136
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

やったこと

  • 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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
136
Help us understand the problem. What are the problem?