レガシーコードからの脱却
ソフトウェアの寿命を延ばし価値を高める9つのプラクティス
David Scott Bernstein 著
吉羽 龍太郎、永瀬 美穂、原田 騎郎、有野 雅士 訳
オライリー・ジャパン 2019年
https://www.oreilly.co.jp/books/9784873118864/
第Ⅱ部 ソフトウェアの寿命を延ばし価値を高める9つのプラクティス
7章 プラクティス3 継続的に統合する
8章 プラクティス4 協力しあう
9章 プラクティス5 「CLEAN」コードを作る
を読んだメモ
プラクティス3 継続的に統合する
従来のやり方
最後に統合する
→最後になってバグや不具合が出る
修正のコストが膨大になる
発想を変える
早期から頻繁に統合する
統合するのが遅れるほど面倒になる
→頻繁に統合し、問題が小さなうちに対処する
いつでもリリース可能にする
・顧客が実際に目にするまで、それが「欲しかったもの」かどうかわからない
・いつ何をリリースするかはビジネス側の領域
やり方について
・ビルド、テスト、受け入れテストの自動化
→継続的インテグレーションのツールを活用
・バージョン管理
→ソースコードだけでなく、ビルドに必要なすべてを管理
→ブランチは避ける(フィーチャーフラグでの無効化)
プラクティス4 協力しあう
ソフトウェア開発は社会的活動
コミュニケーションと協働が必要不可欠
プログラミングは1人でやる作業?
ペアプログラミング、スパイク、スウォーム、モブ...などもある
ペアプログラミング
チームに知識を広げる最も早い方法
割り込みが減ってコーディングに集中できる
コードの共同所有をする
→一人で作るとコーディングスタイルが統一されず保守性が下がる
コードレビュー
コーディングしたペアだけでなく、他のメンバーにもコードを理解してもらう
→コードの共同所有をする(2回目)
ふりかえり
何をやったか、どうやったか、なぜやったか、もっとうまくやるにはどうするか
対応可能な課題を発見し、チーム全体を改善する
知識を広げチームと共有する
学ぶ最高の方法は教えること
常にメンター、メンティーであれ
ソフトウェア業界に、これ以上秘密結社はいらない。
プラクティス5 「CLEAN」コードを作る
良いソフトウェアの土台となるコード品質
1つのことだけをやる
Cohesive: 凝縮性
限られた機能を持つ小さなクラスからプログラムを構成する
凝縮性が高いオブジェクトは命名しやすい
抽象-詳細の階層を持つ
取り換え可能にしておく
Loosely Coupled: 疎結合
抽象クラスやインターフェースを使用して実現
※密結合が絶対悪ではない。「意図的でない結合」が良くない。
やり方は言わない
Encapsulated: カプセル化
やろうとしていること(インターフェース)とどうやってやるか(実装)を切り離す
呼び出し側の視点で設計する
自分は自分、他人は他人
Assertive: 断定的
対義語は「好奇心旺盛」
自分自身の仕事を他のオブジェクトに肩代わりさせない
他のオブジェクトをいたずらに参照しない
同じことを別の所でしない
Nonredundant: 非冗長
冗長性とは意図の繰り返し
明日のベロシティのために今日品質を上げる
「CLEAN」なコードはテストがしやすい
「CLEAN」は互いに関連しており、ある1つの観点で改善すれば他も改善される
→著者のおすすめは「凝縮性」(適切な名前は理解を助ける)
コード品質を高めることで、ソースコードは理解しやすくなる
私には汚くする時間がない
著者の友人である料理人の言葉
速く働けば働くほどきれいになる