『Refactoring, Second Edition』を読んだ
本書は最近ではマイクロサービスの提唱者として有名なMartin Fowlerによる、リファクタリングという言葉を広く普及させた名著の第2版です。1999年の初版発売から実に20年近くぶりに刷新されました。
例に使用する言語は初版ではJavaでしたが、第2版ではJavaScriptになったことでも話題になりました。一番広く読んでもらえる言語であろうということが採用に至った理由のようです。
まだ日本語訳版は出版されていないですが、InformITで電子版を購入し、著者がCanonicalバージョンと呼ぶブラウザで読むWeb版を読みました。
構成
本書は以下のような構成になっています。
Kent Beckによるテスト駆動開発本と同じく、いきなり原則から入らず、まずは小さな例を取ってリファクタリングがどういうものか導入するという構成になっています。そのためリファクタリングがとても実践的なものだということが実際の例で解り、その後に続く原則やカタログが頭に入ってきやすかったです。
Martin Fowlerというと小難しい文章を書く人なのかなという先入観があったのですが、平易な文章で時にはジョークも混ぜて解りやすく書いてあったため理解しやすかったです。
感想
リファクタリングを行う大前提として対象コードにテストが書いてあることが条件としてあります。テストがあるからこそ小さなステップで動作を確認しながら変更を行うことができます。テストを書くことの重要性を再度認識しました。
また、リファクタリングはただコードを綺麗にしたり、エンジニアリング実践をするためのものではなく、結果として機能追加やデバッグを速くする経済的なものであると著者は言っています。 当たり前ですが、ソフトウェアというものは一度作成したら完成というものではなく、常に変化するものです。その変化を容易にする手段としてリファクタリングが重要になってくるのだと思います。最初から完璧なコードを書くことは不可能なので、いかに小さなステップでイテレートして改善していくかが大事なのではないでしょうか。
IDEにリファクタリングの機能が搭載されていたり、テストが実行しやすくなったり、昔よりもリファクタリングが行いやすい環境になっていると思います。リファクタリングできそうなコードを見つけたら積極的に行っていきたいです。
最後に
本書の中で出てくるKent Beckのこの言葉が印象的でした。
I’m not a great programmer; I’m just a good programmer with great habits.
ボーイスカウト・ルールを意識しつつ、良い習慣を持つプログラマーになれるよう日々努力していきたいと思いました。