Slide 1

Slide 1 text

React Nativeアプリを DDDで開発している話 2022/06/29 オブジェクト指向LT会 vol.4 #ooltjp

Slide 2

Slide 2 text

本日の内容は事例紹介になります ● React Native モバイルアプリを 軽量DDD で開発しています! ● 具体的にどういったアーキテクチャで開発しているかを事例紹介します! ● 軽量DDD から脱却して戦略的設計を取り入れた ドメイン駆動 にするため に検討していることも共有します!

Slide 3

Slide 3 text

自己紹介 nihemak (にへまこ) Makoto Nihei ● ドクターメイト株式会社 (2022/01〜) ● プロダクト開発エンジニア ● 日々キャッチアップ中

Slide 4

Slide 4 text

ドクターメイト株式会社

Slide 5

Slide 5 text

対象モバイルアプリの概要 ● 介護施設向け医療相談モバイルアプリ ○ 介護施設の職員さんが弊社の医師に医療相談をするためのアプリです ● 技術スタック ○ React Native (Expo) ○ TypeScript ○ Firebase / GCP

Slide 6

Slide 6 text

いわゆる軽量DDDで開発しています! ● 発端はテスタブル化 ○ ユニットテストを書きやすくするためにドメインモデルを中心としたオニオンアー キテクチャにリアーキテクティングしました ■ 転職してユニットテストに救われている話 - Speaker Deck ● 軽量DDDだが戦略的設計もしてます ○ ドメインエキスパートとの共同開発 ○ ユビキタス言語などの定義 ○ etc

Slide 7

Slide 7 text

アーキテクチャの概要 【レイヤーの責務】 ● Domain層 ○ 他の層に依存しないドメインモデル ● UseCase層 ○ ユースケースに沿った調整役 ● Component層 ○ Reactの世界 ● Infrastructure層 ○ Firebaseなど外部の面倒を見る

Slide 8

Slide 8 text

アーキテクチャの概要 【どんな感じか?】 ● 責務が明確になった ○ テストは書きやすいです ○ レビューもしやすいです ● 新規機能開発はこれに沿っている ○ 若干、開発は重たいかも ● クラスベースです ○ TypeScript/Reactらしくないかも

Slide 9

Slide 9 text

【WIP】開発はドメイン駆動にしたいですよね ● ALPS (Application-Level Profile Semantics) からの駆動を現在検討中 ○ 既に要件や仕様の定義にALPSを使っている ○ Firestoreデータモデル設計でも語句の定義と連動させている ○ リアーキテクティングではドメインモデルもこれに沿った形にした ■ せっかくなのでドメインモデル等のINPUTにできないかなと...

Slide 10

Slide 10 text

ところでApplication-Level Profile Semantics (ALPS)とは? ● アプリケーションレベルのセマンティクス(語句の意味や構造)を表現するフォーマッ トです。JSON、HTMLなど汎用メディアにアプリケーション固有のセマンティックスを 加え、情報の説明や操作の理解に役立てます。 ○ イントロダクション | alps-asd より ASD(Application State Diagram) ・Ontology(語句) ・Taxonomy(語句の階層) ・Choreography(振る舞い)

Slide 11

Slide 11 text

まとめ ● テスタブルを目的とした結果、ドメインモデルを中心としたオニオンアーキテ クチャに行き着いて軽量DDDになりました! ● 【WIP】軽量DDDから脱却してドメイン駆動の開発にするためにALPS駆動 で要件や仕様からシームレスにドメインモデルへと繋げられないか検討し ています! ● ALPS (Application-Level Profile Semantics) とはアプリケーションレベルのセ マンティクス(語句の意味や構造)を表現するフォーマットです!

Slide 12

Slide 12 text

We are hiring! ● ドクターメイトでは一緒に持続可能な医療介護の実現に取り組 んでいただけるエンジニアを絶賛大募集中です! ○ カジュアル面談などもしておりますのでお気軽にお声かけ くださいませー