クリーンコードクックブックを読んだ
先月、今月と一気に本が増えたので、かなり積読気味です…
上記のうちの一つ、クリーンコードクックブックを読み終えたので、感想を書いておきます。
初心者向けではない
本書ですが、レシピを参考にコードを書けばクリーンコードが書ける、という類の本ではありません。いわゆる「レシピを真似すればきれいな動くコードが書ける集」ではなく、「原則を理解したうえで、適用すべきかしっかり吟味して自分たちのコードを改善していくためのレシピ集」です。
なので、オブジェクト指向の基本的な知識や、一定の大きさのシステムのプログラミングをしたことがあるような人向けの書籍です。
また、サンプルコードも複数のプログラミング言語で書かれているので、他の言語は全く読めない、といった人には結構苦しいかもしれません。しかも、どの言語で書いているかほとんどのサンプルコードには書かれていません。
もちろん、ある程度複数の言語を触ったことがある人(とくに静的型付き言語、動的型付き言語、どちらも触ったことがある場合)、その言語そのものを触ったことがなくても雰囲気でなんとなくわかる程度の小規模なコード例が多いので、多少複数のプログラミング言語の経験や知識があれば心配はないと思います。ただ、まだせいぜい1個のプログラミング言語が書けるようになった、といったレベルだと、サンプルコードが読み切れないなどは全然ありえると思います。
まずは第2章までをちゃんと読むのが大事
この本は、他のクックブックと同じく、紙面の大半がレシピ集です。とはいえ、ただただパターンを記載しているわけではなく、第2章までは導入および原則です。
この原則部分はかなり重要で、全体を通してこの第2章までの原則がもとにされています。そのため、この章までを読まずにパターン集として見てしまうと本書の重要な視点が失われてしまうので、まずは気になるレシピを読むのをぐっとこらえて、第2章までは読むことをおすすめします。
たまに「うーんこれは…」と思うものもなくはない
個人的にはですが、たまに「これはどうなんだろう…?」といった気持ちになる部分はありました。例えば、「実装視点ではわかるけど、ビジネスドメインの表現として本質的?」といったものです。あるオブジェクト内にとどまっているロジックであれば外部の振る舞いは変わらないので良い、というのもあると思うのですが、内部表現だととしても若干気になるなぁというレシピもあります。
また、特定言語ではレシピで言うところのアンチパターンが、いわゆる一般的なコードのパターンとされているものもあります。こうしたものをレシピにあるから、、、と思考停止で適用はできないなぁと思ったりもします。
とはいえ、大部分は「これはそう」と思えるレシピになっているので、ぜひ「自分(たち)は、このレシピを採用しよう」「自分(たち)は、このレシピは採用しない」といったことを自分(たち)で考えるのが大事だなと思います。
広範囲かつ多量なので、何度も読み返すのが良さそう
分量が多く、様々なコンテキストの内容が含まれているので、1回読めば身につく類のものでもなく、またサンプルコードの写経で学んでいける類の本でもありません。
逆に、実践のコードの中で「おや、これはクリーンコードクックブックにあった〇〇のレシピの問題に似ているぞ」といったときに見返してみる、といった使い方が最も活用しやすい方法かなと思います。また、開発チームで「クリーンコードクックブックの〇〇のレシピは適用したいがどうか?」といったチームの共通認識を作るベースとして活用するのも良いかなと思います。
個人的に好きだったレシピ
個人的に好きだったレシピです。
レシピ3.6 DTOの除去
特定のフレームワーク等で用いられる(Local) DTOを使うべきでない、というレシピです。
特定フレームワーク等を用いている場合、かなり反対したくなるレシピにはなりそうですが、中立的に見ていくと、ボイラープレートコードが量産されやすく、ドメイン貧血モデルと同等のオブジェクトが生まれやすくなるというデメリットも確かにそのとおりです。
個人的に、Webの記事などでは、DTOを批判的に記載したものはほとんど見かけないため、レシピとして記載されているのは、興味深かったです。
もちろん、「レイヤー間を疎結合にする」「不必要なドメインロジックをプレゼンテーション層などに公開せずに済ませられる」といったメリットがあるパターンではあると思います。ただ、思考停止でDTOを使えば良い、とならないようにすべきなのは、そうではないか、と思わせられる内容です。
このレシピを読んで、DTOを使うような場合に、「DTOのメリットと同等のメリットを得られる方法はないか?」と考えるのも面白いかなと思います。
レシピ16.4 過度な一般化の抑制
共通化こそ正義、のような抽象化が行われることがありますが、ロジックとしてそのときたまたま一致したものを共通化するのを避けるべきというレシピです。
このレシピは、他と同様にかなりさらっと記載されているのですが、共通化はいつでもプログラミングの原則だと思われている中では、なかなかに重要なレシピではないかな、と思います。
まとめ
クリーンコードクックブックは、実際に中規模以上のシステム等のコードを書いている人にとって、コードの書き方を振り返り、クリーンコードに近づけるための参考になる書籍だと思います。個人でもチームでも読んでみて、クリーンコードを目指したいなと思いました。