NAKKA-Kの技術ブログ

技術に関する知見や考え方などを投稿します。

リモート輪読会で 「オブジェクト指向設計実践ガイド」を読んだ時のやり方と感想

このコロナの影響もあったのですが、もともと遠隔でやる予定だったのでZoomを使ってリモート輪読会を実施しました。 今回読んだ本は以下の「オブジェクト指向設計実践ガイド」です。

ですが実はもう1人のメンバーが読んでいたのは最新の原書で、Rubyのバージョンが新しくなっていたり、多少文言が変わっていたりしましたが特に問題はありませんでした。

Practical Object-Oriented Design: An Agile Primer Using Ruby (2nd Edition)

Practical Object-Oriented Design: An Agile Primer Using Ruby (2nd Edition)

  • 作者:Metz, Sandi
  • 発売日: 2018/09/01
  • メディア: ペーパーバック

本の内容

1章 オブジェクト指向設計

設計とは?どう使う?と言う話で、変更用意性を保って今のコストと未来のコストを以下に天秤にかけるかについて書いていました。

2章 単一責任のクラスを設計する

ここでは自転車を参考にしてサンプルコードを記述しています。 オブジェクト思考ソフトウェアの第一歩が単一責任であることを説明し、変更可能でメンテナンス性の高いソフトウェアを作るための考え方が散りばめられている。

3章 依存性を管理する

全章のコードを依存関係に着目して改善しています。 依存性の方向や注入に関して書かれています。

4章 柔軟なインターフェース をつくる

言語的なインターフェース ではなく、概念としてインターフェース とは何であるかを説明しています。 自転車のサンプルコードに追加して旅行を絡めて、変更用意性の悪化やデメテルの法則について理解することができます。

5章 ダックタイピングでコストを削減する

この辺りから動的型付け言語でオプジェクト指向を実践するための話が多くで始めます。 そしてダックタイプを適応できる場所を見つけるためのtipsが書かれています。

6章 継承によって振る舞いを獲得する

継承とは暗黙的な権限の移譲であることが述べられ、継承を適応する時の抽象化の方法がかなり詳しく書かれています。 特にオブジェクト指向に慣れていない間はアンチパターン的な継承をやりがちなのですが、この章を読めば是正することができると思います。

7章 モジュールでロールの振る舞いを共有する

継承だけではなくロール(役割)としてモジュールを設計し、クラスに適応する方法が書かれています。 ここに関しては特にRubyの色が強くなっているのですが、基本的な設計のパターンについても多く書かれており読んでおいた方が良い章になっています。

8章 コンポジションでオブジェクトを組み合わせる

これまでのサンプルコードの集大成として最後の設計を適応しています。 クラスなどに抽出する設計が過剰である場合などの方法が書かれている章になります。

9章 費用対効果の高いテストを設計する

良いテストとは何か?いつテストするのか?どうテストするのか?について事細かに書いた章です。 正直、テストを勉強するためにこの章だけでも読ませる価値があるかもしれません。 動的型付け言語でクラスの依存関係をテストする方法とはこうだったのか!?と改めて驚かされました。

輪読会の進め方

本の内容をGoogleDocsで共有し、輪読会が始まる前にみんなでコメントを書いておく形で実施しました。

f:id:NAKKA-K:20200404155052p:plain

輪読会が始まったらDocsに書かれたコメントを辿り、コメントを書いた人がそのコメントの意図や追加情報を話します。 それに対してみんなで、これはどうだ? あれはこうじゃないか? などと議論を深めていきます。

1回ごとの輪読会で何章進めるかはメンバーの人数やレベル感に合わせて簡単に調節できるので結構やりやすかった印象があります。

実施しての感想

対話式で実施していくので内容について深く理解できますし、さらっと流していた部分を他の人が突っ込んでくれたりするので思いもしなかった知識を得ることができます。

この本では毎週1章ずつ進めていたので、一回30分~1時間くらいで終わるので全く負担はありませんでした。 毎週1章読むだけなので先が気になって本を読む意欲が湧くのですが、あえて先まで読まずにその意欲を別の本を読むことに使っていました。 すると全体を通して本を読む数が軒並み上がりますし、輪読会があるためしっかりと読まないといけなくて強制的にモチベーションを高めることもできました。

私は今、複数の輪読会グループに参加していますが然程時間的影響はなく、今までよりも理解水準が上がったなというメリットだけを感じています。

リモートワークが普及してきた今の時期に合わせてリモート輪読会も普及させてtipsを共有して欲しいところですね。