私がプログラミングで最も楽しいと思える作業 = リファクタリング

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

  • 作者: マーチンファウラー,Martin Fowler,児玉公信,平澤章,友野晶夫,梅沢真史
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/05
  • メディア: 単行本
  • 購入: 94人 クリック: 3,091回
  • この商品を含むブログ (312件) を見る
ファウラーのあまりにも有名な本で既にいろいろなところでも言及されていますが、本ブログの趣旨からしてもいつかは紹介させていただきたいと思っていました。特にJavaプログラマーとしては必読書であり、言語の基本的な文法を理解したレベルから、達人プログラマーへと成長する過程で欠かせないリファクタリングの知識を学ぶことができます。かなり古い本であり、扱っているJavaのバージョンも古いのですが、「メソッドの抽出」「クラスの抽出」「メソッド名の変更」などはあまりにも基本的な内容なので、現在でももちろん十分に通用します。もちろん、多くのリファクタリングIDEで自動化されていて、ある程度慣れてくると変な変数名を見つけ次第、自然に「Alt+Shift+R」などのショートカットキーを使って日常無意識のうちに実施できるようになります。
この本はデザインパターンなどの本と似ていて、一見書かれている内容は当たり前過ぎて無価値なことのように思ってしまう人もいるのですが、リファクタリングとは「外部の仕様を変更せずにプログラムの設計を改善すること」と定義しており、単体試験の実行なども含めて体系的にプログラムの設計を改善する手順を示しているという点で非常に画期的な内容の本だと思います。また、プログラミングしながら設計を考えるという考え方を世の中に広めることになった本だ思います。
ちなみに、私は10年以上も前にこの本に出会うまで、もちろんリファクタリングという用語は知らなかったのですが、分かりやすく無駄のないプログラムの作成を心がけるということで、無意識のうちにリファクタリングもどきな作業を実施していたということはありますね。プログラミングの魅力については、プログラマーによってさまざまな考え方があると思いますが、少なくとも私がプログラミングで最も魅力的と考えているのがこのリファクタリングという作業ですね。リファクタリングというものが世の中になかったら、きっとプログラマーになっていなかったと断言できますね。*1プログラムの外部仕様は変えないということなので、もちろんいくらリファクタリングしてもその時点ではプログラムでできることには変化がないのですが、リファクタリングによって無駄なコードが劇的に(場合によっては10分の1になることも)減るというところはまるでパズルゲームを解いているように本当に楽しいものです。しかも、コードが単純になることでそのプログラムのメンテナンス性や拡張性が飛躍的に高まるということですから、既存プログラムに新たな生命を吹き込んでいるような感覚も覚えます。その他

  • 使われていない隠れたデッドコードを発見して消し去った瞬間
  • スパゲッティコードを徐々に解きほぐしながら、その意味するところを理解できた瞬間
  • 創造神とも言うべき巨大なクラスを責務ごとに分割し終えた瞬間

などを一度でも体験するとほんとうに中毒になってしまいますね。(難しいリファクタリングを上手くやり遂げた瞬間の気持ちはRPGのダンジョンで目的の宝箱をやっと手に入れた時の感動にも似ているかもしれません。)私自身は仕事ではコーディングする機会自体が最近はあまり多くないですし、自由にリファクタリングができるという幸運を味わえるのは時間の割合から言うと全体の仕事の5%もないくらいですが、わざわざそのためにこの職業を続けているというようなものです。プログラミングのこんなに面白い側面を知らないで、いやいや仕事として作業するなんて実にもったいないことですよ。
もちろん、インターフェースの変更やクラス階層の変更など大きなリファクタリングはPG個人の判断でできないので、アーキテクトが中心となって目標を立て計画的に行う必要がありますし、リリースタイミングなどによりリファクタリングが危険ということもあります。ただし、privateメソッドの抽出やローカル変数の名称変更などはもっと現場で積極的に取り入れていくとよいと思いますね。
なお、私はまだ読んでいませんが、最近になってRubyリファクタリングの本も出ているようですね。

リファクタリング:Rubyエディション

リファクタリング:Rubyエディション

*1:もちろん、プログラマーの中にはアルゴリズムそのものや、そのプログラムでできる事などにもっと魅力を感じる人もいます。私はどちらかというと分かりやすいプログラムに整えるという作業に最大の面白みを感じます。これは自分があまり複雑なプログラムの読解が得意ではないというところも関連しているかもしれません。