Feedforce Developer Blog

フィードフォース開発者ブログ

『オブジェクト指向設計実践ガイド』の読書会をやっています

id:daido1976 です。入社してからあっという間に8ヶ月が経ちました。

この記事は feedforce Advent Calendar 2018 の16日目の記事です。(遅くなってごめんなさい…)

15日目は id:pokotyamu障害対応に強くなりたいのでレポートの書き方について考えてみた を書いてくれました!私も障害対応に強いエンジニアを目指して頑張りやす。

さて、今回は現在弊社で行っている『オブジェクト指向設計実践ガイド』の読書会の紹介をしたいと思います。

ちなみに昨年も読書会は開催されていたようですね。

developer.feedforce.jp

私個人としては前回の『メタプログラミングRuby』の読書会以来2度目の読書会です!

developer.feedforce.jp

で、どんな感じ?

ざっくり進め方

週に一度、参加したいメンバーが集まって毎回1章ずつ進めていきます。(現在第3章まで終了)

その日やる章は読んできている前提で、事前に『気になったこと』『役立ちそうなこと』『疑問に思ったこと』『その他諸々話したいこと』などを付箋に書いてきてもらいます。

それをホワイトボードに貼りながら、みんなであれこれ話し合います。その日の読書会の振り返りも含めて所要時間は1〜1.5時間ぐらいです。

『オブジェクト指向設計実践ガイド』読書会のホワイトボード

f:id:daido1976:20181220211224j:plain
個人的にすごく好きな第3章のホワイトボード

出てきた話題に個人的な感想を添えて

先日やって記憶に新しい第3章の話が中心ですが、、、

なんでもかんでも DI すればいいってもんでもない

こういう本で出てきたテクニックってすぐプロダクトのコードで使いたくなるけど、何も考えずに DI しまくると、逆に読みづらいコードになるよね、というお話。

本書内でも依存を減らす別解として DI ではなく、以下の Gear#wheel のようにクラス内の別メソッドにインスタンスの作成を切り出す方法も紹介されていましたね。

class Gear
  attr_reader :chainring, :cog, :rim, :tire, :wheel
  def initialize(chainring, cog, rim, tire)
    @chainring = chainring
    @cog       = cog
    @rim       = rim
    @tire      = tire
  end

  def gear_inches
    ratio * wheel.diameter
  end

  def wheel
    @wheel ||= Wheel.new(rim, tire)
  end
# ...

ちなみに私は DI について Wikipedia で 依存性の注入 のページを10回ぐらい読んでも全然意味がわからなかったのですが、この本を読んですんなり理解が出来ました。

個人的には「Dependency injection (DI)」とか「依存性の注入」とか仰々しい名前があまり好きでないので、初学者に教える機会があれば「インスタンスの作成をクラスの外に切り出すと依存が減っていい感じに書けるよ」と言ってあげようと思います。

キーワード引数と net/http の話

第3章の中盤は「引数の順番への依存を取り除く」ための話が数ページに渡って続けられていたのですが、Ruby 2.4 ぐらいからプログラミングを始めたゆとりの私にとっては「ここに書いてあること全部、キーワード引数でよくないすか???」という感想でした。

実際大抵の場合はキーワード引数で代替できるという話でしたが、例えば Ruby の標準ライブラリである net/httpNet::HTTP クラス だと、引数の数がむちゃくちゃ多いので全部キーワード引数になると辛いよねという話をしていただき、なるほどなーと思いました。

「知っている」と「依存」は同義

本書内では「○○を知っているオブジェクト」という言い回しがよく使われますが、オブジェクトが他のオブジェクトについて「知っている」ということは同時にオブジェクト同士が「依存関係にある」ことだ、と明言されており、これはわかりやすいねという話をしました。

よくアプリケーションを開発している時でも、「このクラス (モジュール) が○○を知ってるのって自然かな?」みたいな話が上がるのですが、その観点って大事なんだなと腹落ちしました。

結論

『オブジェクト指向設計実践ガイド』めっちゃ勉強になります!!!

最後に

今回は弊社で行っている『オブジェクト指向設計実践ガイド』の読書会の紹介をしました!

それにしても、『オブジェクト指向設計実践ガイド』がたまにプードル本って呼ばれる理由が全然わからなかったのですが、原題が『Practical Object-Oriented Design in Ruby』だから頭文字を取って POODR (プードル) なんですね…!

Practical Object-Oriented Design in Ruby

feedforce Advent Calendar 2018 の17日目は id:daikiki情熱と強引さが人を巻き込む ~ゴルフで感じた身になる教訓~ です!ゴルフの記事かと思ったら公私ともに活かせる「巻き込み力」のお話でした。ゴルフ好きな方もそうでない方もぜひご覧ください!

それでは、またお会いしましょう ^^

f:id:daido1976:20181220211616j:plain
みんなのオブジェクト指向設計実践ガイド (POODR本)