書評:レガシーソフトウェア改善ガイド
Kindle版、Amazonポイント50%還元キャンペーン中に、技術書を大量買いしたときの1冊。
ずいぶん前に読み終えたけど、久しぶりにパラパラ眺めながら何が書いてあったか纏めておきます。
誰向け?
* 日々レガシーシステムと格闘していて何とかしたい人
* 新しい技術に興味がある人
* 何か新しいことを学びたいけど、何が良いか判らない人
* 新しい技術を仕事で使いたい人(レガシーシステム関係なく)
* 保守中のシステムに対して改善提案したい人
レガシーシステムを改善するためのガイド本なんじゃないの?
と思われるかもしれませんが、
私が読んだ感想としては、私の中では新しい技術を使うプラクティス本的な位置づけです。
向かない人は?
本書に興味がない人
※勉強熱心な全てのエンジニアに読んでもらいたいです
どんなことが書いてあった?
中途の人が新しい職場に転職して、出社初日に開発環境の構築に四苦八苦したり、
良かれと思って直したコードが、他のところに影響してしまったとか、
システムのリライトしたら、過去のバグを再発させたとか、
そんな、保守案件・保守開発のあるある話に対する改善方法を提示してくれています。
ツール類は?
DevOps界隈で言われているツールが殆どです。
これ見てる人にとっては、当たり前に使っているもの・特に使ってないけど、どんなものかは知っている、というものが殆どです。
新しいモノの使い方について
「とにかく一気にやり過ぎない。何かを始めるのは1つまで。」
これは新しく何かを作るときも同様で、新しいことをやったら大抵の場合地雷を踏んでプチ炎上状態の中、問題をクリアしていくことになります。
これは成長するために必要な失敗と成長を体験するために必要な儀式なので、問題ないです。
ただ、新しいことを複数行うとプチ炎上が重なり、大炎上する可能性が、まぁ指数関数的に上がります。
なので、保守・新規に関係なく、新しいことを始める場合は、1案件1つまでにしましょう。
という、納得のことが書いてありました。
私も、新しいことは1案件1つまでと決めてやってます。
もちろん、すんなりことが運んで、もう1個くらいイケたな!と思うことはありましたが、
嵌れば1週間くらいは簡単に溶けるので、2個以上は手に余るので、上手くいった次も1個しか新しいことはしません。
ただ例外もあります。
自分にとっては新しいことでも、熟練者がいるときです。
多くの組織では、熟練者にその部分を担当してもらうと思いますが、これは自分でぶんどれます。
で、自分の判る領域を別の人に回す。
誰かがプチ炎上状態になっても、その領域の熟練者がいるので即鎮火できるので、ほぼノーリスクで新しいモノのノウハウが溜まりますし、
プロジェクトメンバー間で共有すれば、自分がやってない部分のノウハウも身に付きます。(実際には自分で手を動かさないと厳しいと思いますが、あの人ここでハマってこう解決した、というのを聞いていれば解法を導くのが時短できます)
リファクタリングの仕方について
テストを書きましょう!といういつものヤツが書かれています。
新規開発では、まぁ書きましょう!となりますが、テストコードがないレガシーシステムはどういうアプローチでやるの?
ということが丁寧に書かれています。
レガシーシステムについては、有りものを正義とみなして、仕様化テストを書くと良いよ!ということが書かれています。
この辺はちょっと前にテストコードを書いてこなかった人向けに資料作って発表しているので、参照頂ければ。
あまり触れられないコストについて(追記分)
絶対に書こうと思って書き忘れたので追記します。
日々の生産性やリリースまでのリードタイムなどはよく取り上げられますが、
人の受け入れコストについて触れているのが本書の特徴です。
特に開発環境の構築は、無駄コストとして扱っています。
確かに、新しいプロジェクトに入ると1〜2日、酷いと3日は開発環境を構築している人、居ますもんね。
一人なら良いですが、人の出入りが激しいと、この工数はバカになりません。
その解決手法はVagrantやDockerを使って開発環境を自動で構築して手間を省こうというものです。
また、新しい人を受け入れて、どの程度で周りと同じ程度の生産性になるかについても言及しています。
最後に
なんやかんやと色々理想が書かれていますが、作者も言っている通りで、
やれること、やれそうなことを無理のない範囲で行っていけば気付いたら脱レガシーになっているだろうし、エンジニアとして色々知見も溜まって良いですね。
私も立ち止まらないように色々チャレンジしていかねば!
レガシーソフトウェア改善ガイド (Object Oriented Selection) | クリス・バーチャル, 吉川 邦夫 |本 | 通販 | Amazon