【書籍レビュー】Good Code, Bad Code
はじめに
メンテナブルなコードを書くための客観的な知見を系統的に学ぶために「Good Code, Bad Code ~持続可能な開発のためのソフトウェアエンジニア的思考」を読んでみました。
以下に自分が得た知見と自分の所感を記載します。
Part1 理論編
Chapter1 コードの品質
ソフトウェア開発でのベースとすべき考え方に関して記載されている。コードの品質に関して、ソフトウェアエンジニアとして基本的なことではあるが、大切なポイントが押さえられていて、それぞれのポイントがいかに大切かの説明があった。それぞれのポイントは現在のソフトウェアエンジニアリングに最適化されて提起されているように感じた。また、たまにTwitterにて議論が巻き起こる「高品質なコードを書くことは、開発を遅らせるか」に関して明確な答えが記載されていた。
Chapter2 抽象化レイヤー
いきなりの抽象化レイヤーの話は初学者にとってはハードルが高そうであると感じたが、大切であるがゆえに最初に提起しているのであろう。ソフトウェアでの抽象化への話もあったが、関数の粒度やクラスでの凝集、関心の分離までにも言及していた。クラスを分けるべきかどうかのポイントが挙げられており、今後クラス分割するべきかどうかの判断基準にできそうだと感じた。また実際の抽象化事例としてJavaコードを利用して、インターフェースを定義し、DIすることを実コードをベースに解説していた。私はなんでもインターフェースで分割しがちなので、コードの複雑化を避けるため、必要な箇所に適切に分割を適用しなければいけないと感じた。
Chapter3 コードでの契約
コードでのルールの大切さを説明していた。またどれだけコメントにて説明していても、そのコメントが読まれないことがあるので、コードの定義により、コードを誤用できないように設計するのが良いとの説明をしていた。
Chapter4 エラー
エラーハンドリングの例として、Result型やPromise、Future型まで記載されていて、情報量が豊富で、それぞれのエラーハンドリングを系統的に復習することができた。エラー通知ではフィロソフィーが必要と記載されていた。さまざまなエラーハンドリング方法があるが、チームとして共通認識の上でハンドリングしていくことがチーム開発では重要なのであろう。
Part2 実践編
Chapter5 コードを読みやすくする
リーダブルコードを簡潔に記載しているような感じ。特に目新しい箇所はなかったが基礎的で大事なことが端的に記載されていた。
Chapter6 想定外の事態をなくす
異常系を適切にコードでハンドリングするためのパターンが記載されていた。あまり書籍でこのようなエラーハンドリングを学んだことがなかったので、nullオブジェクトパターンは試したことがなかったので今後利用できるかもしれない。
Chapter7 誤用しにくいコードを書く
主にイミュータビリティの重要性とその背景に関して言及していた。
Chapter8 コードをモジュール化する
DIに関して詳しく記載されている。DIフレームワークを組み込むことによる複雑が増すことも記載されていて良かった。継承の難しさに関しても丁寧に記載されていた。
Chapter9 コードを再利用、汎用化しやすくする
基本的にはDRYの説明。過度に抽象化、汎用化を進めることによる複雑性が増してしまうことにも言及してほしかった。
Part3 ユニットテスト編
Chapter10 ユニットテストの原則
テストコードを書くときのベースとするべき考え方が記載されていた。「実装の詳細にとらわれない」は大事だと感じた。
モックを利用するべきか否かの議論も記載されていて興味深かった。
Chapter11 ユニットテストの実践
実際にどのようにテストコードを書けば良いのか記載されていて、全てのポイントが重要であった。テストを書く上では前提知識になると感じた。
最後に
数年ソフトウェアエンジニアとしいて経験があれば、全て前提となる知見ではあると思うが、ソフトウェアエンジニアとしてのベースとなる考え方、知見が広く網羅されていて非常に有益な本であった。今後コードレビュー等の時の参考資料に役に立つと感じた。
Discussion