読書会でガヤガヤしてきました - 第29回 西日暮里.rb オブジェクト指向設計実践ガイド読書会

nishinipporirb.doorkeeper.jp

先日出版されました「オブジェクト指向設計実践ガイド」の読書会に参加してきました。
一言で言うと最高でした。

本についてはまあいまさら僕が説明するまでもない気はしますが、Sandi Metzルールで有名なSandi Metz氏が書いた本の和訳です。
原著は5年前に出版されていたそうですが先日和訳版が出版されました。

翻訳者であるtaiki__tさんが西日暮里.rbのオーガナイザーをやっているということでせっかくだから翻訳者を交えてやっていこうぜというイベントだったようです。

読書会というのの形式で一般的なのかはよくわかりませんが、今回は読む時間をとって、付箋になんやかんや書いて、貼って、ざっとトークするというのをやりました。
予習済みの想定なので読む時間は、あんまりとってなかったです。たぶん1章10分くらい?
僕は5章か6章まで読んでたんですが、その状態で1章2章をパラ見するという経験をして、それだけで結構面白かったです。

トーク部分は、ちょっと脱線することもあったけど言いたいことを言えたし聞きたいことを聞けたしという感じで大満足です。
付箋にはなんでも書いてよかったのですが、大別すると「わかる」「これみんなは実際どうしてんの?」「これさすがにおかしくね?」の3つくらいのレベル感のものがありました。
2つ目は、まあたとえば定量的な計測の難しい感覚的な部分についてどう思うかという質問であったりとか、チーム開発でこれを実践していくためにはどうやってます?とかそういう話でした。

トーク的に広がりがあって面白かったのは2, 3はまあそれぞれ言いたいことがあるので盛り上がって、あと1には具体的な事例がついてるとネタとしてよさそうです。
本に書いてあってそうだよね〜〜〜わかる〜〜って程度の部分はトーク的にはさらっと流してよさそうだなと思いました。 *1

トーク内容で特に記憶に残ってるのは、「メソッド分割しすぎって思うことがある」という話。
いままで「でっかいメソッドは悪。殺すべし」ということは教わってきたけど「分割しすぎ」って言われたことがないのでふーんって感じでした。具体的なコードをみて話したわけではないので、どういうレベルのものを指していっているのかが気になりました。

あと、僕以外だれも付箋つけてなかったけど本の中にある『オブジェクト指向とは「依存関係を管理すること」です』ってフレーズがあってかっこいいなって思いました。
オブジェクト指向って何?」って聞かれたらどう答えるだろう。特に思いつかないけど。メッセージパッシングだよとかいってごまかしそう。

復習がてら読み直すにはいい会だったので第3章以降も開催されるといいなって思います。ぜひぜひ。


余談ですが買うなら物理本かgihyo digital publishing版がよさそうです。
Kindle版はコード部分のフォントがプロポーショナルで、しかも元ソースが = でアラインするタイプのフォーマットなのでクソ読みづらいです。

gihyo.jp


追記

あんまり本の内容を書きすぎてもよくないかなとおもって基本的には書かないようにしていたのだけど、どうもSandi Metzの主張と食い違うところがあったのでそこだけは書いておくことにした。

クラス内からのインスタンス変数アクセスもメソッド呼び出しを経由せよ、という内容があった。
その恩恵の例として、ちょっと値を変更したときにも呼び出す側のコードを変更せずに済むので保守性が高いというのがあった。

class Foo
  def bar
    @bar
  end

  def some_method
    puts bar
  end

  def another_method
    puts bar * 2
  end
end

変更するとこんな感じ

class Foo
  def bar
    "bar: #{@bar}"
  end

  def some_method
    puts bar
  end

  def another_method
    puts bar * 2
  end
end

ここについて強く主張していたのはmtsmfmさんだったと思うけどこのコードはよくなさそう。
インスタンス変数 @bar がある場合に bar メソッドはインスタンス変数 @bar を返すと期待してしまうけど実際は違う値が返ってくるから。驚き最小の原則に反する気がする。
@bar にナニカ変更を加えた値を使うなら例えば bar_inspection とかそういう別名メソッドを生やすべきでしょうよって感じの主張で、うんうんその通りだわって思った。*2

*1:意見交換は対立構造があったほうがいいよねって話なのですげー普通の話だった

*2:読んだとき微妙に首かしげたけど付箋に貼るの忘れてた……