既存の機能を踏襲し新規の機能を開発した際のリファクタリングの進め方のコツ
はじめに
既存の機能を参考に新規の機能を開発するケースは割とよくあると思いますが(キーワード検索があり、それを参考にタグやカテゴリーでの検索機能を追加するようなケースなど)このような場合で既存の機能の実装にリファクタリングの余地がある際、その対応に悩んだことはありませんか? 🤔
実際、私はこのようなケースの場合どのようなステップを踏んで取り組めば効率的、効果的に対応できるのかあまり分かっておらず、既存の機能の実装と新規の機能の実装を同時にリファクタリングしようとしてレビュワーの方から下記のようなコメントをいただいたことがありました 👇
- もともとの既存の機能の実装が、そもそもリファクタリングの余地がある
- 新規の機能の実装も、まだリファクタリングしていない
という状況です。その中で、この PR では両方の実装をリファクタリング・共通化しようとしているんだと思いますが、まとめて取り掛かるにはタスクとしてちょっと大きい(難易度が高い)ですね 😅
まとめてではなく、
- 新規の機能の実装をきれいにする
- 新規の機能を参考にして、既存の機能の実装をきれいにする
- 共通化できそうだったら共通化する
と順序立てて、攻略しやすいところ・優先順位の高いところから片付けていった方が良かったんじゃないかと思います。
1 まで済めば、2 にどの程度手間がかかるのか見えてくるので、2 をやる/やらないの判断ができるようになります。今回は特に、「今後触る予定もないし、このままで許容する」という選択肢もあると思います。3 も同様です。
こちらのコメントを受け、このようなケースのリファクタリングについて少し整理してみたいと思い、記事にまとめとみました!
直面した状況
- 既存の機能の実装自体に少し改善の余地がありそう、、
- 新規の機能も、とりあえず動くところまで実装したがまだ整理できていない状態
- 既存の機能と新規の機能を同時にリファクタリングしようとしていた
段階的リファクタリングで進めてみよう!
前提: 既存の機能を踏襲し新規の機能を開発する
Step 1: まず新規の機能をキレイにする 🌟
まずは新規の機能のリファクタリングから着手します
ここから始める理由:
- 実装の記憶が新しい状態でリファクタリングに取り組める
- 既存の機能のリファクタリングのベースを作れる
Step 2: 既存の機能をキレイにする(オプション)
Step 1 で整理した新規の機能の実装を参考に、既存の機能の改善を検討を行います
このステップのポイント:
- Step 1 の結果から、改善にかかる工数が見積もりやすくなる
- 既存の機能の改修予定や運用状況を考慮して判断できる
Step 3: 共通化の検討(オプション)
両方の実装が整理できたのち、共通化について検討します
このステップのポイント:
- 共通化による保守性の向上と実装の複雑化を総合的に判断する
- 将来の機能追加や変更の可能性を考慮して無理に行う必要はない
段階的アプローチのメリット
-
安全に進められる
- 各ステップの影響範囲が把握しやすい
- 問題が起きても戻しやすい
-
柔軟に対応できる
- 様子を見ながら次に進むか決められる
- プロジェクトの状況に合わせて調整できる
まとめ
- 新規の機能をキレイにする
- 既存の機能の改善の検討
- 共通化の検討
上記のポイントを意識してぜひ試してみてください 👌
Discussion