Tidy First?読んだ
自分なりに整理してみます
第一部: 整頓
「Tidy First?」では、リファクタリングとも言えないほどの小さな改善を「整頓」と定義しています。これには以下のような技法が含まれます:
- ガード節: 早期リターンによるネストの削減
- デッドコード除去: 未使用コードの削除
- シンメトリーを揃える: コードの書き方を統一
- 新しいインターフェース、古い実装: 使いづらいインターフェースに対してAdopterパターンを適用
- 読む順番の最適化: 読み手が情報に遭遇したい順序に並べる
- 凝集の順番: 凝集度が高まるようにコードを並び替え
- 変数宣言と初期化の統合: 宣言と初期値設定を同じ場所に
- 説明変数・説明定数の導入: 理解しやすい名前の変数・定数を使用
- 明示的パラメータ化: 暗黙的な依存をパラメータとして明示
- ステートメントの小分け: コードブロックを空行で区切り可読性向上
- ヘルパー関数抽出: コードブロックを関数として抽出
- ひとかたまり化: 悪い分割は一度統合してから再整理
- 説明コメント追加/冗長コメント削除: 適切なコメントの配置
第二部: 管理術
個人の開発ワークフローにおける整頓の組み込み方について説明されています:
- 小さなPR: 振る舞いの変更と構造の変更を分離し、それぞれ別PRにする。
-
いつ整頓すべきか?:
-
整頓しない場合:
- 二度と変更しないコード
- 設計改善から学ぶことがない場合
-
改めて整頓する場合:
- 見返りがない大きな整頓作業がある
- 最終的には見返りが得られる
- 段階的に整頓可能
-
変更後に整頓する場合:
- 将来まで待つとコストが高くなる
- 完了感が必要
-
変更前に整頓する場合:
- 理解向上など即時見返りがある
- 変更の方向性が明確になる
-
整頓しない場合:
第三部: 理論
整頓の背景にある力学、つまりシステムを取り巻く経済的な状況とシステム内部の状況の関係性ついて掘り下げています。まず振る舞いと構造の関係性について説明し、コードの動作とその内部構造がどのように相互作用するかを明らかにしています。
経済的観点からは、ディスカウントキャッシュフローとオプショナリティという二つの概念が重要です。ディスカウントキャッシュフローの原則「明日の1ドルより今日の1ドル」は、すぐに使える機能を提供することの価値を示しています。これは先に実装して後から整頓するアプローチの正当性を裏付けます。一方、オプショナリティはソフトウェアの拡張性や機能拡張の余力を意味し、整頓によって生み出される変更可能性が事業価値を創出します。機能が実装されておらずとも、実装できる余力があるだけで価値を生むとのことでした。著者はこれらの概念のバランスを取ることの重要性を強調し、先に整頓することで全体的な実装コストが下がるならそうすべきだが、そうでなければ後から整頓するという判断基準を提示しています。また、変更は可逆的な方法を選ぶことでリスクを軽減できるという点も指摘しています。
さらに、結合と分離の概念を通じて、コンポーネント間の依存関係がコードの変更容易性にどう影響するかを解説しています。凝集の概念も詳しく説明され、関連する機能を適切に集約することの重要性が強調されています。
これらの理論的背景を踏まえ、本書は整頓すべきか否かの判断材料として、コスト、収益、結合度、凝集度の四つの観点を提示しています。整頓によってコストが低減するか、収益が増加するか、結合度が下がって変更が容易になるか、凝集度が上がって変更が容易になるかを検討することで、より合理的な整頓の判断が可能になると説明しています。
感想
リファクタリングを覚えたばかりだと目の前にあるコードを何でもかんでも改善しようと考えてしまいがちですが、その改善に経済的価値があるかという観点を投げかけてくれたという点で個人的には読んでよかった本だと思います。エンジニアがビジネス的な視点を持つために思考を拡張するきっかけとして最適な書籍だと思います。
Discussion