👧

「ちょうぜつソフトウェア設計入門」は自称中級プログラマこそ読みたい良本だった

2023/03/26に公開

田中ひさてるさん(@tanakahisateru)の著書「ちょうぜつソフトウェア設計入門」を今更ながら読了したので、感想を書き連ねていこうと思う。

どんな本?

大きくは「PHPをコード例に学ぶ設計書」ではあるが、「設計を学ぶ」ことが最終的なモチベーションではない(と第9章でわかった)。

なんとなく「変更が容易で拡張性あると開発しやすいよね」くらいの認識で読み始めたが、第9章「アジャイル開発」では予想以上のところまで深堀りしてくる。

  • とりあえず設計について知りたい入門者・初学者
  • 色々調べたし設計も気を付けてるつもりだけど、ちゃんと知っておきたい中級者

には、かなり刺さるところがあるのではないかと思う。特に後半は中級者向けと言ってもいいかもしれない。

各章について

目次は以下の通り。

第1章 ›› クリーンアーキテクチャ
第2章 ›› パッケージ原則
第3章 ›› オブジェクト指向
第4章 ›› UML(統一モデリング言語)
第5章 ›› オブジェクト指向原則 SOLID
第6章 ›› テスト駆動開発
第7章 ›› 依存性注入
第8章 ›› デザインパターン
第9章 ›› アジャイル開発

第1章では、そもそもソフトウェアアーキテクチャの必要性から解説して、本書の導入としている。よくある「クリーンアーキテクチャとはこうです」と説明される誤解もこの時点で解いているのが、「これだよこれ!」という感じで良かった。もしクリーンアーキテクチャ=「ドメインとプレゼンテーション、インフラの層に分けてリポジトリとか組むあれ」みたいな理解の方がいれば、第1章を読むだけでも価値があると思う。

さすがに入門者向けの導入なので退屈に感じることも多い章かもしれないが、クリーンアーキテクチャの理解に自信がある人も飛ばさずにしっかり読んでほしい。「うんうん、そうだよね」となるところもあれば、「あれ、たしかにそうだったかも」と気づきになるところもあったので、理解の振り返りに活用してほしい。

第2章~第7章では、第1章で解説したクリーンなアーキテクチャを実現するために必要な原則や考え方、手法について順を追って解説している。コード例には PHP が用いられているが、文法も一般的なオブジェクト指向言語から外れていない上に最近は(といってもここ数年?)型定義もできるようになっているので、PHP 経験者でなくても理解できるはず。

「PHPで理解する」と副題のある通り、言葉での解説→コード例→「ね、こういうことでしょ?」という構成で解説されるため、非常に腹落ちしやすい。全体を通してこうした構成で統一されている気もしており、サクサク読める印象だった。

第8章ではデザインパターンについて、それぞれのパターンについては浅めに解説した上で、自分たちが再利用可能なものを作る上で足掛かりとしての認識パターンであると締めていた。「結局は自分たちが作るんですよ」というメッセージは、第9章にもつながってくる。

第9章では、ソフトウェア設計の話からは外れ、開発手法について。アジャイルを語るうえで先行しがちなプロセスにだけ注目するのではなく、あくまでアジャイル開発の元となったマニフェストを中心に考えていく。

プロセスやツールよりも個人と対話を、
包括的なドキュメントよりも動くソフトウェアを、
契約交渉よりも顧客との協調を、
計画に従うことよりも変化への対応を、

価値とする。すなわち、左記のことがらに価値があることを
認めながらも、私たちは右記のことがらにより価値をおく。

https://agilemanifesto.org/iso/ja/manifesto.html

これまで学んできた、いわゆるクリーンで変更容易なアーキテクチャや設計手法などの方法論を武器に、エンジニアはどう仕事(顧客)への向き合うべきかを、このマニフェストを通して知ることができた。

まとめ

自分は自称中級プログラマくらいの認識をしていて、本書の知識もなんとなく知っているものもあったが、自分の中でそれぞれが結びついてない感があった。

本書ではしっかり前提知識を埋めたうえで、「こうだからいいよね、原則にも則してるね」と説明されるので、腹落ちもしやすく、それぞれのつながりも見えてきた。ここからはさらに実践による経験と、本書の参考文献からより深いところまで学ぶことでよりつよつよエンジニアになっていくのだなと思う。

総合して、入門者にも中級者にもおすすめできる、エンジニアの道しるべ的一冊だなと感じました。まずは第1章からまた見直してみたいと思います。

Discussion