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

めっちゃ似た名前の"レガシコード改善ガイド"とは別の本。レガシーコード改善ガイドは結構前の本だけど、このレガシーソフトウェア改善ガイドは去年刊行されたばかりだ。hitodeくんと会話してて気運が高まったので読んだ。

レガシーソフトウェア改善ガイド (Object Oriented Selection)

レガシーソフトウェア改善ガイド (Object Oriented Selection)

この本は、レガシーソフトウェアがメインのテーマにしているけれど、古びてどうにもならなくないソフトウェアプロジェクトへの対処のみにフォーカスしているのではなく、普段から開発しているコードをどうやって継続して進化させられるかといった内容が主で、どんなソフトウェアエンジニアにも勧められそう。

この本の章の構成をみると、大きくはリファクタリングに関する章と、プロジェクトのワークフローと基盤整理に関する章に分けられる。

リファクタリングに関する章では、プロジェクトのコードの状態が悪くなった時に対処する作戦として、リファクタリング/リアークテクティング/ビッグリライトの3つを紹介しながら、何を基準にどの作戦を採用すればよいかを教えてくれる。

リアーキテクティングのゴールの一つとして、マイクロサービスのような流行のアーキテクチャについても言及があるが、実際的なメリットとデメリットがまとめられていて(デメリットのほうがリストが長い)、技術的なおしゃれさに引きずられない、バランスの良い解説が読める。

技術的なテクニックだけでなく、リファクタリングを"開発者のための開発"のみに陥らせずに、プロジェクトの成功に結びついた活動にするためのポイントも、逐一丁寧に言及されているのも落ち着きがある。例えば、リファクタリング自体を目的にせずに、機能Xを実現するために必要なタスクとしてリファクタリングをとらえることで、チームにも説明可能になるし、リファクタリングのスコープをまちがえずに済むといったことが紹介されている。しかたないので、自分のメインの仕事のじゃまにならない範囲で手をつけてみるみたいな作戦も載っていて生々しい。

"もし価値のないソフトウェアを作ってしまったら、コードがどうだろうと誰も気にしない" のようなフレーズがちょいちょい現れて心に刺さる。

プロジェクトのワークフローと基盤整理に関する章については、手元の開発環境やテスト環境、プロダクション環境構築の自動化についてかなり具体的な手順が載っているので、これからやりたいけどイメージがついていない人には良さそうな内容だった。

最近の本だからか、銀行の決済システムとかではなく、Web開発者になじみのありそうなECのWebサイトが例として取り上げられていたり、登場する技術セット比較的なじみのあるものだったりで、読みやすかった。作者の開発のスタイルや、置かれているチームの状況が自分と結構似ているというのもあったかもしれない(お前は俺かみたいなエピソードが何個もあった)。

まったく新しい内容はそんなにはないけれども、継続開発可能なコードベースや開発体制を目指しているときに、漠然と気をつけていることがコンパクトにまとまっていて良い本だと思う。第一章のはじめのあたりの文章が結構ささるので気になる人は立ち読みしてみても良さそう。