Try T.M Engineer Blog

多摩市で生息するエンジニアが「アウトプットする事は大事だ」と思って始めたブログ

「ちょうぜつソフトウェア設計入門――PHPで理解するオブジェクト指向の活用」を読んだ感想

「ちょうぜつソフトウェア設計入門――PHPで理解するオブジェクト指向の活用」を読み終えました。

とても勉強になったので、ざっくり感想を書いていきます。

本書を手に取った理由

表紙がかわいいですよね。

驚くべきことに、本の著者である 田中ひさてる さん 自身で表紙のイラストも描かれたとのこと。

本も書けるし、イラストも描けるし。。。めちゃすごいよこの人。。。

あと、もう一つが、@iwasimanさんの感想がとても面白かったからです。

iwasiman.hatenablog.com

特に第1章の感想を見て吹いたので、是非読んでみたいと思えました。

あと、題材にPHPを選んでいるところも良いですね。(PHPなら私でも読めるっ!)

実際読んでみた感想

マジでクリーンアーキテクチャーの説明がわかりやすい。。。

ちょいちょい出てくるイラスト漫画がいい感じの落ちになっていて、それもわかり易さに貢献している気がします。

たしかに、ボブおじさんのクリーンアーキテクチャー本を読んで、いまいちよくわからないなぁと思う人はこっちも読むとスッキリするかもしれない。。。

第2章のパッケージ原則については、個人的にちゃんとした本とか読んだことがなかったので、大変勉強になりました。

この章の内容って、どういったところから学ばれたのかなぁ。。。と、調べてみると、本の著者である 田中ひさてる さん 自身の資料を発見!

speakerdeck.com

パッケージ原則については、(個人的な学びも含めて)以下に纏めておく。

  • 再利用・リリース等価の原則(Reuse-Release Equivalent Principle)REP
    • リリースされたもの(mainブランチのもの)だけを再利用せよ。
  • 全再利用の原則(Common Reuse Principle)CRP
    • ひとつのパッケージに起きたコード変更は、すべて利用するか、まったく利用しないのか選ぶべし。
    • つまり、部分的に使用してはならないということ。だからこそ、パッケージは責務で分けなさい。
  • 閉鎖性共通の原則(Common Closure Principle)CCP
    • ひとつの変更が必要なとき、できるかぎりひとつのパッケージだけを交換すれば済む形にせよ。
    • つまり、疎結合正を意識せよ。
  • 非循環依存関係の原則(Acyclic Dependencies Principle)ADP
    • パッケージの依存が循環してはならない。つまり、パッケージ間は必ず単一方向での依存にすべし。
  • 安定依存の原則(Stable Dependencies Principle)SDP
    • 依存すべきパッケージは安定しているもの(変更が発生しにくいもの)にすべし。
  • 安定度・抽象度等価の原則(Stable Abstractions Principle)SAP
    • 安定度が高いと抽象度も高くなくてはならない。安定度が低いと抽象度も低くすべし。
    • ここで言う抽象は、抽象クラス、インターフェースだけでなく言語そのものやライブラリ、業務や特定の技術に依存しない時間や配列などの幅広い抽象を指している。

あと、オブジェクト指向については、「定義はない」とバッサリ言い切っていることに驚きました。

個人的には、カプセル化、抽象化、継承、ポリモーフィズムの4つの基本原則があってのオブジェクト指向だと思っていたので、「定義はない」というのに驚きました。

よくよく考えてみると、クラスのないGo言語とかでもオブジェクト指向で書けるらしいし、確かにそうだよね。。。と思う。オブジェクト指向を説明する本が、「Java」や「PHP」が多いだけで、言語依存ではないってことなんだな。。。と再認識しました。

このあたりでもうお腹いっぱい。。。。気がつけば、この時点でまだ30%も読み終わってないことに気づいて、本書のボリュームと内容の深さにすごく驚いたのを覚えています。

続いて、SOLID原則の説明やテストの話。

ここでまさかのFizzBuzzエンタープライズエーディションで説明されるとは思わなかった。。。

オブジェクト指向の「定義はない」けど、SOLIDに則していればオブジェクト指向なんじゃない?むしろ、SOLIDに則していないものをオブジェクト指向とは呼ばないんじゃない?という著者の考えが非常に興味深いし、たしかにそうだよなぁ。。。と思わされた。。。

あとは、継承よりも委譲だよ。という話とか、デザインパターンの話もありました。

このあたりも本とか読んだことない人には、オススメできそう。。。とてもわかり易い。

最後に、個人的に一番面白く感じたのが「9-4 ウォータフォールの幻影」。

個人的にはアジャイル開発経験が無いので、なんとも言えない部分はあれど、ウォーターフォール開発が歴史の中で色々と言われ続けたのも納得ですし、アジャイル開発も正しいアジャイル開発をしないと結局は上手く行かない。というのも納得です。

これだけアジャイルアジャイル言われ続けて、未だウォータフォール開発を行っている会社が多い理由を個人的に考えてみると、まだまだアジャイル開発経験のない会社が多く、その理由として、新しい開発プロセスに挑戦するのを恐れていたり、そもそも正しいアジャイル開発手法を知らない・わからない。だから、未だウォータフォール開発を行っている会社が多いんじゃないかなぁ。。。

うちの会社もだいたいそれだしなぁ。。。

「9-4 ウォータフォールの幻影」は個人的にとても興味深い話だったので、とても楽しく読むことができました。

さいごに

「ちょうぜつソフトウェア設計入門――PHPで理解するオブジェクト指向の活用」は、表紙かわいくて、内容も深く、ボリュームもたっぷりなので、めちゃおすすめです。🎉🎉🎉