Rubyスクリプトの「コードの臭い」を警告してくれるReekというツールがある。メソッドが長過ぎるとか、変数名の意図がわかりづらいとか、多様な「臭い検出器」が備わっていて、とても便利だ。
とはいえ、多くの人が気にならない臭いの検出器はさすがに備わっていない。臭いに敏感な人は、自分で作るしかないのだ。かくいうぼくにも人一倍気になる臭いがあるので、Reekの勉強がてら自作してみようと思い立った。
手始めに「How to write new detectors」を読んでみた。すると、すぐにコードとの齟齬に気づいた。このコミットによるリファクタリングがドキュメントに反映されていないらしい。
これはオープンソースソフトウェアに貢献するチャンスだ。さっそくforkして、変更点のプルリクエストを送った。送ってから2時間あまり経った後、「Can't believe we missed that! Thanks a lot」とのコメントとともに、マージしていただけた。ありがたい話だ。
ちなみに、ぼくが気になっている臭いは「一部のインスタンス変数しか使わないインスタンスメソッド」である。興味のある方は、昔のブログに書いた「何をクラス分割の指針とすべきか」を参照されたい。
Reekでいう「Utility Function」の延長線上にあるものだが、この臭いが気になる人はあまりいないと思う。首尾よく検出器が作れたとしても、プルリクエストは送らないだろう。