読書メモ:リファクタリング(第2版): 既存のコードを安全に改善する
プログラミングにおいて「リファクタリング」という言葉は痛いほど耳にしますが、「既存のコードを改善し、保守しやすくすること」という漠然とした印象に留まっている人も多いのではないでしょうか。
私自身も言葉だけの理解に留まっており、具体的にどのような作業がリファクタリングに含まれるのか、その実践的な手法を学びたいと思い、本書を手に取りました。
内容としては、第1章で著者のマーティン・ファウラーが実際のコードを題材にリファクタリングを進めながら解説していきます。いきなりコードベースの改善が始まるため、初見では内容を追うのがなかなか大変でした。
続く第2章では、「リファクタリングとは何か」が定義されます。第1章の流れから以降もコード中心で進むのかと思いきや、この章では文章による解説が中心となります。第1章のコードを完全に理解できなくても、まずは読み進めることで本書の全体像を掴める構成になっています。
第3章では、リファクタリングのきっかけとなる「コードの臭い(Code Smell)」について解説されます。どのようなコードに改善の余地があるのかを判断するための観点が整理されており、実務経験のある開発者ほど共感しやすい内容だと思います。
第4章では、リファクタリング後もプログラムの振る舞いが変わっていないことを保証するためのテストについて説明されます。本書では一貫して「動作を変えずに内部構造を改善する」というリファクタリングの原則が強調されており、そのためにテストが重要な役割を果たすことが理解できます。
そして実際のリファクタリング手法については第6章から始まります。第6章以降はリファクタリングのカタログとなっており、「関数の抽出」「変数名の変更」「条件記述の単純化」といった手法がパターンごとに整理されています。状況に応じてどの手法を適用すべきかが明快に説明されており、本書の中心となる部分です。
本書の内容はオブジェクト指向プログラミングを前提としたものが多く、クラスや継承を活用したリファクタリングが数多く登場します。そのため、関数型プログラミングの色が強い開発スタイルとは必ずしも一致しない部分もあります。しかし、責務の分離や重複排除、意図が伝わるコードへの改善といった考え方はプログラミングパラダイムを問わず有用であり、現在の開発現場でも十分通用する内容だと感じました。
また、本書ではJavaScriptを題材に解説が行われています。個人的には、旧版のJavaを題材にした説明の方がオブジェクト指向の構造を理解しやすかったように感じます。JavaScriptは柔軟な言語である反面、動的型付けゆえにコードの意図を追いにくい場面もありました。ただし、現代のWeb開発者にとってはJavaScriptの方が馴染みやすいという利点もあるでしょう。
コードを分かりやすく書くという観点では、『クリーンコード』や『リーダブルコード』と共通する内容も少なくありません。しかし、それらの書籍が「良いコードの原則」を中心に扱うのに対し、本書は「既に存在するコードをどのように改善していくか」に重点を置いています。共通する原則が繰り返し登場することからも、これらは時代や言語を超えて通用する普遍的なソフトウェアエンジニアリングの知見なのだと感じました。
リファクタリングという言葉を知っていても、具体的に何をどのような手順で改善するのか説明できない人は少なくないと思います。本書はそのギャップを埋めてくれる一冊であり、ソフトウェア開発に携わる人であれば一度は読んでおく価値があると感じました。
