Create  Edit  Diff  FrontPage  Index  Search  Changes  History  RSS  Source  Login

FrequentlyAskedQuestions

4.1 あるタスクの中から別のタスクを呼び出すこには、どうすれば良いのでしょうか?

通常、あるタスク(:secondary と仮定)から、別のタスク(:primary と仮定)を実施するには、:secondary の前提条件として、:primary が実施済みであることを指定するのが、一般的です。

task :primary => [:secondary]

task :secondary do
  puts ":secondary の実施。" 
end

しかし、まれにではありますが、:primary タスクの中で、:secondary タスクを実行したいというケースも存在します。その場合は以下のようにして実現できます。

task :primary do
  Rake::Task[:secondary].invoke
end

task :secondary do
  puts ":secondary の実施。" 
end

上記の方法を選んだ場合、以下を念頭に置いてください。

  • :primary タスクが実施される際に、その中で :secondary タスクが実施されます。
  • :secondary タスクのすべての前提条件は、:primary の前ではなく、:secondary タスクの前に実施されます。
  • もし、一度でも :secondary タスクが実施されれば、例え明示的に指定されても、再度実施されることはありません。Rake のタスクは、実行時に一度だけです

もし、二つめと三つ目の条件が気に入らない場合は、通常の Ruby のメソッドを使って :secondary タスクと :primary タスクで、そのメソッドを呼び出すことを考慮する必要があるでしょう。以下のようにです。

task :primary do
  secondary_task
end

task :secondary do
  secondary_task
end

def secondary_task
  puts ":secondary の実施。" 
end
Last modified:2017/08/14 11:02:39
Keyword(s):
References:[AboutRakeUserGuide] [SideMenu]