リファクタリングとは
リファクタリングとは、ソフトウェアの挙動を変えることなく、その内部構造を整理することです。
挙動に問題がなくても、内部のコードが最適な状態とは限りません。無駄なコードが多く、分かりにくい構造になっていることがあります。リファクタリングでは、このようなコードを整理して洗練された状態に変えます。
なお、機能追加やバグの修正はリファクタリングではありません。リファクタリングは、外部から見たときのソフトウェアの挙動を変えない範囲での変更だからです。
リファクタリングの目的
つづいて、リファクタリングの目的を見ていきましょう。
ソフトウェアの劣化を防ぐため
リファクタリングされていないソフトウェアは早く劣化します。この場合のソフトウェアの劣化とは、コードが複雑になることです。洗練されていないコードには重複部分が多く存在し、バグが発生しやすい状態です。
さらに、リファクタリングされていないソフトウェアはバグの修正が難航します。プログラムの全体像を把握するのが難しく、どこに手を付けてよいのかわかりづらいためです。
このように、複雑なコードは二重の意味でバグのリスクが高いです。そのリスクを低下させるのがリファクタリングの目的の1つです。
コードを理解しやすくするため
とりあえず動けばよいという考え方に基づいて作成したコードは、後から見た際に分かりづらいです。他者が書いたものを理解しづらいのはもちろん、自分が書いたものでも分からないことがあります。これでは、機能を追加する際や業務の引継ぎにも苦労します。
リファクタリングすれば理解しやすいコードになり、自分やほかのプログラマーの苦労を減らせるでしょう。さらに、リファクタリングの過程で理解を深められるのもメリットです。
開発速度を向上させるため
リファクタリングはソフトウェアの挙動を変えない範囲での変更です。そのため、開発において余計な手間と感じる人も多いでしょう。しかし、リファクタリングは結果的に開発速度を向上させます。コードの理解が容易になり、修正や機能追加が円滑化するためです。
身近な例にたとえると、机の上が散らかったまま作業するより、整理してから作業したほうが捗るのと同じです。特に大勢が関わるソフトウェア開発においては、コードが整理されていることのメリットは侮れません。
リファクタリングの方法・手法
リファクタリングにより読みやすいコードを実現するためには、以下の作業を行いましょう。
- まとまった処理をメソッドとして重複部分を減らす
- コードは重複部分が多いと読みにくくなります。また、ロジック変更時には重複部分がすべて対象になるため負担が大きくなります。分岐条件が追加される際は、各ケースに重複部分があれば、さらに重複部分が増えてしまいます。
- ネスト(入れ子)を浅くする
- ネストが深いと条件が分かりづらく、テスト時に漏れが生じるかもしれません。条件の順番を入れ替える、一部をメソッドとして抽出するなどしてネストを浅くしましょう。
- 変数や関数の名称をシンプルにする
- 名称が内容を簡潔に表現できていれば理解が円滑化します。他者に誤解される名称は避けましょう。
- また、これらの作業を円滑化するにはツールの利用が有効です。リファクタリングをサポートする機能が備わった開発ツールを使えば、リファクタリングの手間と人為的ミスを減らせます。
リファクタリングの注意点
リファクタリングを行う際にはどのような点に注意すればよいのでしょうか。
作業を行うタイミングを決める
リファクタリングは行うタイミングを決めにくい作業です。機能追加やバグ修正のように必要に迫られて行うものではないためです。そのため、どのタイミングで行うのかあらかじめ決めておきましょう。有効なタイミングを2つ紹介します。
- 機能追加やバグ修正を行う前
- リファクタリングの目的の1つは、機能追加やバグ修正の円滑化です。そのため、これらの作業を行う前に実施すれば効果を実感できるでしょう。
- 改善の余地を見出したとき
- ネストが複雑になっている、重複部分が多いなど、分かりづらいと感じた際に実行します。また、複雑な条件判定がある場合も改善の余地があると判断できます。
作業を小さくし、何度もテストをする
リファクタリングは前後でソフトウェアの挙動が変わってはいけません。そのため、リファクタリング後には必ずテストし、挙動が変わっていないことを確認する必要があります。
そのため、リファクタリングの作業は細かく分割して行うことが推奨されています。広範囲にわたるコードを一息にリファクタリングし、テストにパスできなくなると、どこに問題が生じたのか分かりづらいためです。
こまめにバックアップを取る
リファクタリングの作業中にはこまめにバックアップを取りましょう。テストもこまめに行いますが、問題発生時の手戻り工数を極力減らすためには、合わせてバックアップも取るべきです。
ただし、バックアップをあまり頻繁に取るとバージョン管理が大変になります。ファイルのバージョン管理ツールなどを活用するとよいでしょう。
リファクタリングを行い、ソフトウェア開発の質を高めよう!
リファクタリングとは、ソフトウェアの挙動を変えることなくコードを整理することです。以下の目的で行われます。
- ■ソフトウェアの劣化を防ぐ
- ■コードを理解しやすくする
- ■開発速度を向上させる
リファクタリング時には以下の点に注意しましょう。
- ■作業を行うタイミングを決める
- ■作業を細かく分けテストを行う
- ■バックアップをこまめに取る
以上を踏まえ、ソフトウェア開発の質を高めましょう。