『Tidy First?』要点整理:合理的なリファクタリングのタイミング

読んだ本の内容はすぐに忘れてしまうため、重要だと思ったポイントを整理して備忘録として残しておきます。

「汚いコードは見つけ次第直すべきか?」 この問いに対し、Kent Beckの新著『Tidy First?』は「究極的にはケースバイケース」という、エンジニアなら誰もが納得(あるいは落胆)する経験主義的な立場をとります。

しかし、そこで思考停止せず「いつ、どう判断すべきか」の基準を、コストの観点から明確に示してくれたのが本書のハイライトです。

タスク実行時の判断

機能追加やバグ修正を行う際、必ず「ついでにここも直したい」という誘惑に駆られます。 しかし、機能変更(振る舞いの変更)と整頓(構造の変更)を混ぜてはいけません。PRの意図が不明瞭になり、レビューが難しくなるからです。

そのため、タスクに着手する際は「今やるか、後でやるか」をロジカルに判断する必要があります。本書では、その判断基準を以下のように定めています。

1. 報酬(キャッシュフロー)優先の原則

「今日の1ドルは明日の1ドルより価値がある」。 もし、その機能を早くリリースすることで得られる報酬(収益やユーザー価値)が大きいなら、整頓は「後回し(Tidy Later)」にするのが正解です。

先に整頓することは「今コストを支払う」行為です。リリースを遅らせてまで整頓を行い、その結果得られたはずの報酬が減少するなら、それは経済合理性に欠ける判断になりかねません。

2. オプション価値とコスト削減

逆に、「今リリースしても報酬は変わらない」あるいは「このままだと変更コストが高すぎる」場合は、「先に整頓(Tidy First)」すべきです。

ソフトウェアの変更コストを押し上げる正体は「結合(Coupling)」です。 先に整頓して結合をほぐしておくことは、「将来の変更を、安く安全に行う権利(オプション)」を購入する投資と言えます。これによって、本題のタスク実装が劇的に楽になるなら、迷わず先にやるべきでしょう。

判断のための数式

この本の素晴らしい点は、これらの判断を以下の数式で表現していることです。理系エンジニアとして、この明快なロジックには救われます。

(1) 先に整頓するかどうかの判断式

cost(整頓)+cost(整頓後の変更)<cost(整頓しないままの変更)cost(\text{整頓}) + cost(\text{整頓後の変更}) < cost(\text{整頓しないままの変更})

この不等式が成立するなら、経済的にも「先に整頓」が合理的です。
ただし、前述の「報酬(キャッシュフロー)優先の原則」も忘れてはいけません。たとえ整頓した方がコストが安くても、今すぐリリースすることの価値(時間価値)が圧倒的に高いなら、あえて「整頓しない」選択もまた正解なのです。

(2) ソフトウェアコストの正体(コンスタンチンの等価性)

cost(ソフトウェア)cost(変更)cost(少数の大きな変更)結合cost(\text{ソフトウェア}) \approx cost(\text{変更}) \approx cost(\text{少数の大きな変更}) \approx \text{結合}

つまり、ソフトウェアのコストを下げる唯一の方法は整頓し要素間の「結合」を減らすことです。

「数式によるコスト計算」と「キャッシュフローの時間価値」。 感情論ではなく、ロジックで判断をすること。その時々の「最適解」を導き出すことが大切です。