ESM アドベントカレンダー2023の17日目の記事です。
こんにちは haruguchiです。
この記事では社内で行なっている Clean Code 読書会の紹介と1年以上継続して良かったことを書きたいと思います。
Clean Codeについて
ボブおじさん(uncle bob)ことRobert C. Martinの著書で、クリーンで洗練されたコードを書くための手がかりをいろんな観点で示してくれる本です。
手がかりと書いたのはこの本の序論には以下のような文章があるからです。
クリーンコードを書くことを身につけるには努力が必要です。原則とかパターンといった知識を身につけるだけではだめなのです。実際に汗をかかなければならないのです。自分自身で実践してみて、そして失敗してみなければならないのです。また、他の人が実践しているのを、また失敗しているのを見なければならないのです。彼らがつまづき、やり直すのを観察しなければならないのです。彼らが判断に苦しむのを見て、間違った判断の結果として、彼らが支払うはめになった代償を見なければならないのです。 (序論より)
このように知識として知っていれば良いだけでなく自分で考え、または人と議論しクリーンなコードを書く訓練をする本なので読書会でディスカッションするのには最適だと考えています。
読書会の概要と進め方
この読書会は週1回1時間という枠でプロジェクトを横断して参加できるようになっています。また、特定の主催者をたてていないので、誰かが欠席しても人が集まれば自動的に開催されます。暗黙的なルールとして3人以上集まれば開催されることが多いです。
進め方は以下の通りです。
- 司会をたてる
- 読むところを決め黙読
- 読んだセクションの感想、意見、質問なんでも声に出す(ディスカッションパート)
- 時間の限り
2.
3.
を繰り返す - クロージング
- 終わった後はesaに感想を(任意)
司会の仕事はesaのページを作成するのと、1回の読書で読む範囲を決めることくらいなので誰でも気軽にできます。esaのページには見出しとして「参加メンバー一覧」、「読んだところ」、「次回読むことろ」などがありシンプルな作りになっています。
各自読み終わったらslackのスタンプで報告します。メンバー全員が読み終わったらディスカッションパートへ移行します。
ディスカッションといっても、そのセクションに対しての感想からわからなかったことまで気軽に発言していきみんなで理解を深めていきます。サンプルコードがJavaで書かれているということもあって、Java特有の知識に関してはJava経験者に教えてもらうことが多いです。
終わった後は各自任意でesaのコメント欄に感想を記入します。
読書会に1年以上参加して
Clean Code 読書会に参加して良かったことは次の3つです。
ディスカッションすることでメンバーの書いたコードへの理解が深まった
たとえば、クラスの中にメソッドをどの順番で定義するのか?という話題があります。本書では新聞の見出しのように抽象度の高いものから順に定義していく方法と、呼び出される順番に定義していく方法の2通りが出てきました。
# 新聞の見出しのように定義 class Foo def main method_a method_b end def method_a = method_c def method_b = method_d def method_c; end def method_d; end end # 呼び出す順に定義 class Foo def main method_a method_b end def method_a = method_c def method_c; end def method_b = method_d def method_d; end end
このことでディスカッションした結果、「こういう時はこっちの方が良いんじゃないかな」「僕は今までこの方法でやってましたね」「プロジェクトでは〜」「一貫して順番が決まってることが大事だよね」といった議論をすることで、コードが意図を持って書かれているということを意識するようになりました。
Ruby や JavaScript 以外の言語の本を読むことへの抵抗感がなくなった
本書はサンプルコードはJavaなのでRubyとJavaScriptしか理解していない私にとって最初はかなりとっつきにくいものでした。読書会では同じようなメンバーもたくさんいますがみんな工夫してエッセンスを抽出して理解していることに気づきました。サンプルコードはあくまでも、そのセクションで主張したいことに説得力を持たせるための例になっていることが多いので細かいコードを追うのではなく、どんなことをしているコードなのか全体像を掴むことが大切だと感じました。
他にもChat GPTにコードを解説させたり、リファレンスを読んだりと未知なる言語の本を読む知見がたまったのもこの読書会のおかげだと思っています。
興味関心の枝葉が広がった
Clean Codeの目次を見るとわかるように扱っている題材が広範に及びます。そのため、読書会の後、復習として気になるキーワードを拾っていくだけでも大変勉強になりました。 たとえば、デザインパターンの章ではGoFのデザインパターンが紹介されますが、あまり詳しく知らなかったこともあって結城浩さんのJava言語で学ぶデザインパターン入門第3版という本を購入し学習するきっかけとなりました。
他にも、並列処理やアスペクト志向プログラミングなど以前の自分に馴染みのなかった分野に対して興味を持てたことが収穫でした。
最後に
私たちは日々クリーンなコードとは何か考えてプロジェクトと向き合っています。弊社の読書会が何らかの参考になれば幸いです。
株式会社 永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発を通じてコミュニティと成長したいエンジニアを絶賛募集しています。