コードを全面的に書き直すよりもリファクタリングを少しずつ積み重ねるべき理由
by Pressmaster
コードの動作を変えることなく内部の構造を整理するリファクタリングと、CやJavaといった古い設計の言語で書かれたコードを先進的な言語で新しく書き直すことは、どちらもコードを変更する点は同じです。しかし、どうしても書き直しが必要な場合を除けば、リファクタリングを積み重ねていく方が望ましいとソフトウェアエンジニアのJustin Fullerさんが指摘しています。
Why do we fall into the rewrite trap? | Justin Fuller — Software Engineer
https://www.justindfuller.com/2020/01/why-do-we-fall-into-the-rewrite-trap/
Fullerさんはいくつかの会社に勤務した経験がありますが、どの会社もリファクタリングを重視する風土があったとのこと。例えば最初に勤めていた会社では、ColdFusionという古いアプリケーションフレームワークが使われていましたが、チーム全体で機能の追加やバグの修正といった改善を続けた結果、生産性は少しずつ向上し、会社も市場シェアを奪い増益を達成したそうです。
Fullerさんはリファクタリングを積み重ねることを推奨する理由として、「コードは書くよりも読む方が難しいが、読んで得られるものは大きい」ことをあげています。他人が書いたコードを読むのは少々混乱しますが、ログによるデバッグ結果やエラーの回避方法など、元々コードを書いた人が積み重ねたものは開発物を理解する上でとても役に立つとのこと。「理解できない」という理由でコードを書き直すことは望ましくないとFullerさんは語っています。
by Ed Robertson
また、古い設計の言語で書かれたコードが必ずしも悪いとは限りません。現在Fullerさんはニューヨーク・タイムズに勤務していますが、PHPやJavaといった古い言語のAPIがどのように関わりあっているかを調査する必要があると知った時、その複雑さを想像すると震え上がったそうです。しかし、それらのコードは昔からのリファクタリングによって洗練され、入社して2カ月で会社のコード群を使いこなせるほど、理解しやすく整理されていました。
リファクタリングは重要ですが、時にはコードをすべて書き直すことも必要。その絶好の機会は製品そのものを見直す時だとFullerさんは述べています。製品を取り巻くビジネスが不調であり、製品の開発者たちもコードに不満を持っている時、コードの全面的な書き直しは効果を発揮します。また、非常に複雑で品質が低く、一部を変更すると必ずバグが出てしまうようなコードも書き直しに値するとのこと。
by Roozbeh Eslami
すべての場面でリファクタリングが望ましいわけではありませんが、基本的には全面的な書き直しではなくリファクタリングを志向すべきとのこと。ソフトウェアエンジニアとして広く知られているMartin Fowler氏が著した「Refactoring」を読めば、リファクタリングに対する深い理解を得られるとFullerさんは語っています。
・関連記事
ソフトウェア設計者がステップアップのために心がけるべき8つの習慣 - GIGAZINE
Googleがコードレビューにおいてスムーズにコミュニケーションを進めるための注意点を公開 - GIGAZINE
20年前の「2000年問題」の影響が時間を超えて各所で起こっているとの報告 - GIGAZINE
「技術的負債とはどういうものなのか?」をテトリスに例えるとこうなる - GIGAZINE
ソフトウェアエンジニアがハードウェアのプログラミングをする時に注意すべきこと - GIGAZINE
・関連コンテンツ