以下のようにすることでtaskのブロックから自分のdescriptionを読み出すことができる。
Rake::TaskManager.record_task_metadata = true
desc "foo.
bar"
task :default do |task|
p task.comment # => "foo"
p task.full_comment # => "foo.\nbar"
end
(参考: ruby - Access Rake Task Description from within Task - Stack Overflow, class Rake::Task - Rake)
Rake::TaskManager.record_task_metadata
が真値でないとタスクのオブジェクトに説明文が紐付けられない。なぜデフォルトではこの値がfalse
になっているのか気になったので調べた。
git blame lib/rake/application.rb
で変更履歴を見てみると、Optimized comment loading to only happen with -T, -D or -W options. · f191142 · jimweirich/rakeというコミットが見つかる。-T
などのタスクの説明を表示するオプションが有効になったときだけタスクに説明文を紐付けるという変更。"Optimize"ということは、常に紐付けているとパフォーマンス上の問題があったのだろうか。
試しに説明を常に紐付けるように書き換えてRakeのrake test
を走らせても速度に変化はなかった。大規模なRakefileになると問題が出てくるのかもしれないが、関連する処理を見てもタスク数などが増えたとき極端にパフォーマンスが悪くなりそうな部分が見つけられなかった。