【セッションレポート】 Developers.IO 2016 in Osaka で ゲンバのクリーンアーキテクチャを発表しました! #cmdevio2016
CM Developers.IO 2016 in Osaka
二週間以上も前のことになりますが、Develpers IO in Osaka 2016 で ゲンバのクリーンアーキテクチャと題して、クリーンアーキテクチャ を用いて、現場でモバイルバックエンドAPIをどのように開発しているかについて発表しました。
発表スライド
Content of session
当日発表したセッションの概要です。
クリーンアーキテクチャとは
Clean codeの著者であるRovert C.Martin氏が提案したアーキテクチャです。外界(API I/F, DB Schema, 外部システム)に依存しないコードをどのように記述し、パッケージ等を整理するかについて明確な方針を与えます。
外部に依存しないコードを記述するために DI(依存性注入) と DIP(依存性反転の原則)を用いて外部に依存するコードの抽象を内部のモジュールに持たせる必要が生じます。
クリーンアーキテクチャに基づいた方針を適用することでシステム外部の都合に依存しない、テスタビリティに優れたシステムを作成できます。
レイヤーの区別をどのように行ったか
クリーンアーキテクチャの方針を守る為に、Entities, Use cases, Interface Adapters等のレイヤに対応したコードをどのように置いていくか判断する必要がありますが、そのために実際に現場で行ったパッケージ構成の例について発表しました。
DI & DIPを使ってどう実装したか
PlayFramework 2.4 からDIコンテナとしてGuiceの使用が推奨されており、それを用いて実際にどのようにして外部に非依存なコードを実現したかについてサンプルプロジェクトを元に説明しました。
外界の作用とどう向き合ったか
クリーンアーキテクチャの方針を守ることで外界の作用(具体的には仕様変更)に対してどのような恩恵が得られたかについて発表しました。
レスポンスのフィールドが増えたケース
新しいエンドポイントが増えたケース
CloudFrontの署名つきURLを通常の参照URLに変更したケース
を図を交えて発表しました。
終わりに
発表後の質疑応答で、ORMに依存したプロジェクトの場合はどうなるかなどで議論が盛り上がりました。打ち上げ後に歩きながら弊社都元と設計関連の話題を交わしたのが印象に残っています。
宣伝
二週間前のセッションのレポートになりましたが、二週間後にはDevelopers.IO Tourの二場所目となるセッションが名古屋で開催されます!
こちらも奮ってご参加ください!