輪読会でチームを強くする

この記事は [Wano Group Advent Calendar 2023](https://qiita.com/advent-calendar/2023/wano-group) の10日目の記事となります。

## この記事に書いていること
* 輪読会の一般的ないくつかの方法の紹介
* 実際に弊社で行った輪読会を具体的に紹介
* 実施してみてわかったことなど

## 輪読会

輪読会と一口に言ってもやり方は様々です。
実際に弊社で1年ほど前から行っている輪読会のやり方を、経緯を含めて紹介していこうと思います。

今現在も開催して良かったと非常に感じているので、これから輪読会を行おうと思っている方々の参考になれば幸いです。


## 輪読会の目的
個人的に輪読会の目的について重要だと思うことは以下です。

:::note info
1. チームへのアウトプットを前提とした継続的なインプット
2. 技術を軸とした相互コミュニケーションの機会
3. チーム内の認識をすり合わせでき、コードベースの一貫性につながる
:::

同じ本を読んでいても人それぞれ理解の仕方は違います。

自分一人で読んでいたら気づかなかったことや理解できなかったことなどを人から教えてもらえる機会にもなります。

## 輪読会の形式
輪読会の形式について、大きく分けてこのようなパターンがあります。

```mermaid
flowchart TB
  事前に読んでくる-->|誰かが読んでくる| 発表会方式
  事前に読んでくる-->|全員読んでくる| ディスカッション方式

  事前に読まない-->読書会方式
```

### 1. 発表会方式
事前に読んで資料などを用意する担当を持ち回りなどで決め、当日スピーカーになって資料を発表する

:::note info
Pros
* 担当以外は事前準備が必要ない
* 整理された資料なので本の内容を理解するのに効率がいい
:::

:::note warn
Cons
* 担当をしたとしても負担が大きく、輪読会に対しマイナスのモチベーションになってしまいかねない
:::

* ケース例
    * カンファレンスなどでスピーカーになる予行練習を兼ねる
    * 分量が多い本を選定している


### 2. ディスカッション方式
各自が事前にピックアップした疑問点や議題についてディスカッションをメインで行う

:::note info
Pros
* 会の時間で本を読む時間を取られず、最もディスカッションに時間を割ける
:::

:::note warn
Cons
* ある程度全メンバー事前に読んでくることが求められる
:::

* ケース例
    * ディスカッションをすることのウェイトが輪読会の目的として大きい
    * 抽象度が高く解釈が異なりそうな本を選定している

### 3. 読書会方式
その場で本を読み進める

:::note info
Pros
* 事前準備が不要
:::

:::note warn
Cons
* ディスカッションの時間が不足しがち
:::

* ケース例
    * 本を読むこと自体のウェイトが輪読会の目的として大きい
    * 難易度が高い本を選定している

## 実際にどう輪読会を進めたか

|#||備考|
|--|--|--|
|人数|3 ~ 6名ほど|強制参加ではないので毎回人数が変動|
|時間|1時間|時間配分は本によって調整|
|方式|各自事前に読んでくることを推奨したディスカッション方式 or 読書会方式|読んでいなくても大丈夫なように工夫|

現在進行形のものも含めて、これまで読み進めた本は以下の3冊です。

|#|本|方式|
|--|--|--|
|第一回|[A Philosophy of Software Design](https://www.amazon.co.jp/-/en/John-Ousterhout/dp/1732102201)|ディスカッション方式|
|第二回|[［試して理解］Linuxのしくみ　―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識](https://www.amazon.co.jp/%EF%BC%BB%E8%A9%A6%E3%81%97%E3%81%A6%E7%90%86%E8%A7%A3%EF%BC%BDLinux%E3%81%AE%E3%81%97%E3%81%8F%E3%81%BF-%E2%80%95%E5%AE%9F%E9%A8%93%E3%81%A8%E5%9B%B3%E8%A7%A3%E3%81%A7%E5%AD%A6%E3%81%B6OS%E3%80%81%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3%E3%80%81%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98%E3%80%90%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88%E3%80%91-%E6%AD%A6%E5%86%85-%E8%A6%9A/dp/429713148X/ref=asc_df_429713148X/?tag=jpgo-22&linkCode=df0&hvadid=588889454778&hvpos=&hvnetw=g&hvrand=8982955895124786090&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009341&hvtargid=pla-1776418963434&psc=1&mcid=70ca5394a2c538a1b5826d5845109e09&th=1&psc=1)|読書会方式|
|第三回|[単体テストの考え方/使い方](https://www.amazon.co.jp/s?k=%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E8%80%83%E3%81%88%E6%96%B9%2F%E4%BD%BF%E3%81%84%E6%96%B9&adgrpid=143359561363&gclid=CjwKCAiApaarBhB7EiwAYiMwquukf4cZOL92kQ8P7-UOkYc07M4ViSF7wvLaGVVBKMr8zyKcWXWPmBoC2xMQAvD_BwE&hvadid=679050172073&hvdev=c&hvlocphy=1009341&hvnetw=g&hvqmt=e&hvrand=1424059845086694898&hvtargid=kwd-1930173515696&hydadcr=1792_13657028&jp-ad-ap=0&tag=googhydr-22&ref=pd_sl_6s2zd0ia5f_e)|読書会 & ディスカッション方式|

投票で決めたり、話し合って決めたりしてます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231923/90c7824f-e83a-2688-10fb-0f5b42f2a6c1.png" width="50%"> 

### 第一回: A Philosophy of Software Design
ソフトウェア設計におけるベーシックな問題である複雑性の管理にフォーカスした本です。

**具体的な進め方**
週2回 リモート業務日 朝の1時間
|内容|時間配分|
|--|--|
|事前に読んで気になった文章などをそれぞれ書きだす（下画像）|10分|
|読んでいないメンバー向けにサマリーを共有|5分|
|書き出した内容について共有・ディスカッション|45分|

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231923/7f9e2064-d90f-7c95-6597-97b6f6331c02.png" width="70%"> 


**選定理由**
* 本
  * 世間の書評がよく複数メンバーが元々興味があった
  * 翻訳本がないので個人では読み進めづらかった
  * 分量が少ないので第一回に採用しやすかった
* 方式
  * 抽象度がある程度高く、洋書なため解釈が別れそうだったのでディスカッションをメインに行いたかった

**やってみて**
* ディスカッション形式だと盛り上がり、シンプルに楽しい
* 洋書であることと頻度が週2と高いことで、少し事前に読むことが負担に感じる時も
* 洋書を難なく1冊読破できた


### 第二回: ［試して理解］Linuxのしくみ
Linux OSの仕組みが実験とその結果の図などを中心に解説されており、OSとハードウェアに関する仕組みについての本です。

**具体的な進め方**
週1回 終業前の1時間
|内容|時間配分|
|--|--|
|ファシリテーター中心に読み進める|40分|
|サーバーで実際に試す|20分|

**選定理由**
* 本
  * エンジニアとしてOSについて理解することはとてもベーシックで重要である
  * インフラ業務に関わるメンバーが偏っており、業務で学ぶ機会が少ないメンバーが多い
* 方式
  * 本の内容的にディスカッションする余地がほとんどなく、勉強会的な側面が大きかった

**やってみて**
* 本の内容から派生して、実際に稼働しているサーバーで試すことでより理解しやすい
* 理解度が高いメンバーがファシリテートする必要があり、負担が偏る
* ディスカッションがないので、一方向のコミュニケーションになりがち


### 第三回: 単体テストの考え方/使い方
**具体的な進め方**
週1回 終業前の1時間
|内容|時間配分|
|--|--|
|ファシリテーター中心に読み進める|40分|
|業務でどう活かせるかをディスカッション|20分|


**選定理由**
* 本
  * チーム内でテストについての関心が高まっていた
  * いくつかの候補の本を挙げた上で投票を行った
* 方式
  * 特に大きな理由はなく、第二回の延長で行った

**やってみて**
* 業務に実際にどう活かせそうかを話すことで、アウトプットにつながりやすい
* テストとは という部分の認識を揃えることができた
* 全体で本を読み進めつつ事前に読んだ人が要点をかいつまんでいくといったように、発表会と読書会の間をとることで負担が軽減され、無理のない運営ができた



## 参加メンバーの声

1人目 Dさん
> 少なくとも参加者のうち誰か一人が該当箇所に対して事前に目を通していれば会が成立する形にした点は本当に良かったと思う。おかげで、1年間無理なく継続できた


2人目 Sさん
> キーワードを参加者で共有して、ちょっとしたミームみたいな扱いにできる点が輪読会のいいところだと思います。
deep module とか red flag とか、何人かで単語を共通言語にすると定着度も高いというか。

3人目 Mさん
> ジュニアレベルのメンバーとして参加しても、輪読会を通してシステム開発の知見と、各メンバーそれぞれの考え方を同時に吸収できる良い機会だと思います。
また、メンバー間で共通認識を持つことにより、「次実装するときは、このアイデアを使ってこうしてみよう」と次の行動に繋げやすい面もありました。

A Philosophy of Software Design はキャッチーなワードが多く、読んだその場でスタンプを作ってみんなではしゃいでいました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231923/e5d59e8a-0521-592a-c8e6-7ee3478958ac.png" width="70%"> 



## 最後に
輪読会で特に優れている点は、メンバーのレベルアップはもちろんチームとしての認識を相互のコミュニケーションを経た上で統一できる点であると思います。

また、個人的に A Philosophy of Software Design は様々ないい気づきをくれた本なので、輪読会関係なくおすすめです！

改めて、この記事が輪読会に興味ある方の後押しになればと思います。

---

現在、Wanoグループ / TuneCore Japan では人材募集をしています。興味のある方は下記を参照してください。

Wano | [Wano Group JOBS](https://group.wano.co.jp/jobs/)
TuneCore Japan | [TuneCore Japan JOBS](https://www.tunecore.co.jp/jobs)