Techioz Blog

rake タスクを定義した後に説明を追加するにはどうすればよいですか?

概要

一般的な rake タスク定義は次のようになります。

desc "Set the environment value for the database"
task "environment:set" => [:environment, :load_config] do
  ActiveRecord::InternalMetadata.create_table
  ActiveRecord::InternalMetadata[:environment] = ActiveRecord::Migrator.current_environment
end

しかし、desc がなく、ランタイムの後半、タスク定義を含むファイルの実行後にそれを追加したい場合はどうなるでしょうか。 desc “これはドキュメントです”、task: :taskname のようなものです。これは可能でしょうか?

解決策

これはかなり古い質問ですが、Google 検索からここにたどり着いた人のために私の回答を投稿します。

タスクは複数回言及することができ、その前に記述があると、そのたびに指定された説明が追加されます (置き換えられません)。同じ効果を得るために使用できるタスク オブジェクトのメソッドもあります。

# Rakefile

desc 'Foo 1'
task :foo

desc 'Foo 2'
task :foo

task(:foo).add_description 'Foo 3'
task(:foo).comment = 'Foo 4'
rake -T
# => rake foo  # Foo 1 / Foo 2 / Foo 3 / Foo 4

「タスクの実行後」という概念が、タスク定義の実行を意味するのか、タスク本体の実行を意味するのか、少し不明確です。後者は Rake の依存関係と最新性の解決に依存するため、タスク本体が実行されない可能性があります。

とにかく、技術的には、タスク本体内であっても、いつでも #add_description と #comment= を呼び出すことができます。ただし、説明はタスクを実行しない rake -T と rake -D のみを示しているため、これによる実際的な効果は思いつきません。

task :foo do |t|
  # ...
  t.add_description 'executed' # technically possible, but to what avail?
end