99bottles of OOP を読んだ

オブジェクト指向実践ガイドを書いたSandi Metzの新刊を読んだ。

実は年末くらいには買っていたのだけれども、積ん読してしまっていた。

しかし先週アップデート版が出たというお知らせを受けて(pdf版なのでアップデート版ももらえる)これは読むしかないと思い週末を利用して一気に読み終えた。

内容

OOPを実践する際の指南書。 オブジェクト指向実践ガイドももちろん表題の通りオブジェクト指向について解説していたが、それよりも実践寄りの内容。そして多くのページがリファクタリングについて書かれている。

It turns out that everything you need to know about Object-Oriented Design (OOD) can be learned from the “99 Bottles of Beer” song.

という一文から始まる通り、99 bottles of Beer という曲を作るクラスを書くところから始まる。

気になる人はここにサンプルコードがあるので参考になるかもしれない。

章ごとの概要(個人的なメモ) 

1 Rediscovering Simplicity

  • 自分で99 bottles of beer エクササイズをやって見て、例文と比較
  • 極端に具体的なコード、極端に抽象化されたコード、適度に抽象化されたコード、そしてShameless Green なコードの例
  • 品質の良いコードの判断材料
  • SOLC, Cyclomatic complexity, ABC
  • “good enough” なコードを書くこと

2 Test Driving Shameless Green

  • TDDの基礎的なところの解説
  • 99 bottles例文を使ってコードの品質を測定しながらTDD
  • コスパの良いテストを書く

3 Unearthing Concepts

4 Practicinng Horizontal Refactoring

5 Separating Responsibilities

6 Achieving Openness

  • the Data Clump code smell
  • Polymorphism
  • サブクラス
  • オブジェクトを「製造する」
  • 新機能を安全に追加

感想

まずは正直に読んでよかったと感じた。オブジェクト指向実践ガイドもそうだけれども、Sandi Metzの本は本当にオブジェクト指向に関して深い洞察を与えてくれると思う。何が一番良いかというと、本全体を通じて一つのコードを深く掘り下げていること。他の本では章ごと、いや話題ごとに異なるコードを用いて解説しているのであまり実感がわかないというかいざ自分が使うタイミングがイメージしづらいのだが、この本では99 bottles のコードを共に完成させていくような言わばチュートリアル的な感覚で解説してくれるので非常に自分はわかりやすいと感じた。そういえばオブジェクト指向実践ガイドでもBycycle クラスをずっと話していたのでわかりやすかった。

また、最初から最後までコードを変更した際に一貫して以下の質問をして考えている。

How difficult was it to write?
How hard is it to understand?
How expensive will it be to change?

--- 以下99bottles のケース--- 

How many verse variants are there?
Which verse are most alike? In what way?
Which verses are most different, and in what way?
What is the rule to determine which verse comes next?

個人的な新たな発見はこの本の至る所にあったのだけど、クラスの分割の部分が全く新しい概念だったと思う。普段Railsを使うにあたって、どうしても膨らみすぎてしまうクラスが出てくるのだが、迷った時にはこの本を参考にしながら書いていきたいと思う。

他にもコードの品質を測る方法や理論が多く出てきたので、また見返しながら調べようと思う。

3, 4, 5, 6章は全てRefactoringを参考にして書いてあるらしいので、読んでみるか。

しかし次はConfident Rubyと決めているので購入した。

その次はRefactoring

関連

www.sandimetz.com

オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方 | Sandi Metz, 髙山 泰基 |本 | 通販 | Amazon

Amazon.co.jp: Confident Ruby: 32 Patterns for Joyful Coding (English Edition) 電子書籍: Avdi Grimm, Sandi Metz: Kindleストア

Refactoring Ruby Edition