なければ作ればいいじゃない

吉見和也(Kazuya Yoshimi) 2008-01-24 19:23:27

Rubyやっててほんとに便利だなぁと思わせてくれる一つに、StringとかIntegerといった、組み込みのクラスでさえ簡単にアプリケーション側でオーバーライドできちゃう柔軟さがあります。

あんまやりすぎると危険なのでご利用は計画的にですが、Stringにこのメソッドがあったらめっちゃ楽なのになぁ、と思ったらhelper書く前にString拡張しちゃいましょう。

Stringにphpにあったstrimwidthみたいなの定義してみたりNilClassにmethod_missing定義してバグの隠蔽してみたり

さすがに後者は実戦で使ったことはありませんが。。。

前置きが長くなってしまいましたけど、当然Rakeだって拡張できるよねって話が本題です。

前回紹介したrakeタスクの中にnotes:optimizeとかあって、optimizeなんて普段そんなタグ使ってないので使い道がないって話をしましたけど、だったら使い道があるものを作ればいいんじゃね?ということがrakeでも出来ちゃうわけです。

やり方はホントに簡単で、タスクを定義したファイルに.rakeという拡張子をつけて、rails_root/lib/tasksに置いておくだけ。

それじゃあ試しに簡単なの一つ。うちではOPTIMIZEやFIXMEは使ってないけど、REFっていうタグを使ってます。なのでnotes:refっていうタスクで、REFタグを出力させてみます。


RAILS_ROOT/lib/tasks/annotation.rake

namespace :notes do

  desc "Enumerate all REF annotations"

  task :ref do

    SourceAnnotationExtractor.enumerate "REF"

  end

end

こんだけ。

これ書いたら、rails_rootに戻って


$ rake -T | grep ref

rake notes:ref                       # Enumerate all REF annotations

$ rake notes:ref

app/controllers/application.rb:

  * [ 11] ここにコメントが書ける

リストに追加されてますし、実行すればREFがついた部分がリストアップされます。

うちではこんな感じで出力したものを毎日開発者全員に送って、ソースレビューしたりリファクタリングしたりしてコツコツ修正しています。

タスクやメソッドがないからって、文句言っちゃダメです。なければ作るだけ。

押忍

※このエントリはZDNetブロガーにより投稿されたものです。朝日インタラクティブ および ZDNet編集部の見解・意向を示すものではありません。

SpecialPR

  • デジタル変革か?ゲームセットか?

    デジタルを駆使する破壊的なプレーヤーの出現、既存のビジネスモデルで競争力を持つプレイヤーはデジタル活用による変革が迫られている。これを読めばデジタル変革の全体像がわかる!

  • ビジネスの継続的な成長を促す新たなITのビジョン

    多くの企業においてITに求められる役割が、「守り」のコスト削減から「攻め」のビジネス貢献へとシフトしつつある。その中でIBMが提唱する新たなビジョンEnterprise Hybrid ITとは?