リファクタリングすべきか、書き直すべきか、その判断基準
すべての開発者が、この瞬間に直面します。
コードベースの動作が遅い。新機能の追加に時間がかかりすぎる。新しく入ったメンバーがシステムを理解するのに苦労している。そして、誰かが最終的に「全面的な書き直し(リライト)」を提案します。
チームは通常、2つのグループに分かれます。一方はゼロからやり直したいと考え、もう一方は過去のリライトの失敗を恐れます。どちらの主張にも一理あります。
リライトは魔法の解決策ではありません。計画よりも時間がかかることがよくあります。結局、2つのシステムを同時にメンテナンスすることになり、新しいバージョンでも同じ間違いを繰り返してしまうことさえあります。
リライトが理にかなっているのは、以下のような特定のケースです:
• データモデルがビジネスの要件に対して根本的に間違っている。 • 使用している技術が廃れており、セキュリティアップデートも提供されていない。 • ビジネスニーズが大きく変わり、元のシステムが時代遅れになっている。 • 現在のチームの誰も、システムの仕組みを理解していない。
ただし、そのような場合でも、「ビッグバン」方式での一括置き換えは避けてください。「ストラングラー・フィグ・パターン(Strangler Fig Pattern)」を採用しましょう。古いシステムと並行して、新しいシステムを少しずつ構築していくのです。
多くの場合、本当に必要なのはリファクタリングです。
リファクタリングが適切な選択となるのは、以下のような場合です:
• 速度は遅いものの、まだ新機能を追加できる。 • チームが現在のコードを理解している。 • 乱れている部分が特定のモジュールに限定されている。 • ビジネス上、新機能のリリースを止めることができない。
選択する前に、なぜコードが悪化したのかを問い直してください。
問題が技術的負債であるなら、最もひどい部分をリファクタリングしてください。もし問題がコードレビューの不足や文化の欠如にあるなら、リライトをしても解決しません。古い習慣のまま、新しい「ぐちゃぐちゃなコード」を作り上げるだけになってしまいます。
決断を下す前に、以下の質問を自分たちに投げかけてみてください:
• 最もひどい部分を、切り離して修正できるか? • 現在のビジネスニーズに対して、データモデルが破綻しているか? • 最初からやり直した場合、どのような知識を失うことになるか? • ビジネス側には、長期的な移行期間に耐えうる安定性があるか?
「やり直す」ことは気持ちが良いものですが、「リライトを完了させる」ことこそが困難なのです。多くの場合、構造化されたリファクタリング計画の方が、より安全で効果的です。
Source: https://dev.to/daviefano/how-we-decide-when-to-refactor-and-when-to-rewrite-40pk