【書評】「におうコードの問題集 ソフトウェア設計に立ち向かう編」を読んだ

booth.pm

以前からソフトウェア設計に興味はあったものの、単にデザインパターンを暗記したところで役に立ちそうにないし、どう学べばいいだろう?というのがずっと悩みだった。そんなとき読んだこの本が、設計との向き合い方に対する一つの指針を示してくれたように思う。

わかりやすいサンプルコード

この本で主に扱っているのは、ソフトウェア設計をする際に避けては通れないSOLID原則について。SOLIDの5つの原則を、それぞれサンプルコードをリファクタリングするという形で体感していくという構成になっている。
既に設計をたくさん行っている人にとってはほぼ知っている内容かもしれないが、この本ではそれぞれの原則の特徴や、リファクタリング後に何がどう変わるのかが、他の本よりもすんなり理解できた。というのも、使われているサンプルコードにムダがなくわかりやすいのだ。決して入門書のHello World的なレベルではなく、さりとて複雑すぎる処理もしていない。APIやDBを叩くビジネスロジックという、設計をするうえでよく出てくるようなシチュエーションのコードがちょうどよい分量で出されており、サンプルコードとしてはとても良いと思う。
なお、サンプルコードにはCrystal言語というものが使われている。この言語は使ったことがなかったが、ものすごく雑に言うと静的型付け言語の要素を取り入れたRubyのようなものらしい*1。自分はJavaRuby両方を触ったことがあるので、すんなり読むことができた。

設計が重要なときとそうでないとき

この本のもう一つの特徴は、 設計を語るうえでの前提の説明に丸一章割いている ことにある。
いくら設計手法を学んだところで、それであらゆるソフトウェアをパーフェクトに作れるようになるわけではないし、ソフトウェア関連の全ての問題を解決できるわけでもない。そこでこの本では「前提」の章で、設計とは何か・どういう場合に必要になるかを定義している。
この本では、扱うトピックを「クラス設計」に限定し、良い設計の基準を「後から機能の追加・修正をするのが簡単である」と定めている。またこのような基準になるのは、自然と「デプロイサイクルが短めの場合」に絞られる。これにあてはまらない状況のときはまた別のアプローチが必要になるが、前提がしっかり定められていることで、その後の具体的な設計を見ていく章でも考えるべきポイントが明確になって理解しやすかった。

この本は、単にソフトウェア設計の手法を示すだけではなく、設計とどう向き合えばいいかを考えさせる良いきっかけにもなった。過去にソフトウェア設計の本を読んだもののいまいち活かしきれていなかったが、この本を読んで自分が置かれているケースにあてはめて設計について考える意欲が湧いた。

*1:Crystal言語を学ぶことはこの本のテーマではないので、より詳しく学びたい人は公式ドキュメントを読んでほしい。