Testing, Design, and Refactoring (RailsConf2009レポート)

«RailsConf2009のレポート一覧

こんばんは根岸です。会社のマニーでべガスに来ています。

本稿はrakeの作者、Jim WeirichさんとJim O'brienさんのテストやリファクタリングに関する表題の発表のレポートです。 リファクタリング用のサンプルプロジェクトとスライドがアップロードされていました。

http://onestepback.org/download/refactor.zip

以下軽く紹介するので、興味がわいたらプレゼンを眺めたりあとで公開されるであろうビデオを眺めたりして下さいね。

前半は要するに良いオブジェクト指向のデザインとは何かというテーマです。 ・凝集性を高める ・低い結合性を保つ ・明確さを維持する これを実行するために単一責任原則だとか、リスコフの置換原則だとか、役割の局所性を利用したオブジェクト間のやりとりの粗結合性だとか、最少のクラスとメソッドの実装だとか、様々な設計ポリシーがあるよと説明したあと、ではそれを維持するためにリファクタリングをしよう!という話につながりました。 ・新しいテストを書く ・それが全て通るようなコードを書く ・リファクタする というリファクタリングのループを前提として、メソッド分割やらパラメータの導入やらといった一般的なリファクタの手法を説明していました。

後半はgreedというおもしろRailsゲームをリファクタリングしつつ仕様変更しよう!という内容だったんですが、cucumber前提なのも割とついていけないポイントだったんですが1時間ちょっとのリファクタリング講義の為にわざわざいろいろ穴のあるこのサイズのアプリ作ったんですか...と驚きあきれました。僕は持ち時間使い切ってまずアプリを動かせる状態にしてcucumberのシナリオの書き方の学習とコードリーディングを大体やってリファクタリングに入り始めたところで終わっちゃったんですが、基本的に周囲の外人さんは課題の仕様変更を終わらせてAIの改善とかに手をつけはじめる感じで、完全に差を感じました。

開発の技術的な体制やマインド・ポリシーの共有は、クックパッド技術部にとって注力したいテーマの一つです。今回の発表はきわめて一般的な話ではありましたが、こういった形で一種の最適解みたいなものに直に触れられたことは今後の良い糧になると考えています。 個人的にオブジェクト指向の説明のためにテーブルにJimさんが配ってくれたさいころは宝物にします :)

ちなみにそのうちこんな本が出るそうです Refactoring: Ruby Edition http://www.amazon.com/dp/0321603508 Martin Fowlerのリファクタリング本のRuby版ですね 僕は予約しましたので皆さんも買えばよいと思います