ガーデニングのメタファーはソフトウェア開発の現実にかなり近いものです。あるルーチンが大きくなりすぎたり、色々なことを実現しようとしすぎている場合、2つに株分けする必要があるのです。また、計画通りうまくいかないものは雑草を抜いたり剪定してやらないといけないのです。
こういったコード記述のやり直し、再作業、再設計を総称して「リファクタリング」と呼びます。
アンドリュー ハント¥ 3,990
|
- リファクタリングのきっかけ
- DRYの原則に反している
- 直交していない設計
- 時代遅れの知識をつかっている
- パフォーマンスがわるい
- クラス、メソッドが長い
- 名前がしっくりこない
同じようなコピペコードがいくつも見られ、UIを直すとロジックを直して、DBもなおすとか。非推奨のメソッドを使っていたり。ループ分が多いし、やってることとメソッドの名前があっていないとか。みなさんも、思い当たるようなことはありませんか?
- タイミングとガン細胞の切除
きっかけを見つけたら、その瞬間がリファクタリングの実施するべき時。
達人プログラマーはリファクタリングに躊躇をしない。
リファクタリングをするきっかけになったコードは、ガンみたいなものです。小さなうちに早く切除しなければ、大きくなり、やがて他に転移していくのです。手遅れになれば、死ぬことになりかねません。
リファクタリング、それは動いているコードに手を入れるということ。痛みを伴う外科手術。
- HIROCASTERの経験から
リファクタリングすべき所を見つけたら記録しよう。これは習慣にして欲しい。そして、リファクタリングは1日1テーマでいいから実施すべき。自動テストに守れているコードであれば、小さな勇気で大病を防ぐことができる。
スケジュールがそんなことやってられる状況でなければ、機能追加を検討する際に現在のガン細胞の数を確認した方が良い。ガンを先に直す決断をするときがいつかくるはずだ。
** リファクタリングのポイント
- 追加機能の実装とリファクタリングは同時に実施しない
- リファクタリングをおこなう前にすべてのテストがパスしていること
- 小さな変更をして、テストを通して、小さな変更を積み重ねて大きな変更に育てること
- リファクタリングツールのサポートを十分に享受すること
** リファクタリングツール
リファクタリングをサポートしてくれるツールが使える場合は率先して使いましょう。EclipseやNetbeansでは多くの言語に対してリファクタリングを支援してくれるような機能が実装されています。RubyにはRuby Refactoring Browserなどがあります。
リファクタリングを専門としたツールだけでなはく、バグが入り込むようなコードの書き方を指摘してくれる静的コード解析ツールのサポートを受けましょう。
- クラスが大きすぎる
- メソッドが長い
- 使っていない変数や引数がある
- 名前が長すぎる or 短すぎる
など、様々な指摘をしてくれるツールがあります。PHPだとPHPMD – PHP Mess Detectorがおすすめ。Rubyだとreekやroodiやrufus-treecheckerだろうか。
2010年はTDDでの開発やレガシーコードに自動テストを付加し、継続的インテグレーション環境をつくるなどの経験ができた。その過程ではどうしても切除するにはリスクが大きすぎるガン細胞もあった。今年は自動テストというガードが構築されたので、心置きなくリファクタリングができそうだ。
コードを用いた具体的なリファクタリングのテクニックは下記の書籍がとても参考になる。これがあれば、個人的にはRubyエディションがおすすめ。
Jay Fields¥ 5,040
|
マーチン ファウラー¥ 5,040
|