2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

railsのタスクの書式

Posted at

概要

railsのタスクですが、引数が必要な時とか、他のtaskを事前に実行したい時に、taskメソッドに渡す引数の書き方がいつもわからなくなって毎回検索するのでまとめておきます。

引数無し・別のタスク実行無し

素のタスクです。引数はtaskの名前のみ。

  desc '引数無し・別のタスク実行無し'
  task :some_task do |task, args|
    puts 'some_task'
  end

引数あり・別のタスク実行無し

引数だけあるパターン。二番目の引数に配列で列挙可能。

  desc '引数あり・別のタスク実行無し'
  task :some_task, [:arg1, :arg2] do |task, args|
    p args
  end

呼び出す時はrails some_task[foo,bar]。task内ではargs.arg1args.arg2で参照できます。

ちなみに一つの時は配列にしなくてもOK。

  desc '引数あり・別のタスク実行無し'
  task :some_task, :arg1 do |task, args|
    p args
  end

引数無し・別のタスク実行あり

taskに渡す最初の引数がhashになります。キーが名前で値が実行したいタスク。この辺から???って感じです。

  desc '引数無し・別のタスク実行あり'
  task some_task: [:environment, 'another_task'] do |task, args|
    p User.class
  end

こちらも同じく一つの時は配列にしなくてもOK。

  desc '引数無し・別のタスク実行あり'
  task some_task: :environment do |task, args|
    p User.class
  end

引数あり・別のタスク実行あり

引数が二つになり、二番目の引数に引数の配列をキーにしたハッシュを渡します(もう何を言ってるかわかりません)。

  desc '引数あり・別のタスク実行あり'
  task :some_task, [:foo, :bar] => [:environment] do |task, args|
    p User
    p args
  end

実行したいタスクが一つの時は配列じゃなくてもOKですが、引数は配列じゃないとダメです。

  desc '引数あり・別のタスク実行あり'
  task :some_task, [:foo] => :environment do |task, args|
    p User
    p args
  end

ふむ・・・改めてまとめてみると結構わかりづらいですね。覚えられないわけだ。

下記のような引数ならわかりやすいのに。

  # このコードは動きません!
  task :some_task, args: [:foo], before: [:environment] do |task, args|
    p User
    p args
  end
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?