Rakeを実装してみました

rubyのライブラリの再実装シリーズ第二弾。第一弾はunit/testでした。

なんか、文章書くのも大変なので、githubにmyrakeという名前で公開しました。commitはこまめにしているので、最初のcommitから読んでいけば開発の追体験?ができます。

現在のところRakefileにはtask, file, namespaceが使えます。ruleとか、importとかはあんまり利用している例が見つからないんでとりあえずスルーです。

Rakeの仕様で理解しがたいのもあって、たとえば

task :default => [:t1]
task :t1 do
  puts "hello"
end
task :t1 do
  puts "world"
end
#=> "hello\nworld\n"

といったRakefileをdefaultで実行すると"hello\nworld\n"って表示されちゃうんですよね。この仕様が活かされるような状況が想像できません。railsのRakeで書かれたtaskとか読んだら考えが変わるかもしれませんが、どうなのでしょう。ということで、myrakeにはこのような仕様ではなくて、最後に書かれた処理のみ実行します。