📚

「ちょうぜつソフトウェア設計入門」でSOLID勉強会+実践会をやってみた

2023/06/09に公開

みなさん、勉強会やってますか〜!

こんにちは〜!お昼時の天気の良さが気持ちいい季節になりましたね🌞
あすみ(@asumikam)です!

みなさんは勉強会やってますか?
今日は、社内で企画した勉強会について書いていきたいとおもいます🖋

勉強会+実践会をするに至るまで

私が所属しているPJではスクラムという開発手法を用いて日々開発をしています。
そのスクラムのイベントの中に「スプリントレトロスペクティブ」、つまりふりかえりをやっているのですが、何回もやっていくうちに「メンバー間の技術力の差」に関してのお悩みが目立っているな〜と感じ始めました。
「設計に関して、言われればわかるのだが自分で一から書くのは難しいかも・・・。」
DDDをベースとした設計方針で開発をしており、基本的な設計概念は共有されています。もちろん個人でDDDの本も読むこともしています。ただ、いざコードに落とし込む時にどこに何を書けばいいか悩んでしまう、もっともっと"理解"してえ・・・!と言った様な悩みでした。
(あるある🥺わかるすぎる🥺)

PJの中で得手不得手があるのも当然だし、知識力・技術力・設計力にバラつきがあるのも当然。
今よりもっとみんなが開発をガンガン進めていけるために、何かできることはないかな〜〜と考えました。

DDD自体の勉強会なども考えたのですが、まずは基礎の大事なところをちゃんと理解するのがチームに必要そうだな、と判断しました。また、ただ勉強会するだけじゃなくて、何か「書く経験」みたいなところもセットでできるとより定着するかな、と考えました。

そして、思いついたのがSOLIDの勉強会+実践会。
インプットして、アウトプットすれば、最強なのでは??と思い立ちました。

そこで登場、「ちょうぜつ本」。

https://www.amazon.co.jp/dp/4297132346

田中 ひさてるさんが書いた、この世の大事なことの全てが詰まっている本です。(あまりにも大雑把すぎるが、本当にそう思っている)
読んだ時からズッキューン来てめちゃくちゃ好きな本の1つです。

ボリューム的にも内容的にもピッタリだったため、この本を用いて勉強会部分を構成しました。

面白かったのは、「この本でやるよー」と決めて8人中6人が既にその本を持っていたことです。
読了してるのは半分くらいだったので、2週目まして(私も含め)の人も結構いました。

勉強会の構成

それぞれ、1〜2時間くらいで構成しています。
全6回、集中型でやっていたので同じペアでずっとやってました。

  • 第1回
    • ちょうぜつ本の第1章・第2章・第3章を読んだ感想
  • 第2回
    • ちょうぜつ本の第5章の「S」部分を読んだ感想
    • 実践
  • 第3回
    • ちょうぜつ本の第5章の「O」部分を読んだ感想
    • 実践
  • 第4回
    • ちょうぜつ本の第5章の「L」部分を読んだ感想
    • 実践
  • 第5回
    • ちょうぜつ本の第5章の「I」部分を読んだ感想
    • 実践
  • 第6回
    • ちょうぜつ本の第5章の「D」部分を読んだ感想
    • 実践
    • アディショナル視聴

実践の部分では以下のGithubを使用させていただき、「良くないコード」から「良いコード」に変える部分をペアプロしながら書いていく、という手法をとりました。

https://github.com/accesto/solid-php
https://github.com/nahidulhasan/solid-principles
https://github.com/wataridori/solid-php-example

勉強会の様子

第1回

わーっと感想を出して、その後ペアになって感想を言い合いました。

https://twitter.com/tanakahisateru/status/1659701783277740032?s=20

オタクの感想がひさてるさんにも届いたので幸せでした。

第2回〜第6回

本読んだ感想会 -> 実装 -> それぞれサマリをチームで共有
というスタイルで進めました。

感想会の様子はこんなかんじ!

やるお題によっては、実装フェーズがすぐ終わってしまった時もあったので、動画を見たりしていました。
「D」のタイミングで時間が余ったので、nrs(@nrslib)さんの以下の動画をみんなで視聴しました。

https://www.youtube.com/watch?v=x9drPWnxuNc

やってみてどうだったか

実は毎回アンケートを取ってみていました。

