レガシーコード改善ガイド
リファクタリング
大きなコードを改善する際の最大の障害は、既存のコードです。「そんなのは当たり前じゃないか」と皆さんは言うかもしれません。しかし、私は難しいコードを扱う作業がどれほど大変かを説明したいのではありません。そのようなコードが人に何を信じさせるかについて話しているのです。見苦しいコードを苦労して理解することに1日の大半の時間を費やしていると、コードはいつも見苦しい状態のままで、少しくらい改善しようとしてもまったくの無駄だと信じこんでしまいがちです。皆さんは次のように考えるかもしれません。「どうせ90パーセントの時間をヘドロのようなものを相手に過ごすのに、この小さい部分だけきれいにしたところで何だというのだ。もちろん、この小さな部分は改善できる。しかし、それが今日の午後、あるいは明日の私にとって何の役に立つだろうか?」。そう言われたら同意せざるを得ません。しかし、一貫してそのような小さな改善を続ければ、数ヶ月の間にシステムは見違えるような状態になります。ある日の朝、ヘドロを相手に汚い仕事をするつもりで会社に来ると、次のことに気づきます。「あれ?このコードはいい感じになっているぞ。誰かがこのコードを最近リファクタリングしたようだ」。その時点、すなわち優れたコードと悪いコードの違いを直感的に理解できた時こそが、皆さんが変わる時です。当面の仕事を終わらせるのに必要な範囲をはるかに超えて、人生をより楽にするためだけにリファクタリングをしたいと思う自分に気づくかもしれません。この話は、経験したことがなければ、馬鹿げたことに聞こえるかもしれません。しかし私は、今まで何度もチームに同様のことが怒るのを見てきました。困難なのは最初の取っ掛かりです。それは時に馬鹿げて見えるからです。(85)
レガシーコードと新規開発
責務を把握する能力は、重要な設計スキルであり、訓練が必要です。レガシーコードの扱いについて話している時に設計スキルを語るのは奇妙に思えるかもしれません。しかし、既存のコードの責務を発見することと、まだ書いていないコードの責務を考え出すことの違いはほとんどありません。重要なことは、責務を把握することと、責務を適切に分割するやり方を学ぶことです。新しい機能を作り上げる時よりも、レガシーコードを扱う時のほうが設計スキルを発揮する機会ははるかに多くあります。実際に影響を受けるコードがあるため、設計のトレードオフに関する議論が容易になります。具体的な状況が実際に目の前にあるため、ソフトウェア構造が適切かどうかの判断も、より簡単に行えます。
265ページ
レガシーシステムを担当する人たちは、しばしば新規開発に携わることを望みます。システムをゼロから構築することは楽しいことです。しかし率直に言って、新規開発には、新規開発なりの問題があります。私は、何度も次のような状況を見てきました。既存システムは、時が経つにつれて不明瞭なものとなり、変更が困難になります。組織の人たちは、優秀な人々(ときどきトラブルメーカーにもなりますが)を新しいチームに配置し、「より優れたアーキテクチャで新システムを開発して、既存システムを置き換える」という任務を与えます。当初は万事うまく進みます。チームは、古いアーキテクチャで何が問題だったのかを知っているため、それなりの時間をかけて新しい設計を行います。そうこうしている間にも、残りの開発者は保守チームとして、既存システムで作業を続けています。システムは稼働しているので、彼らはバグの修正や、ときに新機能の要求も受けます。会社は、それぞれの新機能を真剣に検討し、それが既存システムで必要なのか、あるいは利用者に新システムまで待ってもらえるかどうかを判断します。ほとんどの場合、利用者は待てません。そのため、変更は新旧の両方のシステムで必要になります。新規開発チームは、絶えず変化するシステムを置き換えるために二重の仕事をしなければなりません。何ヶ月かが経つと、既存システム、つまり現在保守しているシステムを置き換えるのはほとんど不可能なことが明らかになってきます。プレッシャーは増加し、新規開発チームは、昼も夜も週末も働くことになります。多くの場合、こうした状況になると、組織の残りの人々は、保守チームが重要な仕事を担っており、将来誰もが頼らなければならないシステムの面倒を見ていることに気がつきます。
隣の新規開発の芝は、実はそれほど青くありません。
チームの士気が低く、しかもその理由が品質の悪いコードであるなら、次のことを試してください。プロジェクト内で最も醜悪なクラス群を取り出して、テストで保護するのです。チームとして最悪の問題に対処できた時、ひどい状況を制御できる自信を持てることでしょう。私は、何度もそれを見てきました。
コードを制御でき始めると、優れたコードのオアシスが現れてきます。そこでの仕事は、本当に楽しいものになります。
336-337ページ(24章)