cover

「リファクタリング」について話しましょう。

sorcererxw

最近、「リファクタリング: 既存のコードを安全に改善する」を読み終えました。この本では、多くのリファクタリングの技術が紹介されていますが、以前に「Effective Java」やデザインパターンを学んだことがあり、また普段の開発でも「清潔さ」にこだわっているため、いくつかの技術については新鮮味を感じませんでした。ただ、これらの技術が一つ一つ書面化されているのを見るのは初めてでした。

具体的なリファクタリングの技術よりも、私にとってはリファクタリングの理念に対する著者の考え方がより大きな影響を与えました。

リファクタリングは、運動をするようなものであり、適切な食事を摂ることと同じです。

リファクタリングは大きなプロジェクトですが、日常の開発に組み込むべきです。

人と同じように、定期的な運動とバランスの取れた食事は、普段時間を取るかもしれませんが、健康的な生活スタイルは生活や仕事でより高い効率をもたらします。長期的に見れば、健康な体調をもたらします。逆に、健康に注意を払わない場合、普段の仕事や生活の効率が低下するだけでなく、病気のリスクを抱えることにもなります。

もし私たちが日常的にコードを適時にリファクタリングし、適切なコード設計を確保するなら、開発効率が向上するだけでなく、将来のシステムの堅牢性も保証されます。逆に、コード設計を適切にメンテナンスしないと、開発効率が低下するだけでなく、技術的な負債も蓄積されます。

二つの帽子

開発プロセスは、機能開発とコードのリファクタリングの2つの側面に分けることができます。前者はコンピュータに対して、後者は開発者に対して行われます。

いつも覚えておく必要があります。これらのタスクは同時に実行できません。まるで2つの帽子を同時にかぶることができないようにです。

  • ある機能の開発を完了する際には、途中で一部のコードをリファクタリングすることは避けてください。なぜなら、そのプロセスでは目標は機能の実現であり、コードの設計の最適化ではないからです。
  • もしリファクタリングを行っている場合、バグが見つかってもすぐに修正するのではなく、メモして後で対応するようにしましょう。重点はコードのリファクタリングに置くべきです。なぜなら、リファクタリングの本質はコードの機能を変えずに、コードの設計を最適化することです。そのため、バグを修正しても最終的な機能(入出力)に変化が生じる可能性があります。

この点については、非常に深く感じています。普段の開発では、ある部分のコードの設計がより最適化できることに気づいたり、リファクタリング中に機能の更新が必要であることに気づいたりすることがあります。これらのタスクを一緒に実行すると、最終的にリファクタリングされたコードが他のコードと互換性がなくなり、結果的にコードが混乱してしまうことがあります。

おそらく、機能開発の際には視点が一点に集中する一方、リファクタリングの際にはモジュール全体の設計に目を向ける必要があります。同時に2つのポイントに同時に集中することはできません。