リファクタリング


リファクタリングとは

リファクタリングとは、メンテナンスしやすくなるように、ソースコードを書き換えていく作業の事です。
きれいなコードを書く指針として、徐々に浸透してきています。
公式ホームページは、Refactoring.comにあります。(日本語版はこちら

リファクタリングの原典はマーチン・ファウラー著「Refactoring(洋書)」になります。
日本語版も出版されていますので、まずこの原典は手に入れておきましょう。
リファクタリングの思想や基礎、カタログごとの手順などが詳しく解説されています。

マーチン ファウラー Martin Fowler 児玉 公信 平澤 章 友野 晶夫 梅沢 真史
ピアソンエデュケーション(2000-05)




このページでは、リファクタリング入門としてできるだけ簡潔にまとめています。
より詳しく知りたい方などは、上記の書籍のほかにもたくさんの解説書がでていますので、参考にしてください。


リファクタリングの基本方針
  • コードをできるだけ小さな単位に分割する
  • 処理のかたまりに名前をつける
  • 処理を重複して記述しない

リファクタリングの基本的方針のひとつめは、コードをできるだけ小さな単位に分割することです。
小さな部品のほうが理解しやすく、バグも少なくなるからです。

また、コードを小さく分割することで、そのまとまりごとにメソッド名やクラス名などの名前を付けることができます。
実は、この名前がコードがわかりやすくなるかどうかの分かれ目になります。
コメントを充実させるよりも、リファクタリングによってコードの断片をまとめ、適切な名前を付けるべしというのがリファクタリングの教えです。
(もちろん、実際にはコメントも重要ではありますが。)

そして最後に重要なのが、コードの重複をできるだけ少なくすることです。重複コードを見つけたらまず間違いなくリファクタリングの対象になります。
重複するコードがあるということは、プログラムの変更時に変更しなくてはならない箇所が分散してしまい、変更時のバグが入り込みやすくなってしまうということです。それを防ぐためには、重複するコードをできるだけ少なくするというのはコードの保守性を高めるためにきわめて重要な作業となります。
ただし、あまりに共通ルーチンを使い回すと、逆にメンテナンスのしやすさを低下させてしまうこともあることを覚えておいてください。
あまりに多くのモジュールから、ひとつの共通ルーチンが参照されているときは、その共通ルーチンを変更するときの影響が大きすぎることになってしまいます。
このへんのさじ加減を広い視点で判断し、コードの保守を行っていくことが重要です。

どんなプログラマーでもコンピュータに理解できるコードは書ける。しかし優秀なプログラマーだけが、人間に理解できるコードを書くことができる。
〜Martin Fowler


リファクタリングのルール
  • リファクタリングと機能改変を同時にはおこなわない。リファクタリングをしてから新しい機能を追加する。
  • リファクタリングを始める前と後にはユニットテストを実行しコードの機能が変更ないかを確認する。
  • パフォーマンスよりもメンテナンス性を重視する。
  • こだわり過ぎてはいけない。
  • 小さなリファクタリングとテストの組み合わせを繰り返す。決して一度に大きなリファクタリングをしない。

大きなリファクタリングは惨事のもとである。
〜Kent Beck



リファクタリングのカタログ(Refactoring.comより)

それぞれのリファクタリングを日本語で独自に解説しています。
*サンプルコードはC#で書かれています。


Copyright(c) 2012 WoodenSoldier Software