おっさん読書会でオブジェクト指向設計実践ガイドを読みました

この記事はmwedアドベントカレンダー5日目の記事です。

昨日の Railsコアテスト環境を作る に引き続き @koheisg が担当させていただきます。

みんなのウェディングで業務委託エンジニアとしてお手伝いさせていただいております。担当領域は結婚式二次会サービスである Partynote に関わる全て(開発から営業)と、最近では事業開発領域のエンジニアリングのお手伝いをさせていただいております。正社員や業務委託など関係なく全力で仕事に臨める良い現場ですので、気になった方は @koheisg までメンション/DMお待ちしております。

おっさん読書会とは

さて、おっさん読書会とは、シニアよりなエンジニアを中心に、コードレビューや設計レビューでよりよいフィードバックをジュニアなエンジニアにできるように、 また、長年のサービス運営によって蓄積した技術的負債に対して、対処できる技術力を身につけることを目的として行っています。

毎週水曜日の定時後に有志のおっさんエンジニアで、一行一行音読を行っています。 わからないところや、気になったところがあると、自由に止めて議論をしても構いません。1人で読むと議論にはなりませんので、この部分でいかに発言を多くするかが参加したメンバーの成長に繋がって楽しいところです。

『オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方』とは

そのおっさん読書会では、『オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方』を読みました。

この本は非常によくまとまっているオブジェクト指向設計の本です。 rubyはオブジェクト指向言語であり、オブジェクト指向設計を語るには最適であると言えます。また、比較的新しい本であることから、時代背景などを考慮した読み方をしなくてもよいのも良かったです。

読んでみて

実際に読んでみるとアプリケーションを作るまでの試行錯誤や設計がどうあるべきか、ということが緻密に書いてあります。 おっさん読書会でおっさんたちが、オブジェクト指向設計についてわかっているところ/わかっていないところを整理するために非常に役に立ちました。

業務や休暇の人が多いとスキップになったりすることも数回ありましたが、 4月から9月までの5ヶ月で1冊読み終えることになりました。

こう考えると長い期間にも感じますが、1人で読んでしまうよりも、ゆっくりと咀嚼する時間があり、理解を深められるので、非常に有意義でした。

本だけでなく議論になった部分も非常に有意義でした。 それでは有意義だった議論をご紹介させていただきます。

印象に残った議論

メッセージとは?なるほどだから、sendメソッドなのね!

第1章の冒頭部分に参加者の半数が「名文だ!」と叫んだ文章がありました。

オブジェクト 指向 設計 では 発想 の 転換 が 求め られ ます。 世界 を、 あらかじめ 決め られ た 手続き の 集まり と 考える のでは なく、 オブジェクト 間 で 受け 渡さ れる メッセージ の 連続 として モデル 化 する の です。

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

では、メッセージってなんだろう?ってのをちゃんと確認しておきましょう。というお話に。 「メッセージとメソッドの違いはなんだろう?」という疑問に最も簡単な答えはrubyにあるよね!そうrubyのsendメソッドを思い出してみましょう。

オブジェクトのメソッド name を args を引数に して呼び出し、メソッドの実行結果を返します。 https://docs.ruby-lang.org/ja/latest/method/Object/i/__send__.html

なるほど、メッセージを送るメソッドだから send だったのですね。 この説明は非常にしっくりくる、明日から使いたくなる説明ではないでしょうか?

結論、教条的になりすぎなくてもいいんじゃない?

『フック メッセージ を 使っ て サブ クラス を 疎 結合 に する』という節では、親子クラスの結合度を下げるためにフックメソッドを用意すべきと書かれています。

  • 毎回これやる?
    • そこまでする?
    • フレームワークだったらここまでしてほしいかも
  • テストがあればオーバーライドしてても許せるかも

そんな色々な声が出ましたが、結論としては教条的になりすぎなくてもいいんじゃない?という話でみなさん落ち着きました。 ついつい原則やパターンに引きづられてしまうので、僕は このエントリー の最後の一文にはいつも感謝しているのでした。

ですから、教条的にならずに実践的であることも大切です。まずは手を動かしていくことから始めていきましょう。

さて明日の みんなのウェディング Advent Calendar 2017 は!

CSSフレームワークの啓蒙活動 についてです!