はじめに
進行中のプロジェクトでリファクタリングを担当しています。使用しているフレームワークはVue.jsとSpring Bootで、クライアントとサーバーはREST API(JSONフォーマット)で通信しています。
リファクタリングの経験がないため、どのような手順で進めればよいかを調査しながら、成果と学びを記録に残していきたいと考えています。
リファクタリングの目的
リファクタリングの必要性を明確にし、以下の目的を目指します。
1. コードの可読性向上: コードを整理し、後から変更や追加がしやすい構造にする。
2. 保守性向上: メンテナンスが容易で、エラーやバグが発生しにくい構造を目指す。
3. パフォーマンスの最適化: 不必要な計算や処理を取り除き、効率的に動作させる。
リファクタリングの進行手順
1. 現状と課題の分析
・コードレビュー: 画面のバックエンド側のソースコードに対してコードレビューを実施し、改善が必要な箇所を洗い出す。
・課題リストの作成と優先度の決定: リファクタリング対象箇所をリスト化し、各箇所に対する解決策を検討した上で優先度を決定します。
2. コード修正とテスト
・リファクタリングの実施: 優先度の高い箇所から順次リファクタリングを進めていきます。
・テストの実施: 単体テストを行い、リファクタリング後も機能が正しく動作していることを確認します。また、自動化テストの適用範囲を広げ、効率的なテスト体制を整備します。
3. 品質確認
・最終品質確認: リファクタリング後のコードを試験環境にデプロイし、結合テストを実施して全体の品質を確認します。
リファクタリング対象のチェックリスト
No | 大項目 | 中項目 | チェック内容 | 重要度 |
---|---|---|---|---|
1 | 設計 | クラスの責務分離 | クラスが大きすぎず、1つのクラスが複数の責務を持たないようになっているか。 | 高 |
2 | 設計 | メソッドの粒度 | メソッドが短く、1つの責務に集中しているか。 | 高 |
3 | 設計 | インターフェース設計 | インターフェースで提供するデータが必要最小限に抑えられているか、不要なデータが含まれていないか。 シンプルでわかりやすい構造になっているか。 今後の機能追加や変更に備え、インターフェースが柔軟に拡張可能な設計になっているか。 |
高 |
4 | 可読性 | 命名規則の一貫性 | 変数名、メソッド名、クラス名が一貫性を持ち、コードの意図を明確に伝えているか。 | 低 |
5 | 可読性 | コメントの適切性 | 必要な場所にコメントがあり、コードの動作や意図が理解しやすくなっているか。 | 低 |
6 | 可読性 | コード構造の整理 | ループや条件分岐が見やすく整理され、コードの構造がわかりやすくなっているか。 | 中 |
7 | 保守性 | 定数の利用 | マジックナンバーやハードコードを避け、適切に定数を使用しているか。 | 中 |
8 | 保守性 | 条件分岐の簡潔さ | 条件分岐が複雑すぎず、理解しやすい構造になっているか。 | 中 |
9 | 保守性 | コードの再利用 | 共通の処理やユーティリティが独立したクラスやメソッドに整理されているか。 | 中 |
10 | パフォーマンス | 非同期処理 | 重たい処理を非同期で処理し、スループットとUIの応答性が保証されているか。 | 高 |
11 | パフォーマンス | ループの最適化 | 不要なループを削減し、処理効率を向上させているか。 | 中 |
12 | パフォーマンス | ライブラリの活用 | 適切なライブラリを効果的に活用し、パフォーマンスを改善しているか。 | 中 |
13 | 信頼性 | エラーハンドリング | 適切なエラーメッセージを提供し、ユーザーが問題を理解しやすくなっているか。 | 高 |
14 | 信頼性 | リトライロジック | 必要に応じて処理がリトライされる仕組みがあるか。 | 高 |
15 | 信頼性 | ログレベルの一貫性 | ログレベル(INFO、WARN、ERROR)が適切に設定されているか。 | 中 |
16 | 信頼性 | ログの記録 | 重要なアクションやエラーについて、必要なログが記録されているか。 | 中 |
17 | セキュリティ | データマスキング | ログに機密情報が含まれている場合、適切にマスク処理がされているか。 | 高 |