プログラミングの学習経験がある場合、「リファクタリング(Refactoring)」を耳にしたことのある方も多いでしょう。
しかし、「実際にリファクタリングってなに?」「リファクタリングを実施するメリットってあるの?」といった疑問が出てくる方も多いのではないでしょうか。
そこで本記事では、「リファクタリング(Refactoring)」の概要や目的、実施するメリット・デメリットについても解説しています。
少しでもプログラミングやリファクタリングに興味がある方には、ぜひ参考にしてみてください。
リファクタリングとは?
IT用語の一つである「リファクタリング」とは、プログラミングにおいて、プログラムの外部的な動作を変えるのではなく、内部的な構造を整理することです。つまり、プログラムの動きはそのままにして、人間の手によって書かれた「ソースコード」のみを書き換えるということになります。
また、『プログラマなどの間で、常日頃からプログラムを整理し、仕様変更にも対応できる整理されたプログラムを書いていく考え方が生まれた。この過程では、ウォード・カニンガム、ケント・ベック、ラルフ・ジョンソン(GoFの一人)などの人々が大きな役割を果たした。この手法がリファクタリングと呼ばれている。』とあり、リファクタリングは外国の技術者たちによって生み出された手法であることがわかります。
リファクタリングといっても様々な種類のものがあり、この用語自体に厳密な定義があるわけではありません。「動きが変わらないなら、リファクタリングをする意味あるの?」と考えている方もいるかもしれません。そこで、次にリファクタリングをする目的について紹介していきたいと思います。
リファクタリングを実施する目的
そもそも、なぜリファクタリングが生まれたのでしょうか。リファクタリングを実施する目的は、以下の通りです。
・プログラマーの負担を軽減するため
・コードをより分かりやすくするため
・トラブルが起きた時により早く処理するため
・システムを長く使用するため
などと、いくつかあります。リファクタリングが無い頃は、一度完成したコードには手をつけてはならないといわれており、プログラム上でトラブルが起きた際に、修正するために一から行う必要があったようです。
これでは、プログラマーも大変な労力を要すると共に、解決まで時間がかかるでしょう。リファクタリングを行って、定期的にプログラムを整頓することで、トラブルが起きても該当箇所のみを修正すれば良く、プログラマーの負担は軽減されると共に、短い時間で解決することができます。これにより、以降も素早くバグやトラブルを発見することができ、システムをだめにすることなく長く使用することができます。
これらに関連する話は、下の「リファクタリングのメリット」の項でも解説していますので、より詳しく知りたいという方は、そちらもご覧ください。
リファクタリングを行う方法
プログラミングを始めたばかりの方や学生などの、知識や経験が浅い方でも、リファクタリングを行うことは可能です。この項では、具体的なリファクタリングの方法について説明していきます。この項では、「リファクタリングを行う方法」として、リファクタリングをする上でのポイントをいくつかまとめてみましたので、これらを意識しながら取り組んでみてください。
コード重複部分を減らす
ただでさえコードはアルファベットや数字が組み合わさっていて、読みにくいものです。そこに重複しているコードがあると、更に読みにくくなるうえ、コード完成後に修正を行う際に時間がかかります。コードの重複部分を減らすようにしましょう。
ネストを浅くする
「ネスト」とは、「入れ子」と訳されることの多い、プログラミング言語の一種です。具体的には、if文の中にif文を入れ、またその中にif文を入れ…というようなコードは、「ネストが深い」といわれ、あまり好まれません。
また、ネストが深いとバグが生まれやすくなるともいわれています。無理をして一つにまとめる必要はありませんが、ネストはできるだけ浅くなるようにコードを書くべきでしょう。
名称を整理する
プログラミングでは、自分で関数などを定義することがありますが、それが長く複雑なものになってしまうと、細かな修正を行う際にも関数の確認や入力に時間がかかってしまいます。
また、自分が作成したコードを他のプログラマーが編集するとあうことがあるかもしれません。その時に、複雑なコードだと理解出来ず、作業が滞ってしまうでしょう。定義した関数の名称は、単純でありながらも一目見て役割が分かりやすいものが良いでしょう。リファクタリングの際に扱いやすいように、関数の名称やはたらきをまとめた表などを作成することをおすすめします。
リファクタリングのメリット
ここまでリファクタリングの目的や方法について説明してきましたが、続いてはいよいよリファクタリングの「メリット」についてお話しします。ここではリファクタリングをするメリットを五つにまとめたので、作業の参考にしてみてください。
メリット1:コードをすぐに理解できる
前述した「リファクタリングの方法」の「名称を整理する」の部分でもお話ししたように、リファクタリングにおいてコードを整理しておくと、すぐに理解でき、作業に取り掛かることができます。
他人が書いたコードでも、きちんと整理されていれば、コードの意味や役割がすぐ分かるでしょう。ちなみに、このメリットは、以下に挙げるメリットたちに大きく関連してくるので、よく覚えていてくださいね。
メリット2:プログラミング速度が向上する
コードの理解がうまくできれば、修正・編集すべき箇所が良く分かります。よってそれらの箇所のみを修正すれば、プログラミング速度が向上し、作業時間が短縮できます。
リファクタリング自体は手間がかかることもありますが、最終的にはプログラミング時間を大きく短縮することができるので、ぜひ取り組んでみてください。
メリット3:スムーズにソフトウェア設計を改善できる
ソフトウェア設計の改善作業も、プログラムしたコードの修正・編集作業にすぎません。リファクタリングをすることによりコードが分かりやすく整理されれば、この改善作業もスムーズに行えることでしょう。
メリット4:素早くトラブル対応が可能
リファクタリングをしなければ、コードが複雑な並びのままで、トラブルが起こった際に原因となる部分を探すのに時間がかかります。リファクタリングを行いコードを整理することで、トラブルの原因となっているであろう箇所を容易に推測でき、素早く解決することができます。
トラブル対応が長引くと、うまくいかずにイライラしたり、クライアントや同じチームのメンバーから催促を受けたりと、精神的なストレスを感じることがあるかもしれません。素早いトラブル対応ができるよう、積極的にリファクタリングを行っていきましょう。
メリット5:システムを長く利用できる
リファクタリングによりコードが整理され、バグやトラブルにも素早い対応ができるようになったプログラムはとても強固なものです。トラブルへの対応ができず、システムが使用できなくなる、ということも無くなるため、より長く利用できることでしょう。
新しいシステムを一から作成するというのはかなりの労力を要する者だと思われます。既存のシステムをより長く使用できるのも、リファクタリングの最大のメリットの一つです。
リファクタリングのデメリット
ここまで、リファクタリングのメリットを五つ紹介してきました。「こんなにメリットがあるなら、僕・私もやってみよう。」と思った方もいると思います。しかし、リファクタリングは簡単で一瞬でできる…。というわけではなく、少し手間がかかるところもあります。リファクタリングをする上での複雑さというのも多少は存在しますので、ここで紹介していきたいと思います。デメリットとして否定的にとらえるのではなく、「ここを特に注意しなければいけない」と認識し、リファクタリングを進めていただければ幸いです。
デメリット1:こまめにバックアップを取る必要がある
リファクタリングの作業中にも、作業者のミスやコードの不具合が起こることがあります。その時に、毎回はじめに戻って作業をやり直していたら、とても長い時間がかかります。
これはリファクタリングに限りませんが、作業中こまめにバックアップをとったほうがよいでしょう。手間がかかると感じる人もいるかもしれませんが、リファクタリングには地道な作業が必要になってきます。
デメリット2:繰り返しテストの実行が必要
そもそも、実際に稼働している、または公開しているソフトウェアにおいてリファクタリングを行う際は、「テストコード」を別に用意しなければなりません。テストコードとは、リファクタリングを行うコードのコピーのようなものです。
ここで修正・編集や、動作の確認などを行います。実際に稼働しているものを直接編集すると、リファクタリングでミスをしたり、不具合が起きたりした際に変更に手間がかかります。「テストコードは何度も書いたり消したりできる下書き用紙」「実際に公開するコードは失敗できない清書用紙」という認識を持つと良いのではないでしょうか。
何度もテストを行い、不具合のないコードを作り上げるのには手間がかかります。リファクタリングにかけられる時間をきちんと考えながら作業を進めるようにしましょう。
デメリット3:どこに手を加えるべきかわからなくなる
リファクタリングは、一度完成されたコードに手を加えるわけですから、慣れていなければ、どこを修正すれば分からなくなるかもしれません。完成されたコードなので、「本当にここを修正して良いの?」と思ってしまい、どこから作業を始めたら良いか分からなくなるということも考えられます。
そのため、リファクタリングを行う前に、ここはそのままにしてここは修正する、というように、作業の指針を立てると良いでしょう。
まとめ
以上、リファクタリングの方法や目的、メリット・デメリットについて解説しました。リファクタリングは手間がかかり、いくつか注意点もある少し難しい作業です。しかし、うまく行うことができれば、コードが整理されて理解しやすくなり、リファクタリング後のコードの編集やソフトウェアの設計もスムーズに行えます。
現在稼働しているプログラムが、何年後、何十年後にうまく動作するとは限りません。
現代でも十分情報通信技術は発達していますが、これからもっと発達の余地があるからです。技術」の発展により、プログラミングの仕組みが変化することもあるかもしれません。時代に合った形式でプログラミングを行わないと、正常に動作しなくなることもあるでしょう。
その際は、リファクタリングを活用しましょう。プログラムの書き換えが楽で、時代の変化にも柔軟に対応可能です。興味のある方は、本記事を参考にリファクタリングについて学んでみてはいかがでしょうか。