『レガシーソフトウェア改善ガイド』を読んだ

レガシーソフトウェア改善ガイド

本書『レガシーソフトウェア改善ガイド』は、タイトルの通り、「レガシー」なソフトウェアをいかにして改善していくか、というテーマの本です。

「レガシー」というと、『レガシーコード改善ガイド(下記書籍)』が思い浮かぶ方もいると思いますが、本書は『レガシーコード改善ガイド』の補完的な位置づけの本であるとみることもできます。

レガシーコード改善ガイド

ちなみに、上記2冊はいずれも翔泳社から出ているので、タイトル、装丁ともにシリーズものっぽい感じですが、『レガシーコード改善ガイド』の原書はWorking Effectively With Legacy Code、『レガシーソフトウェア改善ガイド』の原書はRe-engineering Legacy Softwareであり、出版社も異なります。

レガシーなソフトウェアとは

『レガシーコード改善ガイド』では、「テストがないコードはレガシーコードだ」という明快な定義にもとづいて、テストの困難なコードをいかにしてテスト可能にしていくか、ということを、非常に詳しく説明しています。コードの改善という観点からは、『レガシーコード改善ガイド』の内容は今でも十分に通用するものといっていいでしょう。

一方で、「コードさえ良ければそれでいいの?」という問題もあります。Webアプリケーションの開発では、開発環境の構築や、運用環境のメンテナンス等、コード以外にも気にかけるべき要素が多数存在します。

『レガシーソフトウェア改善ガイド』では、コードと、それをとりまく環境も含めた全体を「ソフトウェア」と定義しています。「レガシーなソフトウェア」とは、保守しづらいソフトウェアのことです。たとえば、開発環境の構築に何日もかかったり、本番環境の設定が文書化もコード化もされていないようなWebアプリケーションは、「レガシー」であるといえます。

本書の良いところ

各章の概要については、コードがレガシーになる原因のほとんどは、人間に関係している~『レガシーソフトウェア改善ガイド』よりに載っているまとめが良くできているので、こちらの参照をおすすめします。

個人的に印象に残ったのは、レガシーなプロジェクトに携わる開発者のモチベーションマネジマントに言及している点です。はじめに、レガシーなコードベースに対峙することは気が滅入る作業だと認めた上で、その処方箋を記載しています。第一歩としては、静的解析ツールによってコードの品質を定量化し、その変化を記録する、というものがあります。改善の状況が数値として見えるので、良いアイデアだと思います(ただし、保守フェーズに入っているプロジェクトはコードの変更量自体が少ないので、かえって気が滅入る恐れもあります…)。

具体的なリファクタリングのテクニックは『レガシーコード改善ガイド』に譲りますが、本書にもいくつかの改善例が記載されています。

また、コードのリファクタリングだけでなく、コードが動作するためのインフラ構築方法の改善(Ansible等の構成管理ツールの使用)、開発環境構築方法の改善(Vagrant + Ansible)、ドキュメンテーションの改善(READMEを書こう)等も紹介されています。

さらに、技術一辺倒な視点ではなく、「リファクタリングやリライトをするには、マネジメント層(ビジネス側)と折り合いを付ける必要がある」等の、実際の業務の中で改善を進めるための知見が述べられています。

『レガシーコード改善ガイド』には載っていないけれど、重要なことを、主にWeb開発の視点から記載した書籍といえます。

訳文について

こなれていて読みやすい訳文ですが、若干違和感のある訳語も見られます。
たとえば、Immutable Infrastructureは「不変の基盤」と訳されていますが、他でこのような訳を見たことがありません。一般には、訳さずそのまま使うか、カタカナ化して使うことが多いでしょう。
とはいえ、読者の方で補完可能な程度の瑕疵なので、それほど問題にはなりません。

まとめ

『レガシーソフトウェア改善ガイド』は、レガシーなプロジェクトに立ち向かう方法論を解説した書籍です。『レガシーコード改善ガイド』と比較して、より概説的で、ページ数も少ないです。

どちらを読もうか迷っている場合は、『レガシーソフトウェア改善ガイド』で総論を押さえてから、『レガシーコード改善ガイド』でコードの改善方法をみっちり学ぶ、という順番がオススメです。

コメントを残す