こんばんは根岸です。会社のマニーでべガスに来ています。
本稿は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版ですね 僕は予約しましたので皆さんも買えばよいと思います
システム管理ツールChefのチュートリアル(RailsConf2009レポート)
2009年5月5日
RailsConf2009に参加中の高田悟史です。RUNNING THE SHOW: CONFIGURATION MANAGEMENT WITH CHEFを聞いてきました。
Chefというのは、Puppetのようなシステム管理ツールです。
Puppetとの違いをいまいち分かっていないのですが、サーバー(Chef Server)とクライアント(Chef Clients)という構成で、サーバーの設定(cronやApacheなど)をrubyで記述し(これをCookbookと呼ぶ)、新しく導入するサーバー(Chef Clientにあたる)のセットアップや設定変更やRailsアプリケーションのデプロイなどを自動的に行うことができるツールです。また、このCookbookという設定情報はバージョン管理されます。例えば、Apacheの設定ファイルをERBで記述し、rubyで変数値を指定するというような書き方ができるのは便利そうです。
Chef Soloという仕組みもあり、ネットワーク上やセキュリティー上の問題からChef Serverに接続できないサーバー(Chef Client)でもCookbookを含むターボールを指定することで同様のことをすることができます。
その他にも、WebUIでCookbookの参照や編集や検索をすることができるのは便利そうでした。このCookbookの操作にはREST APIも準備されていて、コマンドラインからこれらの操作をすることもできます。
PoolPartyというクラウドを管理するツールは、Chefが元になっているらしいです。
ちなみに、Puppetの日本情報wikiにPuppetの作者がChefをどう思ってるか書いてありました。
Chef ServerとChef Clientのデモには、VirtualBoxを使っていました。まだ試していないのでどのくらい手間がかかるのかは分かりませんが、ローカル環境でChefを試してみたい場合なんかにはよいかもしれませんね。
クックパッドでも、近々サーバーの増設をすることになるのだろうというところですが、100台を越え始めるので、このような一元管理できるしくみを導入したいと考えています。Puppetと比較してChefも検討しようと思います。