対応デバイスの拡大 2016 iOS mobile Android mobile Web pc / mobile Chrome cast Apple TV Android TV IPTV Daydream Clova Desk Google Nest Hub Game Console 2017 2019 2018 2020 2021 Amazon Alexa Amazon Fire TV Amazon FIre Tablet 2022
対応デバイスの拡大 2016 iOS mobile Android mobile Web pc / mobile Chrome cast Apple TV Android TV IPTV Daydream Clova Desk Google Nest Hub Game Console 2017 2019 2018 2020 2021 Amazon Alexa Amazon Fire TV Amazon FIre Tablet 2022 再掲
Web Unity Mobile Browser Mobile App Smart Display/ Speaker TV iOS iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Amazon Fire TV Amazon FIre Tablet Mobile Web ユースケース 技術スタック
Display/ Speaker 22 対応デバイスの拡大 Desktop Browser Mobile Browser Mobile App TV iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Amazon Fire TV Amazon FIre Tablet Mobile Web 開発体制
Display/ Speaker 23 対応デバイスの拡大 Desktop Browser Mobile Browser Mobile App TV iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Amazon Fire TV Amazon FIre Tablet Mobile Web 開発体制
Repository UseCase module Repository module Android/iOS Application KMM Application Service Service module Domain Domain module API Client API Client module Proto Proto module Repository Interface API Service Interface SDK Adapter Feature UILogic UI API Service API Service module
Repository UseCase module Repository module Android/iOS Application KMM Application Service Service module Domain Domain module API Client API Client module Proto Proto module Repository Interface API Service Interface SDK Adapter Feature UILogic UI API Service API Service module
Repository UseCase module Repository module Android/iOS Application KMM Application Service Service module Domain Domain module API Client API Client module Proto Proto module Repository Interface API Service Interface SDK Adapter Feature UILogic UI API Service API Service module 各プラットフォームと KMMのソースコードは別の Gitリポジトリで管理。 → バージョン管理の煩雑さから、 将来的にはモノレポ を目指す。
Repository UseCase module Repository module Android/iOS Application KMM Application Service Service module Domain Domain module API Client API Client module Proto Proto module Repository Interface API Service Interface SDK Adapter Feature UILogic UI API Service API Service module
Repository UseCase module Repository module Android/iOS Application KMM Application Service Service module Domain Domain module API Client API Client module Proto Proto module Repository Interface API Service Interface SDK Adapter Feature UILogic UI API Service API Service module 各機能ごとにUseCaseを作成。 アプリケーション全体で使用する UseCaseはServiceとして定義。 ServiceはさまざまなUseCaseから呼ばれ得る。
Repository UseCase module Repository module Android/iOS Application KMM Application Service Service module Domain Domain module API Client API Client module Proto Proto module Repository Interface API Service Interface SDK Adapter Feature UILogic UI API Service API Service module
Repository UseCase module Repository module Android/iOS Application KMM Application Service Service module Domain Domain module API Client API Client module Proto Proto module Repository Interface API Service Interface SDK Adapter Feature UILogic UI API Service API Service module DomainがRepositoryやAPIに関心を持たないようにしつつ、 UseCaseやServiceからRepositoryやAPIを呼び出せるよう、 interfaceをDomain moduleに定義。
Repository UseCase module Repository module Android/iOS Application KMM Application Service Service module Domain Domain module API Client API Client module Proto Proto module Repository Interface API Service Interface SDK Adapter Feature UILogic UI API Service API Service module
Repository UseCase module Repository module Android/iOS Application KMM Application Service Service module Domain Domain module API Client API Client module Proto Proto module Repository Interface API Service Interface SDK Adapter Feature UILogic UI API Service API Service module バージョン管理のために、 API ClientをラップするAPI Serviceを定義。 API Clientはprotocol bufferを返し、API ServiceでDomainに変換。
Repository UseCase module Repository module Android/iOS Application KMM Application Service Service module Domain Domain module API Client API Client module Proto Proto module Repository Interface API Service Interface SDK Adapter Feature UILogic UI API Service API Service module
Repository UseCase module Repository module Android/iOS Application KMM Application Service Service module Domain Domain module API Client API Client module Proto Proto module Repository Interface API Service Interface SDK Adapter Feature UILogic UI API Service API Service module KMMのライブラリがないSDKなどは、 RepositoryにAdapterを定義し、各アプリケーションで実装。 ログ、パフォーマンス計測機構や KMMへの移行に時間がかかる大きな Repositoryなど。
Web Unity Mobile Browser Mobile App Smart Display/ Speaker TV iOS iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Amazon Fire TV Amazon FIre Tablet Mobile Web ユースケース 技術スタック 再掲
Web Unity Mobile Browser Mobile App Smart Display/ Speaker TV iOS iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Amazon Fire TV Amazon FIre Tablet Mobile Web ユースケース 技術スタック 全クライアントで汎化できる Entityの共通化
Web Unity Mobile Browser Mobile App Smart Display/ Speaker TV iOS iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Amazon Fire TV Amazon FIre Tablet Mobile Web ユースケース 技術スタック Player、platform-specificな部分の共通化
Web Unity Mobile Browser Mobile App Smart Display/ Speaker TV iOS iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Amazon Fire TV Amazon FIre Tablet Mobile Web ユースケース 技術スタック Player、platform-specificな部分の共通化
Web Unity Mobile Browser Mobile App Smart Display/ Speaker TV iOS iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Amazon Fire TV Amazon FIre Tablet Mobile Web ユースケース 技術スタック Player、platform-specificな 部分の共通化
Web Unity Mobile Browser Mobile App Smart Display/ Speaker TV iOS iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Amazon Fire TV Amazon FIre Tablet Mobile Web ユースケース 技術スタック UseCase、Entityの共通化 ※ platform-specificなAPIも部分的に共通化可能
Web Unity Mobile Browser Mobile App Smart Display/ Speaker TV iOS iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Amazon Fire TV Amazon FIre Tablet Mobile Web ユースケース 技術スタック UseCase、Entityの共通化 ※ platform-specificなAPIも部分的に共通化可能
UI Presentation DB platform-specific APIs External Interfaces Gateways Presenters Controllers Platform Common UI / Presenters / Controllers Desktop Browser UseCases Android Web Unity Mobile App UseCases Mobile Browser UseCases Smart Display/Speaker UseCases TV UseCases iOS iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Mobile Web Common Entities Multi Platform Common Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature API DB Purchase Log etc Purchase Purchase etc etc etc Player Player Player Domain Service Domain service Domain Object Domain Object Domain Object Value Object Value Object Value Object Domain Service Feature Feature Kotlin MPP
Presentation DB platform-specific APIs External Interfaces Gateways Presenters Controllers Platform Common UI / Presenters / Controllers Desktop Browser UseCases Android Web Unity Mobile App UseCases Mobile Browser UseCases Smart Display/Speaker UseCases TV UseCases iOS iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Mobile Web Multi Platform Common Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature API DB Purchase Log etc Purchase Purchase etc etc etc Player Player Player Feature Feature Kotlin MPP 全クライアントで汎化できる Entityの共通化 Common Entities Domain Service Domain service Domain Object Domain Object Domain Object Value Object Value Object Value Object Domain Service Entities
Service Domain service Domain Object Domain Object Domain Object Value Object Value Object Value Object Domain Service 全体戦略 91 UI Presentation DB platform-specific APIs External Interfaces UI / Presenters / Controllers Desktop Browser UseCases Mobile App UseCases Mobile Browser UseCases Smart Display/Speaker UseCases TV UseCases iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Mobile Web Multi Platform Common Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature API DB Log etc Feature Feature Unity Platform Common Purchase Purchase Purchase etc etc etc Player Player Player Player、platform-specificな 部分の共通化 Android Web iOS Use Cases Gateways Presenters Controllers Entities
etc etc etc Player Player Player Common Entities Domain Service Domain service Domain Object Domain Object Domain Object Value Object Value Object Value Object Domain Service 全体戦略 92 UI Presentation DB platform-specific APIs External Interfaces Gateways Presenters Controllers UI / Presenters / Controllers Desktop Browser UseCases Mobile Browser UseCases Smart Display/Speaker UseCases iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Mobile Web Multi Platform Common Feature Feature Feature Feature Feature Feature Feature Feature Feature API DB Log etc Android Web Unity iOS Mobile App UseCases TV UseCases Feature Feature Feature Feature Feature Feature Feature Feature UseCase、Entityの共通化 Kotlin MPP Use Cases Entities
service Domain Object Domain Object Domain Object Value Object Value Object Value Object Domain Service 全体戦略 93 UI Presentation DB platform-specific APIs External Interfaces UI / Presenters / Controllers Desktop Browser UseCases Mobile App UseCases Mobile Browser UseCases Smart Display/Speaker UseCases TV UseCases iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Mobile Web Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Unity Platform Common Purchase Purchase Purchase etc etc etc Player Player Player Android Web iOS Use Cases Gateways Presenters Controllers Entities Multi Platform Common API DB Log etc Kotlin MPP APIやDB、ログなど外部IFの共通化 ※ 適用できないPFもあり
/ Presenters / Controllers Desktop Browser UseCases Mobile App UseCases Mobile Browser UseCases Smart Display/Speaker UseCases TV UseCases iOS Mobile Android Mobile PC Web Chrome cast Apple TV Android TV IPTV Google Nest Hub Game Console Mobile Web Common Entities Multi Platform Common Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature API DB Purchase Log etc Purchase Purchase etc etc etc Player Player Player Domain Service Domain service Domain Object Domain Object Domain Object Value Object Value Object Value Object Domain Service Feature Feature • クライアント全体でのEntityの共通化 • プラットフォーム軸での共通化 • ユースケース軸での共通化 • 外部IFの共通化 • モジュラアーキテクチャによる再利用性の促進 • モジュールのバージョン管理と開発フローの構築 • マルチプラットフォーム・クロスプラットフォーム技術の進化への追随