難易度

上記の結果、6回分がごちゃっと入ってるのでちょっとわかりにくいですが😂全体的に見ると難易度的にはちょうどよかったみたいです。(既に技術力高めの人は「簡単だった」寄りではありましたが)
「難しかった」は、ダントツでリスコフの置換原則のところでした・・・!というか全部その票。
「ピンとこないかも」状態からコードを書いてみて、「やっぱりあんまりピンとこない?」、サマリ共有フェーズでみんなで話して「雰囲気は・・・わかったぞ?」な感じで進めていけた気はしました。
(会社でやってたのですが、テックリードがぴょこっと入ってきてソイソイっと教えてくれたのデカかったw)

やってみて学んだこと・楽しかったところ

SOLIDごちゃまぜですが、一部抜粋です。

「ペアプロ楽しかった」
「実践形式の勉強会新鮮で良いね!」
「interface / abstractはいつでも題材になるなーーって思った。感覚のすり合わせ大事」
「SOLIDって基本詰まってるな〜と実感しました。あとペアが成長している」
「◎理論は結構いい感じだと思った。言ってることはわかる。」 <- リスコフの話
「説明するのむじ〜「事前条件」とか「事後条件」とか「クラス不変条件」とかも必修科目だよなと思った」
「「そもそも継承じゃなくね」という思考・発想は持つべきだなー」
「本がわかりやすかった」 <-そうじゃろう!?😍(何様)
「コードの利用する側とされる側でタスク並行したいときは最初にinterfaceだけのタスクやってから進めればいいのかもなと思った」
「依存関係逆転の法則、いろんなところで使われてそうだし、使って行ってできるだけ依存をなくしていきたいと思いました。以前よりも成瀬さんの動画への解像度が上がったの感じられて勉強してる効果を実感できた!」
「Dはとりあえずインターフェース(抽象)を作れの還俗。成瀬さんの動画。次に何言うか想像できるぐらい、冴えてた。理解深まる。」

本読んで感想言うだけじゃなくて、「ペアプロしながら手を動かす」をするのは自分だけじゃなく、ペアの理解度の底上げにも十分貢献できたみたいなので、成功かなという気持ちです🎉
余談なのですが、この勉強会をやる前にも成瀬さんの動画をこのメンバーで見ており、以前見た時よりも今回見た時の方が理解度が増してる感じがめちゃくちゃ気持ちよかったです✨

企画してみて

うん、まず大好きな本がチームメンバー全員が持つことになったのは本当によかった(エゴ)
全員で読んだのは一部の章ですが、わたしがほんとーに好きなのは第9章なので、メンバー全員(少なくともまだ読んでない半分)が第9章まで行ってくれることを願うばかりです😘

今回ペアのパワーバランスもちょっと意識して組んでみましたが、それはめちゃくちゃよかったな〜と感じています。既に分かっている人が、ピンときてない人に教えられる、という環境を作れました。ずっと同じペアだったのも文脈合わせられて成功だったな〜と思いました。

ちょっと改善できたらなと思うのは、既存のGithubで例題が結構シンプルなので実装で考えるフェーズが少し手薄だった回があったところです。(I・Dあたり)
準備期間短めでやったのですが、もう少し準備期間があったら題材探しの旅(もしくは題材作り)をしっかりやった方がいい感・・・!
というか、「ちょうぜつ本」の例を自分の手で書いてみる、って方法でもよかったのかもしれない🤔?

効果はあったのか

・・・まだわかりません!(!?)
が、きっと効果はあることでしょう!!(!?!?)
・・・というのも、そんなにすぐ力がつくならみんな困ってませんから😇

ただ、「いつもやってるのがこれだったんだ」とか、「チームのあの人はこれやりたくてあんな実装してたんだ」とか、「今までの経験」への納得感はめちゃくちゃ上がったと思います。
「本でなんとなく読んだアレ」から、「あの時実装したアレ」に変わってるな〜と言うのも感じました!(よりしっくりきてる感)

ここから・・・圧倒的成長💪💪💪をしてくれることを願うばかりです。

おわりに

お祭り女なので、よく勉強会やらイベントを社内で企画しているので、また近いうちに他イベントのレポも投稿しま〜〜す👋

NE株式会社の開発ブログ

Discussion