同じ rake タスクを二ヶ所で書いた時の挙動について

annotate_models のコード見ていたら、次のようなコードが書かれていて、実際の db:migrate のタスクを上書きしてるのかなあ…だとしたら実際の db:migrate の処理どこ行ったんだろうと思った。

namespace :db do
  [:migrate, :rollback].each do |cmd|
    task cmd do
      Rake::Task['set_annotation_options'].invoke
      Annotate::Migration.update_annotations
    end
  # ...
end

ちゃんと調べたら、同じrakeタスクは複数定義すると、両方実行される仕様っぽいですね。知らなかった

task :hoge do
  puts 'hoge'
end

task :hoge do
  puts 'fuga'
end

rake hoge とすると

hoge 
fuga

と出力される