見出し画像

リファクタリングって何?

※この記事は、リファクタリングにまつわる関係者の温度差などを浮き彫りにする記事です。

たまにリファクタリングやったらバグになった、っていうケースがあって、「リファクタリングとか何が良くなるのか分からないからやらないで~!」みたいなことを指示されてるプロジェクトもあったりしますが、それのしわ寄せは必ず来るので、いいことばかりではないです。

リファクタリングをやらないとどうなるか?というと、人間で言ったら、生活習慣病になって早死にするっていうことです。もしくは、医者も面倒見切れなくてさじを投げる状態になる、ということです。だから、リファクタリングをやらないっていうスタイルは、今さえ良ければいい、っていう刹那的な考え方っていうことです。まぁ、使い捨てのプログラムであれば、それでいいでしょうけどね。

私がちょいちょいやってる、E2Eとかの自動テストプロジェクトでは、リファクタリングって、やりやすいです。なんでかっていうと、自動テストプロジェクトってもちろん、それ自体が全体としてテストだからです。だから、ちゃんと動くかどうかは、一通り、実行して流せば確認できるから、ってことです。

リファクタリングでバグになるのは、単体テストとかのテストを作ってないケースで多いと思います。なんで作ってないのかというと、作る時間が無いとか、最初からちょっとずつ作ってないから、後からまとめて作ろうとすると、「そんなに時間かかるんだったら今はやらなくていい」とかいう感じで、先延ばし先延ばしになってるからなんですよね。まず、プロジェクトの最初で、単体テストをちょっとずつでも作れる体制にしとく、っていうのが正解ですね。

あと、リファクタリングの中でも、特に大規模なリファクタリングをする場合、リファクタリングの影響かどうかの切り分けをしやすくするために、リファクタリングのみが入ったバージョンと、そこにさらに、機能追加が入ったバージョンを分けたいっていうこともあるんですが、製品を売る人の立場からすると、リファクタリングが入っただけで新バージョンなんかにしても売れるわけないから、機能追加も一緒にやってほしい、っていう話になるんですが、それだとバグになった場合の切り分けはできなくなって、調査は難航するんですよね。そうなると、このケースでもリファクタリングはやらなくていい、って話になりやすいですが、やはり、後で苦労するっていうことですね。

たとえば、Ver3.0.0はリファクタリングのみのバージョンとして、売るのはVer3.1.0からにするとか、そういうふうにすればいいんでしょうけど、いかんせん、売る側は、早く機能追加がされたところを見たいから、3.0.0の段階でも何か入れてよ!みたいになるんですが、そうなると、今書いた状況になります。売る側と作る側の溝は深いです。こういうケースでは、最初から「3.0.0がある」っていうこと自体黙っておいてもいいのかもしれません。対外的には「バージョン3」とだけ言っておいて、3.0.0は開発内専用バージョンにするとか、です。

おわり。


この記事が気に入ったらサポートをしてみませんか?