Chatwork Creator's Note

ビジネスチャット「チャットワーク」のエンジニアとデザイナーのブログです。

ビジネスチャット「Chatwork」のエンジニアとデザイナーのブログです。

読者になる

Scala福岡 2019で「実践 Clean Architecture」を発表させていただきました

こんにちは。藤井 @yoshiyoshifujii です。

先日 2019年01月19日(土) 、福岡で開催されました Scala福岡 に登壇させていただきました。

scala-fukuoka.org

発表資料は、こちらです。

また、発表にあたり作成したソースコードは、こちらです。

github.com

以下、資料作成と発表にあたり、調べた内容を書きますー!!

調べた内容

あらためて、Clean Architectureを実践するのに必要な内容を調べましたので、そのあたりを書きだしておきます。

Clean Architecture本を読んだ

Clean Architecture 達人に学ぶソフトウェアの構造と設計

Clean Architecture 達人に学ぶソフトウェアの構造と設計

Clean Architectureについては、 例の図 が最初に飛び込んできた情報で、そこから、体系的に学ぶというのもあまりきちんと出来ておりませんでしたので、上記の本をみっちりと読み込みました。

発表にも含めさせていただきましたが、ポリモーフィズム、SOLID原則、コンポーネントの原則あたりを、著者のアンクル・ボブがどのようにアーキテクチャのレベルで理解しClean Architectureに反映しているのかといったあたりが書かれておりました。

なるほど。この方はコードのレベルからアーキテクチャの概念レベルまで見通して考えるアーキテクトなのだと思い、書かれている内容に大筋で共感しつつも、こじつけているような理論もあり、それはそれで興味深かったです。

なかでも、ソフトウェアを 「方針」「詳細」 に分割したうえで、 詳細の変更の影響を方針に与えず、方針に注力した開発を進めたうえで、詳細については後から柔軟に変更できる、ソフトな設計と実装を実践していくといったあたりが、ドメイン駆動設計と通じる部分があり、相性の良い組み合わせだと思いました。

ScalaのClean Architectureサンプルを読んだ

体系的に学んだうえで、Scalaでコード化していくにあたり、Chatworkでも、ScalaをClean Architectureで作っているモジュールがいくつかありますが、微妙に改善したいなーと思うあたりとか、モヤっとする部分とか、書籍とあえて完全に一致させず改良している部分もあり、シンプルに書籍に近い形で実装されているコードを探し、拝見させていただきました。

その中で、Okudaさんの以下のスライドとコードがとても参考になりました。ありがとうございました!!

github.com

Clean Architecture本の中で、「境界を越える」あたりのモデルについて、Scalaのコードで書かれており、Input Port / Output Port の境界の越え方を、かなり参考にさせていただきました。

Tagless Final Styleについて調べた

Use Caseをコードにする際、どうしてもRDBやCacheなどの「詳細」に相当する文脈がコードに表れており、なんとかして排除したいと思っておりました。

そもそも、かとじゅんさんの scala-ddd-base というライブラリが超絶便利にボイラープレートを減らせるので、実践するならこれは外せないだろうという想いから、そこで使われているTagless Final Styleなテクニックを学ぶことが良いんじゃないかと思い、徹底的に調べてみました。

Aoyamaさんの、スライドとコードがとても参考になりました。ありがとうございました!!

github.com

めっちゃスライドとコードを読ませていただいて、自分なりに理解して、Qiitaにまとめたりコードを書きました。

qiita.com

github.com

Free Monadについて調べた

Tagless Final Styleの場合、Higher Kindが異なる場合のfor式での合成が、複雑になる部分があり、Free Monadの場合、そのあたりを独立して定義できる様子でしたので、調べました。

typelevel.org

が、このあたりは、いまのところ、まだ理解半分ほどでして…

もう少し調べて理解を深めたいところです。

まとめ

今回、Scala福岡 2019を開催いただきました、スタッフの皆様、スポンサー様、参加者の皆様、ありがとうございました。

また、色々とご支援いただきましたChatwork社員の皆様、ありがとうございました。

登壇により色々な知見を得ることができました。

自社に社会に還元していけるよう頑張っていきます。

以上です。