リファクタリングとは?メリットやデメリット、注意点を解説します

「リファクタリングって何を指すのだろう。会社にとってどんなメリットがあるのかな」
と思っている方。
リファクタリングとは「外部から見た時の挙動は変えずに、プログラムの内部構造を整理すること」です。リファクタリングによりシステムを長く使い続けることや、トラブル時の対応を早めることが可能です。
とはいえ、リファクタリングが会社の事業にどんな良い影響を与えるのか、なかなかわかりづらいですよね。
そこで、この記事では、
- リファクタリングの概要
- リファクタリングのメリット、デメリット
- リファクタリングをする際の注意点
- リファクタリングに使えるツール
を、お伝えします。
リファクタリングを完璧に理解するのは難しいのですが、概要をつかむだけなら簡単です。まずはこの記事で、リファクタリングについてざっくり理解しましょう。
【目次】
- リファクタリングとは、「外部から見た時の挙動は変えずに、内部構造を整理すること」
- リファクタリングのメリット
- リファクタリングのデメリット:工数がかかっているように見える
- リファクタリングをすべきタイミング
- リファクタリングの注意点
- リファクタリングの際に役立つツール
- リファクタリングによって、保守性の高いプログラムを!
リファクタリングとは、「外部から見た時の挙動は変えずに、内部構造を整理すること」
リファクタリング(Refactoring)とは、「外部から見た時の挙動は変えずに、プログラムの内部構造を整理すること」です。
例えるなら、リファクタリングは部屋の整理整頓のようなもの。今のところ特に問題はないけれども、物が増えたときなどに備えて今ある物を整理整頓するのがリファクタリングなのです。
あくまで外部から見た時の挙動は変えないため、機能追加はリファクタリングではありません。
またリファクタリングは、動作そのものには問題のないプログラムが対象です。したがってバグの修正も、リファクタリングではありません。
具体的には、
- 構造の階層化
- プログラム内の要素につける名前を、簡潔なものに書き換える
などがリファクタリングにあたります。
次では、リファクタリングのメリットをご紹介します。
リファクタリングのメリット
リファクタリングのメリットは、以下の3つです。
- 設計の劣化を防ぐことができ、システムを長く使える
- コードを理解しやすくなり、引き継ぎ時の手間が減る
- 修正、追加をより早く、正確に行えるため、トラブル時の対応が速くなる
以下、それぞれを解説します。
設計の劣化を防ぐことができ、システムを長く使える
まずリファクタリングによって設計の劣化を防ぐことができ、システムを長く使えるようになります。
ここでの設計の劣化とは、コードが煩雑になることなどです。部屋に例えるなら、物が散らかった状態ですね。
煩雑になったコードはトラブルの元になります。プログラムの仕組みがわかりにくいために、例えばプログラムをちょっと変えたつもりが、別の部分で意図せず大きな変化が起きる可能性があります。
このような状態になると、改善も簡単ではありません。
リファクタリングによって、システムがそのような複雑な物になるのを防ぐことができます。この点においてリファクタリングは、将来のトラブルを減らしている可能性もあります。
コードを理解しやすくなり、引き継ぎ時の手間が減る
リファクタリングによって、コードを理解しやすくなり、引き継ぎ時の手間が減ります。これはバイキング形式のレストランに例えるとわかりやすいです。
料理がなんの区別もなく並べられたレストランと和・洋・中で分けられたレストランでは、後者のほうがどこに何があるか、がわかりやすいですよね。
このようにリファクタリングによって、コードを理解するのにかける時間を減らすことができます。
修正、追加をより早く、正確に行えるため、トラブル時の対応が速くなる
リファクタリングによってコードがシンプルになっていると、トラブル時の対応も速くなります。
例えば片付けてない部屋でケータイが鳴っても、すぐには見つけられませんよね。
一方で綺麗な部屋なら、ケータイをすぐに見つけることができます。このようにリファクタリングによって、バグの早期発見ができる可能性があります。
リファクタリングのデメリット:工数がかかっているように見える
リファクタリングのデメリットは、工数がかかっているように見えることです。前述の通りリファクタリングの対象は問題なく動いているコード。それをわざわざ修正するのは、一見無駄な作業に見えるかもしれません。
しかしメリットにあげたように、リファクタリングは長期的に見れば、むしろ将来のトラブルやそれにかける時間を減らしている可能性もあります。
次では、リファクタリングをいつ行うべきか?を解説します。
リファクタリングをすべきタイミング
以下の2つが、リファクタリングをすべきタイミングです。
- プログラムに改善の余地を見つけたとき
- 機能など、プログラムを追加するさい
プログラムに改善の余地を見つけたとき
まずプログラムに改善の余地を見つけたときは、リファクタリングの実行に適しています。思い立ったが吉日、ということですね。
具体的な改善の余地としては、例えばifなどの入れ子の構造が、何重にもなっている、などが挙げられます。これら改善の余地は、実際にコードを見るプログラマが見つけることが多いです。
機能など、プログラムを追加するさい
機能追加のタイミングでリファクタリングをするのも有効です。しかしここで重要なのは、機能追加とリファクタリングは分けて行うこと。
機能追加とリファクタリングを分けることで、問題が発生したときの対処をしやすくなります。
次に、実際にリファクタリングする際の注意点を紹介します。
リファクタリングの注意点
リファクタリングする際の注意点としては、以下の4つが挙げられます。
- 最初に、リファクタリングの対象を絞り込む
- バックアップをとっておく
- ステップを細かく分けて進める
- 何度もテストをする
以下、それぞれを解説します。
最初に、リファクタリングの対象を絞り込む
最初に、リファクタリングの対象を絞り込む必要があります。なぜならリファクタリングするからといって、対象のプログラム全体が悪い、というわけではないため。
リファクタリング対象のプログラムには、長年使われてきた実績があります。その実績を考慮して、まずは良い点、悪い点をそれぞれ把握。次に良い点は残す一方で、複雑でよく修正するものからリファクタリングするのがおすすめです。
バックアップをとっておく
リファクタリングの前また最中は、頻繁にバックアップをとっておくのがおすすめです。こうすることで、リファクタリング中に問題が起こった場合に、すぐに元に戻せます。
ステップを細かく分けて進める
リファクタリングは、ステップを細かく分けて進めるのが重要です。というのもそのほうが、バグが発生した時の修正が容易なため。
部屋掃除にしても、全体を一気にやるよりは、部分ごとに分けた方がいいですよね?全体を一気にやると、物をなくす可能性があります。
何度もテストをする
リファクタリング前後でプログラムが今まで通りに動作するのか、確認する必要があります。テストはステップごとにやるのがおすすめです。
リファクタリングの際に役立つツール
ここではリファクタリングの際に役立つツールとして、以下の5つを紹介します。
- Lattix
- understands
- Eclipse
- flake8
- SourceMonitor
Lattix:アーキテクチャ分析ツール
「Lattix」は、テクマトリックス株式会社が提供しているアーキテクチャ分析ツールです。
具体的には、ソフトウェア内の要素間の関係を表形式で可視化してくれます。これにより構造上の問題点が一目でわかるように。
Lattixは、15日間の無料体験版が提供されています。

