Rake タスク内から Rake タスクを実行するにはどうすればいいですか? 質問する

Rake タスク内から Rake タスクを実行するにはどうすればいいですか? 質問する

グローバル変数 に応じて、プロジェクトを 2 つの方法でコンパイルする Rakefile があります。グローバル変数はまたは$build_typeです(結果は別のディレクトリに保存されます)。:debug:release

task :build => [:some_other_tasks] do
end

次のように、両方の構成でプロジェクトを順番にコンパイルするタスクを作成したいと思います。

task :build_all do
  [ :debug, :release ].each do |t|
    $build_type = t
    # call task :build with all the tasks it depends on (?)
  end
end

タスクをメソッドのように呼び出す方法はありますか? または、同様のことを実現するにはどうすればよいでしょうか?

ベストアンサー1

タスクをメソッドとして動作させる必要がある場合は、実際のメソッドを使用するのはいかがでしょうか。

task :build => [:some_other_tasks] do
  build
end

task :build_all do
  [:debug, :release].each { |t| build t }
end

def build(type = :debug)
  # ...
end

rakeの慣用句にこだわりたい場合は、過去の回答からまとめた次の可能性があります。

  • これは常にタスクを実行しますが、その依存関係は実行しません。

    Rake::Task["build"].execute
    
  • これは依存関係を実行しますが、タスクがまだ呼び出されていない場合にのみタスクを実行します。

    Rake::Task["build"].invoke
    
  • これはまずタスクの already_invoked 状態をリセットし、依存関係などすべてを含めてタスクを再度実行できるようにします。

    Rake::Task["build"].reenable
    Rake::Task["build"].invoke
    
  • すでに呼び出された依存関係は、再度有効にしない限り、自動的に再実行されないことに注意してください。Rake >= 10.3.2 では、以下を使用して依存関係を再度有効にすることもできます。

    Rake::Task["build"].all_prerequisite_tasks.each(&:reenable)
    

おすすめ記事