見出し画像

Fundsエンジニアが今年輪読した本を振り返る

これは「Funds Advent Calendar 2023」6日目の記事です。

こんにちは、サーバーサイドエンジニアの中村です。

プロダクト開発本部ではエンジニアを中心に有志で輪読会を開催しています。

チョイスする本は業務に関連する物が多いのですが、今回は今年2023年に読んだ本たちを簡単に紹介したいと思います。

内容はサーバーサイド寄りです。

RDRA2.0 ハンドブック

RDRAはRelationship Driven Requirement Analysisの略で モデルベースの要件定義手法であり、その手法を学べるのが本書になります。

要件を分析する枠組みとしてシステム価値(システム化する目的)、システム外部環境(システムがどのように使われるか)、システム境界(システムの接点となる入出力)、システム(システム化したい情報と状態)という4つの視点があり、それらをRDRAレイヤーと定義しています。個々の要素の関係性をRDRAレイヤーに求め、レイヤー間のアイコンのつながりからアイコン間の依存関係が決まります。その関係を使って要件をシステマティックに定義していきます。

RDRAが避けようとしていることとして「要件定義が単なるドキュメント生成作業になってしまうこと」があります。大事なのはドキュメントを作ることではなく、要件定義に関わる人たちとのコミュニケーションのベースを作り、システム化しなくてはいけないものは何かを明らかにすることです。

ここが私が良いなと思った部分で、輪読会の中でも実際に本書に沿ってRDRAのダイアグラム図を書いてみようということで、既存のファンズの機能を一つ取り上げてみんなでワイワイmiroで図を書いてみたりしてみましたが、RDRAで作成されたダイアグラム図は全体の関係性を俯瞰的に把握しやすい・説明に使いやすい・間違いがあった場合に気づきやすいという良さがありました。

RDRAで対応できる範囲はあくまで上流部分なのでAPI設計や他の詳細設計は別途APIドキュメントなどで管理していく必要はありますが、社内でも要件定義のアウトプットはマークダウン形式のドキュメントが中心なので、RDRAに沿って要件を図で可視化してみるのもプロジェクトメンバーで認識揃えやすそうで結構良さそうではという意見もあったりしました。まだ本格的にRDRAを利用するまでには至っていませんが、RDRAの手法で取り入れられる部分は社内で取り入れていきたいなと考えています。

例えばRDRAの状態モデル図は、いわゆる状態遷移図ですが「どのユースケースをトリガーにして次の状態に進むか」がしっかり表現できてるのが良いなと思いました(詳しい図は本書をご覧ください)。文章だけでは表現しにくいユースケース同士の関係だったり、どのユースケースをトリガーに状態が変更されるのかといった情報はRDRAのダイアグラムを利用することでわかりやすく表現することができます。

Scala with Cats

underscore社が無料で公開しているScalaの関数型ライブラリのcatsの入門書籍です。

冒頭に「本書の目的は、プログラム設計を構成する方法としてモナドやファンク他などの関数型プログラミングパターンを紹介することと、これらの概念がCatsでどのように実装されているかを説明することの2点である」と記載されている通り、型クラス自体の解説から始まりモノイド、セミグループ、ファンクター、モナド…と各型クラスの解説とそれをどうcatsで実現するかが丁寧に解説されています。

各章ごとに練習問題がありますが、ちゃんと解答も用意されているのでcatsに触れたことがあればそこまでつまづくことなく読み進めることができると思います。

輪読会では(事前に翻訳済みの)本書を読む→各自で問題を解く→(気になる部分やわからない部分があれば)議論するという流れで行いました。

個人的には英文のままではなく翻訳済みのものを用意して輪読するというのが効率的でよかったなと思います。翻訳という事前準備が必要ですが、本書は抽象的な概念の説明が多いため英語のままよりは日本語に変換したほうが理解しやすいし議論がしやすいです。

普段業務で利用しているcatsのAPIについてはすんなりと読めたのですが、馴染みがないものについては理解が結構しんどい部分もありました(ファンクタのcontramapやimapあたりが個人的に難しかった。。)が、その都度時間かけて議論したのが個人的に学びが多かったと思います。この辺りは人によって理解の幅が違うので、お互いの理解度を擦り合わせながら議論するといい感じかもしれません。

いきなり関数型プログラミングのスタイルで実装するプロジェクトに放り込まれた方は、ぜひチームメンバーと一緒に読んでみてください。

Essential Slick

https://books.underscore.io/essential-slick/

同じくunderscore社が無料公開しているScalaのSlickの入門書です。

Slickは関数型プログラミングを用いてデータベースとのやり取りを抽象化する、型安全でリアクティブなデータベースクエリおよびアクセスライブラリです。

『Essential Slick』は、Slickデータベースライブラリを使ってアプリケーションを構築するためのチュートリアル本になります。

Slickアプリケーションでの実践的な知識、Slickで作業するために必要なコアコンセプトの理解、データの選択や変更のためのSlickの機能の使い方、Slickでのスキーマモデリング、Scalaの型システムをSlickで活用する方法、クエリの細かな制御のために低レベルのPlain SQLを使う方法をについて幅広く書かれています。

弊社でもSlickを利用しており個人的にはSlick自体には不満はないものの何となく使っているため、より深い理解を得たいというモチベーションで本書を読みました。

本書の前半部分のQueryとDBIOActionの解説がわかりやすく、両者はSlickの重要な概念になるので時間がない方は最初の2章だけでも読む価値があると思います。Query、DBIOAction、Futureの関係が理解できます。

逆に3章以降は各DB操作をSlickのAPIでどう実現するかというチュートリアルのような感じなので最初が理解できれば後はスムーズに読めそうという印象です。

本書では内部結合のスタイルとしてモナディックスタイルとアプリカティブスタイルの2つが紹介されていますが、実際どちらが良いのかというは参加者間で議論したりしました。生成されたSQLを比較するとアプリカティブスタイルでは生成されるSQL複雑になる可能性があるので、モナディックスタイルの方がいいのではという結論になりました。(詳細は割愛します)

まとめ


弊社のエンジニアは定期的に輪読会を行なっていますが、アイデアの共有やプロダクト改善の議論のきっかけになったり、コミニュケーションの機会だったりモチベーションの向上につながったりと輪読会のメリットって意外に新しい知識の習得以外にも色々あるなと当事者として感じています。

以上、今年輪読会で読んだ本のご紹介でした。

この記事が気に入ったらサポートをしてみませんか?