kano-e です。
今年の夏に『オブジェクト指向設計実践ガイド』の読書会を行なっていました。
毎回1章ずつ、ゆるゆると集まってその章に出てきた話で気になったことなどを話し合う感じの読書会でした。
本の内容や設計について話せたのも有意義でしたし、そのまま「今やっているこの実装はどうするのが良いのか」みたいな話になったり、他のプロダクトではこうやってるなどの話を聞いたりもして、とても実りの多い会だったと思っています。
社内で開催した『オブジェクト指向設計実践ガイド』の読書会終わり!今回読むのは2回目。画像の通り、だいぶがっつり読むことが出来たし、業務や個人のコードも良くなって満足。 pic.twitter.com/XUin6wBWpA
— Takashi Masuda (@masutaka) 2017年8月24日
以下の文章は『オブジェクト指向設計実践ガイド』を読んでのふんわりとしたエモい感想文です。
全体をやわらかく設計するということ
この本の中では、オブジェクト指向設計とは依存関係を管理することだと、はっきりと書かれています。
また、「オブジェクトの関連」はオブジェクトの間で交わされるメッセージだとも書いてあります。
今までの(この本を読む前の)自分には、そのような視点はありませんでした。
依存関係の管理。設計時の様々なテクニックも、そのためにあるのだという視点で改めて捉えなおすことができました。
例えば、継承というのはis-a関係を表すものだと考え直してみることで、「継承」というテクニックを導入することで何が解決できるのかがクリアになったような、そんな大袈裟に言うと「世界が広がる」ような気付きがいくつもありました。
テストの書き方では、これまで長らく悩んでいた「夢の世界に生きる」問題についての一つの回答も得られました。
テストでメソッドスタブすると、メソッドが機能しなくなったのにテストが通ってしまって気付けないという問題は、本当に長い間悩んで来ていました。
特に外部のAPIとのやりとりを含む処理の場合、WebMockのstub_requestが必要になり、そのためには「本来なら外部のAPIの仕様を知らないはずのオブジェクトのテストで外部のAPIのstub_requestをする」というようなテストの書き方をしていました。
それをメソッドスタブしたテストも検討はしていたのですが、スタブされたメソッドを書き換えた時にそれを呼び出している側のテストが動き続けたために気付けないままになってしまう、という問題とどう向き合えば良いのかわからないままでした。
そのため、見やすいテストと何かあった場合に気づけることを天秤にかけて、長らく後者を選んでいたのです。
これらはオブジェクト指向設計の話とは少しずれているので(内容とずれているのに、読書会中ずっとこの問題にこだわり続けていて、今こうして思い返していて申し訳なく感じられてきた)、本の内容をそれをそのまま使えるわけではありませんが、同じように考えていくことはできそうだという感触はありました。
ところで、読書会後に『オブジェクト指向設計実践ガイド』を改めて読み返していたのですが、ふと『ジュンとひみつの友だち』というお話を思い出しました。
『ジュンとひみつの友だち』は、佐藤さとるという児童文学作家の小学生向けの作品です。
佐藤さとるの絵本で子供の頃読んで好きになったものに『おおきな きが ほしい』という作品があるのですが、男の子の「おおきな木があったらハシゴをつけて高いところに小さな部屋を作って、それはこういう作りになってるんだ」という想像をそのまま絵本にしたものです。
佐藤さとるの本には、こういった「設計図」が出てくるものが多くて、わたしはその設計図が好きでした。
「ジュンとひみつの友だち」は、ジュンという男の子が自分で自分のための小屋を作る話なのですが、話のはじめの方でジュンはずっと自分が作る小屋の設計図を考えているのです。
そして、その設計図のサイズ感や作りが妙にリアルに感じられて、本当にこんな風に作れそう、と子供心に思っていました。
さて、ここまで設計図の話をしましたが、実はわたしがこの本のことを思い出したのは設計図のことでではありません。
ジュンには、年の離れたミサオというお姉さんがいます。このお姉さん、機械いじりの好きなおとなしい女の子です。バイク屋をやっているおじさんのところに通って機械の扱いを教えてもらっている、工業高校に行きたかったけれども女の子なので周りに反対されていけなかった(この辺りは本が書かれた時代もあるのでしょうけれど)、という女の子。
わたしが思い出したのは、このミサオという高校生の女の子が機械について話していた台詞でした。
「機械ってね、ばらばらにしていくと、たいていはかちんかちんのかたいものでできているのよ。だけど、それをじょうずに組みあわせてやると、とってもやわらかくなるみたい。しっかり、かっちり、組みあわせるほど、全体はやわらかくなるわ。そこがふしぎね」
ここでミサオという女の子が言っているのは、例えばオルゴールや芝刈り機やバイクみたいな、実際に形のあるものの話です。
それでも自分の中には、かっちりした小さなものをしっかりと組み合わせて大きな柔らかいシステムが出来上がるイメージが、浮かびます。
そのイメージが今回、依存関係を管理することやメッセージを見出すことと結びつきました。
そして「ああ、こんなふうに作れたらなあ」と思ったのでした。
オブジェクト指向設計実践ガイド ?Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方
- 作者: Sandi Metz
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/02
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
- 作者: 佐藤さとる,村上勉
- 出版社/メーカー: 岩波書店
- 発売日: 1996/11/15
- メディア: 単行本
- この商品を含むブログ (5件) を見る
- 作者: 佐藤さとる,村上勉
- 出版社/メーカー: 偕成社
- 発売日: 1971/01/01
- メディア: ハードカバー
- 購入: 4人 クリック: 23回
- この商品を含むブログ (47件) を見る
(追記) 最後に
勢いだけで書いた感想文で、技術的に具体的なことをあまり書かないまま終わってしまってました。
特に「夢の世界に生きる」など、問題だけ提示して回答を書いていない文章でしたね。
具体的な話は本を読んでもらうのが良いのですが、今回の読書会のメモを masutaka さんが公開していますので、そちらも参考にどうぞ。