「モノリスからマイクロサービスへ」の読書会をしました

# はじめに

本記事は、自分が所属している開発チームメンバーと技術書の輪読会をした振り返り記事になります。

読書本は、O'Reilly Japan社出版の「**モノリスからマイクロサービスへ――モノリスを進化させる実践移行ガイド**」です。

https://www.oreilly.co.jp/books/9784873119311/

>本書は、モノリスからマイクロサービスアーキテクチャへと移行するための実践的なガイドです。マイクロサービスが自分たちのシステムに適しているかを判断するところから、ビジネスを維持しながらモノリシックなシステムを少しずつマイクロサービスに切り替えていく方法、さらには、マイクロサービスアーキテクチャが成長するにつれて起こる課題への対処の仕方まで、豊富な例やシナリオを用いて解説します。また、モノリスやデータベースを分解していくのに役立つ様々なパターンやテクニックも扱います。
システムのアーキテクチャ移行について具体的な方法を解説する本書は、エンジニア必携の一冊です。

## なぜしたのか

### 「マイクロサービスなんもわからん」という状態に対しての不安
現在、自分は昨年βリリースしたばかりの新サービスの開発に携わっています。

https://qiita.com/sho-hata/items/054c77392cc61bc2f3ac

上記の記事でも書きましたが、これから、サービスの成長に合わせ適切な設計のあり方を模索していかなければならない状況にあり、今後の進むべき方向性の舵取りが重要です。

最近（といってもかなり前から）では「**マイクロサービス**」という設計技法・ワードを目にする機会が多くなりました。マイクロサービスという言葉については知っていたり聞いたことはあっても、**「よくわかっていない」というのが正直な自分の状態でした。**

適切なアーキテクチャ決定をしていくためには、最近の技術トレンドを把握し続けることは重要です。
ここで、「**採用するかどうかは別にして、マイクロサービスについて雰囲気で理解するのはマズい！！**」という意識が芽生えました。

### 1人でやるより複数でやりたい
まず言葉の定義や概要を把握するため、マイクロサービスについて扱ったWeb上の技術ブログや記事を一通り目を通したのですが、「やはり体系的な知識を取り入れたい」と考え、技術書を読むことにしました。

ここで、以下のようなことを考えました。
- (※実際に取り入れるかどうかは別にして)**「マイクロサービスの考え方をいざ取り入れよう」となった時に背景をちゃんと理解してくれる人は1人でも多い方がいい**

- １人で読み進めるより、複数人で読んだ方が以下のようなメリットがあって良い
    - **「人に説明する」前提があるので、内容をより理解しようとする**
    - 章ごとに担当を割り振るので、担当以外の章までじっくり深く読む必要がなく、読み進める速度が倍

ぼんやりとこんなことを考えて、ある日開発メンバーの1人に話したところ、「いいね！やろう！」と快く承諾してもらい、実際に輪読会が始まることになりました。

## 「モノリスからマイクロサービスへ」を選んだ理由

今回読んだ本以外の候補としては、
- **マイクロサービスアーキテクチャ（O'Reilly Japan）**

https://www.oreilly.co.jp/books/9784873117607/

- **マイクロサービスパターン --実践的システムデザインのためのコード解説(impress)**\

https://www.amazon.co.jp/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E8%A7%A3%E8%AA%AC-impress-top-gear/dp/4295008583/ref=asc_df_4295008583/?tag=jpgo-22&linkCode=df0&hvadid=426152749640&hvpos=&hvnetw=g&hvrand=11354427085232857933&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9053292&hvtargid=pla-895438500137&psc=1&th=1&psc=1

がありましたが、概念についての詳細な内容やマイクロサービスでのコード設計の方法というより、モノリシックからマイクロサービスへの実践的な内容を学んでみたかったため、「モノリスからマイクロサービスへ」を手に取りました。

## 輪読会をやる上でのルール
### 開催サイクル
輪読会は、章ごとに担当を振り分けて、以下のようなサイクルで進めました。所用期間は3週間ほどでした。
- **サイクル**
    - 1回の時間：30分
    - もくもく作業（担当箇所を読み進める・資料作成に当てる時間）：3回
    - 担当箇所の発表・内容についての議論:1回


そして、**モチベーション高く**読書・資料作成を進めるために、資料以下のようなルールを決めて進めました。

### 資料をつくるときのおまじない
#### 時間をかけない！
#### わからないところはわからないとしておいて、飛ばす！
#### 内容を書き写すだけでなく、自分が重要と思ったところだけを、自分の言葉で噛み砕いてコメントする！
#### 必ずしも書籍の章立て・項立てどおりしなくても良い！

こういったルールを`資料作成時のおまじない`として決めておくことで、読書・資料作成のハードルをできるだけ下げることを意識しました。
輪読会がメンバーの負担になってしまっては元も子もないと考えたためです。

## やってみて得られたこと
### 結論：かなり良かった
1人で技術書を読むときは、どこかで内容が頭に入らなかったり、文字がうわ滑りすることがありました。
輪読会では、どうしても**読んだ内容を人に対して説明する**ということが必要になるため、1人で読むときよりも内容をより深く理解できたような気がしています。

また、普段の業務でマイクロサービスについて話が上がった時に、前提が共有された上で話が進むこともメリットでした。
今までどこかぼんやりとしていたチーム内の議論の輪郭が、よりはっきりしてきたという実感があります。

### 資料
輪読会メンバーと一緒に作り上げた資料は以下になります。「なるべく負担に思わない程度に」というルールでしたが、各章のポイントがまとまっておりとても良い資料になっています。

https://vaulted-waterlily-11a.notion.site/930c0826738c48bea213dc736ffb5875

## おわりに
### 「モノリスからマイクロサービスへ」の内容について
ざっくりとした内容は輪読会の資料にまとめています。

ここでは簡単な感想としてとどめますが、
- **誰かの真似をするのではなく、自分の問題について考え、合理的な意思決定をすること**
- **マイクロサービスは段階的に導入すること**

を前提に、「モノリシックなシステムをどのように分割してマイクロサービスに落とし込むか」をかなり詳細かつ具体的な実例をもとに解説した良書だと思います。
採用するかどうかは別にして、ぜひ一読されることをお勧めします。

---

最後に、輪読会の目的に賛同し参加してくださったメンバーの方に感謝します:qiitan:（日々本当に良いメンバーに囲まれて楽しく開発できております。また他の技術書でもやりましょう！！）