コネヒト開発者ブログ

コネヒト開発者ブログ

Go言語による並行処理の輪読会で行った、輪読会でワイワイするための工夫

こんにちは!@TOC です! 最近は「ゾン100〜ゾンビになるまでにしたい100のこと〜」というアニメにハマっており、見るたびに「やりたいことをやるんだ!」という気持ちになります🙌 キャラも魅力的なのでこれからが楽しみですね!

さて、今回は社内で行った「Go言語による並行処理」本の輪読会が最近完走したので、その様子をご紹介しながら、輪読会をより良いものにするために行った工夫点についてご紹介します。


目次


輪読会で読む本の選定

今回はオライリーから出版されている「Go言語による並行処理」という本を読む本として選定しました。

www.oreilly.co.jp

Goに関する本は数多く出版されていますが、この本はGo言語における並行処理に特化した本で、Goの並行処理を学ぼうと思った人は一度目にしたことがあるのではないでしょうか。

数あるGoの本の中からこの本を選定した理由は2つあります。

  1. 本の内容として難易度が高く、一人で読むと心が折れそうだから
  2. Goの強みでもある並行処理を業務で活かせるレベルに引き上げたいから

一つ目は少し弱気な理由にはなりますが、今回輪読会をやった感想としてはかなり大事なポイントかなと思っております。「Go言語による並行処理」本はかなり丁寧に解説されてるので、読んだらなんとなくわかった気になりますが、理解を深める・自分の中で昇華するまで一人で行うにはかなり骨が折れます。

以前、GoのLT会でこの本が紹介された時も「一人で読んで心が折れた」と言った意見が多く見られました。

その点、輪読会で一緒に読む仲間がいると進めようという気持ちも高まりますし、議論することで理解が深まりやすいです。なので、この本に限らず、興味あるけどなかなか読み進められない本は一緒に読む仲間を見つけるのは一つ良い方法かなと思います。

二つ目に関しては、現在コネヒトではテックビジョンとしてLet's Goというものを掲げております。

tech-vision.connehito.com

新たな武器としてGoを選定したわけですが、せっかくならGoの強みである並行処理についてちゃんと理解したい、業務で使えるようになりたい、という思いもあり、この本を選定しました。

どういう形式でやったのか

頻度としては隔週くらいで行いました。事前に読む章を決めて読んでおき、学びになったこと、疑問に思ったことを付箋に書いて各付箋について議論していきます。

輪読会の様子
わからない箇所について議論をしたり、後述するようにコードを実際に動かしてみて理解を深めたりしました。

こうやって議論をすることで一人だけでやるよりも理解を深められるのが輪読会のいいところですね!

輪読会を進める上での工夫

今回輪読した本は丁寧に書いてありつつも、理解に至るには難易度も高く進めるのも一苦労でした。そのため輪読会を進める上で工夫した点を紹介できればと思います。

1. 写経当番を決めて、実際に手を動かす

「Go言語による並行処理」は3章くらいからコード表記が多くなり、実践的な内容になってきます。並行処理は実際に動かしてみたり、コードを変えてみたりして挙動を確かめないと全然動きが想像できなかったりするので、3章以降では各パートで写経当番を決めて、各自写経してくることにしました。

写経したコードをコミットできるリポジトリを用意し、自分の担当した分のコードをコミットしていきます。

これは実際にコードを動かしながら学べるし、負担を分担できるため今回のケースとしてはかなり有用だったかなと思います。みんなやってるんだから自分もやらなきゃって気持ちになりますしね!

やはりある程度イメージしづらい内容だとコードで語る方が理解しやすくなる側面があるかと思うので、難易度が高かったりイメージしづらい内容の輪読会の場合、この方法はおすすめです。

2. 学んだことを実践的にアウトプットしてみる勉強会でワイワイ

輪読会を完走し、実際に写経しながら進めていたとはいえ、やはり 知っている使える には大きなギャップがあります。なので、テーマはなんでもいいから、実際に並行処理を書いてみてみんなでワイワイする勉強会を行おうという話になりました。

せっかくならガッツリやって、最後みんなで飲みにでも行こうという話になったので、有志で日曜日に会社に集まって、各々がテーマを決めて並行処理を書いてみる会を行いました。

テーマは以下のようなものがありました

  • PHPのEnumからGoのEnumに変換するConverterを並行処理を使って作成してみる
  • 並行処理を使って、複数のAPIレスポンスをまとめる処理を書いてみる
  • 並列処理のアルゴリズムを自分で作ってみる
  • プッシュ通知処理をゴルーチンを使って実装してみる

それぞれテーマが興味深く、かつ具体性もあったので取り掛かりやすかったのかなとも思います!

まずはみんなでワイワイランチ!

ランチの様子
お腹を満たしたら、それぞれもくもく作業!

2時間やったら中間進捗発表して、さらに2時間やって最終発表といった感じでメリハリをつけてもくもくすることができました。

ちょっとした発表時間があると、進めようという程よい緊張感もあり、集中して取り組めたと思います。 発表は実際にデモをしてみたり、ホワイトボードの前で解説したりとみんな進捗でてて最高でした!(写真撮り忘れた…)

勉強会も終わってパシャリ
ちょっとしたプチ開発合宿みたいな感じで楽しかったです!

最近はオフラインの場も増えてきたので、こういった機会をたまに設けると学びが加速しそうですね!

最後に

今回は「Go言語による並行処理」本の輪読会を有意義にするために行ったことを紹介させていただきました。

この輪読会は途中で日程が合わずに継続が危ぶまれる時もありましたが、なんとか完走することができました(実際開始から終了までのリードタイムとしては10ヶ月ほどかかっています…笑)。

難しい部分もありつつ、工夫もしながら完走できたのはすごい自信にも繋がったかなと思うので、また10月からも新しい本の輪読会に取り組む予定です!

みなさんも一人で読むと心が折れそうになる本は仲間を見つけてワイワイしながら取り組んでみるのはどうでしょうか?🙌

みんなで打ち上げ!
お疲れ様でした!!