Rakeでなぜデフォルトでtaskから自分のdescriptionにアクセスできないのか分からない

  • 3
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

以下のようにすることで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になると問題が出てくるのかもしれないが、関連する処理を見てもタスク数などが増えたとき極端にパフォーマンスが悪くなりそうな部分が見つけられなかった。