https://www.techmatrix.co.jp/product/lattix/index.html
understands:ソースコード解析ツール
「understands」は、テクマトリックス株式会社が提供しているソースコード解析ツールです。主にLattixよりも細部の問題を探す際に使われます。
Lattixと同じく、プログラム内の部分同士の関係を図で表示する機能があります。

https://www.techmatrix.co.jp/product/understand/
Eclipse:phpなどに使える名前変更、移動ツール
「Eclipse」は、エクリプス財団が提供しているオープンソースソフトウェアです。プログラム上におけるラベルのような物、クラスや変数を一括して変更できます。

https://www.eclipse.org/
flake8:Pythonの文法チェックツール
「flake8」は、PyPIが提供している文法チェックツールです。「Python」というプログラミング言語で書かれたプログラムに対して使用されます。「Python」の言語には使えません。
flake8でプログラムを読み込むと、エラーメッセージとエラーが起きる部分が検出、表示されます。エラーが多いものから表示されるので、緊急度も大まかに把握できるのが特徴です。

https://pypi.org/project/flake8/
SourceMonitor:C#などのコードの複雑さを計測するツール
「SourceMonitor」は、Campwood Softwareが提供しているツールです。C#、Java、HTMLなどの言語に対応。
プログラムの階層がどれほど深くなっているか、などを計測できます。

http://www.campwoodsw.com/index.html
リファクタリングによって、保守性の高いプログラムを!
この記事では、最初にリファクタリングとは「外部から見た時の挙動は変えずに、プログラムの内部構造を整理すること」である、と述べました。
次にリファクタリングのメリットとして、
- プログラムの品質を保つことができる
- 引き継ぎの手間が減る
- トラブル発生時の対応を速くすることができる
を挙げました。
リファクタリングは、プログラマが「このプログラムは改善できる」と思った時や、機能追加の際にやるのがおすすめです。
実際にリファクタリングを行う際には、作業を細かく分けて逐一テスト、バックアップを取らなくてはなりません。
そして最後に、リファクタリングに役立つツールを紹介しました。
リファクタリングは上手くやれば、システムの保守性を高めることができます。リファクタリングを作業に予め組み込むことで、未来のトラブルを減らしましょう。
PR:「EC-ORANGE」のパッケージ販売に加え、多くの構築ノウハウを生かした受託開発をおこないます。

>>お問合せはこちらから