Rake: タスク内からタスクのリストを出力するにはどうすればよいですか?

概要

Rakefile 内の :default タスクが、rake に詳しくない人にとって利用可能なタスク (rake -T の出力) のリストも含まれる役立つメッセージになるようにしたいと考えています。

タスク内から rake -T を呼び出すにはどうすればよいでしょうか?

解決策

タスク内から rake -T を呼び出すことは、rake の新しいバージョンでは少し複雑になります。設定する必要があるオプションは、standard_rake_options メソッドの rake/lib/application.rb から派生する可能性があります。基本的にこれは要約すると、

Rake::TaskManager.record_task_metadata = true

task :default do
  Rake::application.options.show_tasks = :tasks  # this solves sidewaysmilk problem
  Rake::application.options.show_task_pattern = //
  Rake::application.display_tasks_and_comments
end

Record_task_metadata はデフォルトのタスク内から設定できないことに注意してください。タスクが実行されるときにはすでに手遅れになっているためです (説明は収集されていないため、それらは nil であり、したがってパターンに一致するタスクはありません)。タスク内から Rakefile をリロードしようとすると、閉ループが発生します。メタデータを常に収集する場合、パフォーマンスのトレードオフがあると思います。それが問題であれば

task :default do
  system("rake -sT")  # s for silent
end

の方が適しているかもしれません。

rake 0.9.2.2を使用すると、両方とも機能します。