【セッションレポート】 Developers.IO 2016 in Osaka で ゲンバのクリーンアーキテクチャを発表しました! #cmdevio2016

2016.04.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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, 外部システム)に依存しないコードをどのように記述し、パッケージ等を整理するかについて明確な方針を与えます。

fig1

外部に依存しないコードを記述するために DI(依存性注入) と DIP(依存性反転の原則)を用いて外部に依存するコードの抽象を内部のモジュールに持たせる必要が生じます。

fig2

クリーンアーキテクチャに基づいた方針を適用することでシステム外部の都合に依存しない、テスタビリティに優れたシステムを作成できます。

fig3

レイヤーの区別をどのように行ったか

クリーンアーキテクチャの方針を守る為に、Entities, Use cases, Interface Adapters等のレイヤに対応したコードをどのように置いていくか判断する必要がありますが、そのために実際に現場で行ったパッケージ構成の例について発表しました。

fig4

DI & DIPを使ってどう実装したか

PlayFramework 2.4 からDIコンテナとしてGuiceの使用が推奨されており、それを用いて実際にどのようにして外部に非依存なコードを実現したかについてサンプルプロジェクトを元に説明しました。

fig5

外界の作用とどう向き合ったか

クリーンアーキテクチャの方針を守ることで外界の作用(具体的には仕様変更)に対してどのような恩恵が得られたかについて発表しました。

レスポンスのフィールドが増えたケース

fig6

新しいエンドポイントが増えたケース

fig7

CloudFrontの署名つきURLを通常の参照URLに変更したケース

fig8

を図を交えて発表しました。

終わりに

発表後の質疑応答で、ORMに依存したプロジェクトの場合はどうなるかなどで議論が盛り上がりました。打ち上げ後に歩きながら弊社都元と設計関連の話題を交わしたのが印象に残っています。

宣伝

二週間前のセッションのレポートになりましたが、二週間後にはDevelopers.IO Tourの二場所目となるセッションが名古屋で開催されます!

devnagoya

イベント参加申込はこちら

こちらも奮ってご参加ください!