Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
タップルのサービス特性に合わせた設計方針を考える
Search
nade
October 20, 2023
Programming
0
72
タップルのサービス特性に合わせた設計方針を考える
2023/11 CA.swift #18
https://cyberagent.connpass.com/event/294204/
nade
October 20, 2023
Tweet
Share
More Decks by nade
See All by nade
Server-Driven UI入門: 画面のStateを直接受け取るアプローチ
kazumanagano
4
1.9k
iOS開発におけるGitHub Actions self-hosted runnerを利用したオンプレ CI/CD のすゝめ
kazumanagano
0
49
Github Actions self-hosted runners のすゝめ
kazumanagano
0
420
モバイルアプリのオブザーバビリティを向上させるプラクティス
kazumanagano
7
3.8k
タップル モバイルアプリにE2Eテストが導入されるまでの軌跡
kazumanagano
0
32
よりUXに近いSLI・SLOの運用による可用性の再設計
kazumanagano
4
8.4k
App Size Optimization への挑戦
kazumanagano
1
1.1k
無料トライアル施策のしくじりから学ぶサブスクリプション構成 ベストプラクティス
kazumanagano
2
2k
モノレポで複数アプリを リリースする場合の運用戦略
kazumanagano
0
3.4k
Other Decks in Programming
See All in Programming
CSC305 Lecture 25
javiergs
PRO
0
130
ソフトウェアの振る舞いに着目し 複雑な要件の開発に立ち向かう
rickyban
0
850
Serverless苦闘史
mosh_inc
0
150
DevFest Tokyo 2025 - Flutter のアプリアーキテクチャ現在地点
wasabeef
4
660
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
160
Haze - Real time background blurring
chrisbanes
1
460
CSC305 Lecture 26
javiergs
PRO
0
130
クリエイティブコーディングとRuby学習 / Creative Coding and Learning Ruby
chobishiba
0
3.7k
macOS なしで iOS アプリを開発する(※ただし xxx に限る)
mitsuharu
1
170
Discord Bot with AI -for English learners-
xin9le
1
120
Thoughts and experiences on Rust and TypeScript
unvalley
2
220
Testing Assembly: Code or Low Code - Navigating the Test Automation Options
maaretp
0
100
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
GitHub's CSS Performance
jonrohan
1030
460k
Embracing the Ebb and Flow
colly
84
4.5k
Designing Experiences People Love
moore
138
23k
Producing Creativity
orderedlist
PRO
341
39k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
Why Our Code Smells
bkeepers
PRO
335
57k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Transcript
タップルのサービス特性に合わせた 設計方針を考える 2023/11 CA.swift #18 Kazuma Nagano
アウトライン • アーキテクチャ特性の探しかた • タップルのアーキテクチャ特性をさがす ◦ 事業ドメインからさがす ◦ 機能要件からさがす ◦
暗黙特性からさがす • タップルのアーキテクチャ特性まとめ • これからの設計方針
┃経歴 ・2019年4月 新卒入社 (同期に yasui_akio, kazu) ・2019年5月 タップル iOS ・2023年2月
タップル iOSチーム リーダー ・2023年4月 Cyberagent Next Experts iOS ┃その他 ・なで肩 → なで ・昨日Mac版のバイオハザード ヴィレッジを クリアしました👏(2022 WWDCで紹介) 永野 一馬 / なで ながの かずま
【宣伝】Cyberagent Developer Experts / Next Experts について 参照:https://www.cyberagent.co.jp/way/list/detail/id=29271
CA.internal.swift について • CA.swift の社内限定版やってます ◦ 社内で意見をもらったり議論したり ◦ そこから社外発表に繋げたり ◦
外では話せないここだけの話をしたり • 対外的なCA.swiftと並んで、より気軽に事業部横断での 技術共有ができる場
タップルのアーキテクチャ特性はどこにあるのか
アーキテクチャ特性の探しかた
アーキテクチャ特性 ISOの公開しているソフトウェア品質特性の例 ISO/IEC 25010: https://iso25000.com/index.php/en/iso-25000-standards/iso-25010
アーキテクチャ特性 『ソフトウェアアーキテクチャの基礎』 4章 アーキテクチャ特性 p.60
アーキテクチャ特性 『ソフトウェアアーキテクチャの基礎』 4章 アーキテクチャ特性 p.60
アーキテクチャ特性 『ソフトウェアアーキテクチャの基礎』 4章 アーキテクチャ特性 p.60
“アーキテクトは、 • ドメインの関心事 • 明示的な要件 • 暗黙的な特性 という、少なくとも 3 つの方向からアーキテクチャ特性を明らかにできる。"
アーキテクチャ特性を明らかにする 『ソフトウェアアーキテクチャの基礎』 5章 アーキテクチャ特性を明らかにする p.67
ドメイン特性はドメインの特徴として求められる特性 アーキテクチャ特性は変更追加を行う先のドメインによって決まる場合がある 例 • ユーザーの能動アクションを増やすためのフリックなどの快適なUX (= ユーザビリティ / アジリティ /
分析容易性 ) • メッセージ機能の重要度が高く、ユーザー数や時間帯による負荷増大に 耐える必要(= 可用性 / スケーラビリティ) ドメインの関心事
明示的な要件 仕様の中の要件として要求される場合がある特性。 PMやデザイナーといったエンジニア以外のロールのメンバーでも認識可能 例 • 複数のサブスクリプションプランをユーザーごとに出し分け可能 (= 保守容易性 / 分析容易性
) • ユーザーごとに異なるUIを提供可能 (= 保守容易性 / 互換性)
要件にはほとんど現れないがプロジェクトの成功には欠かせないもの 開発者の目線で、要求がソフトウェアの設計構造に影響を与えると判断できるものも、 備えるべきアーキテクチャ特性 例 • チーム規模(保守容易性) • リリース頻度 / 変更量
(アジリティ) • 扱う情報の種類(セキュリティ) 暗黙特性 『ソフトウェアアーキテクチャの基礎』 p.58
タップルの • 事業ドメイン • 特徴的な機能要件 • 暗黙的な特性 の3つから改めて重要度の高い特性を考える タップルのアーキテクチャ特性について考える 『ソフトウェアアーキテクチャの基礎』
5章 アーキテクチャ特性を明らかにする p.67
タップルの事業ドメイン
タップルのいま • 10年目のサービス • 業界でも大手 • 23年9月TVCM放映開始 • コラボコンテンツ
直近の取り組み:初のTVCMを放映 「恋を応援する」をテーマに計3本のTVCMを全国配信にて放映中。 はじめてマッチングアプリを使う方でも 安心して使えるような訴求にしています。 参照:https://www.cyberagent.co.jp/news/detail/id=29296
直近の取り組み:コラボコンテンツ
事業の特徴 • 事業フェーズ ◦ 市場の伸び < 競合との競争 ◦ 速度感=アジリティが優位性に ◦
システム投資が回収可能なフェーズ • 新規参入より大手の寡占市場 ◦ 大規模なリデザイン < 機能改修 • マーケティング連動 ◦ CM ◦ コラボ機能
特徴的な機能要件
タップルのシステム特性 • コンテンツ = ユーザーの能動的なアクション ◦ eg) 新規登録、ユーザー情報入力、フリック ◦ アクションを増やすための快適な
UXの重要度が高い • いい人と出会える ◦ リコメンデーションロジック • サービスの信頼性 ◦ 安心安全、本人認証 • 高い可用性が求められる機能が限定的に ◦ メッセージ • 従量 / サブスクリプションの充実 ◦ 課金システム
取り組み:課金システム刷新 参照:iOSDC2023 StoreKit2を使ったアプリ内課金のフルリニューアル
取り組み:マイクロサービス化 ⇨ BFF 参照:タップルのマイクロサービスアーキテクチャに向けた取り組み
取り組み:マイクロサービス化 ⇨ BFF 参照:CABN2022 タップルにおけるBFFとopenAPI導入事例の紹介
おさらい)バックエンドを同じシステムと捉えると
バックエンドを同じシステムと捉えると App Presentation Logic UseCase Microservice A Mobile App BFF
Mobile Team Backend Team Microservice B
タップルの暗黙特性
チーム規模
Trafic 3~4人 リアーキテクチャ 1~2人 5~6人 swift化 ネイティブ モノレポ化
コードボリューム ---------------------------------------------------------------------------------------------- Language files blank comment code ---------------------------------------------------------------------------------------------- Swift 2966
41886 28497 237091 ---------------------------------------------------------------------------------------------- SUM: 2966 41886 28497 237091 ----------------------------------------------------------------------------------------------
直近のモバイルチームの課題 • メンバーが半年で倍に(5人 → 10人) ◦ ドメイン知識の浸透が不足気味 ◦ 新しい技術に対して意欲的なメンバーが多い •
モバイルのワンチーム化 ◦ ユーザー数がiOSのが多いが、メンバーは Androidのが層が厚い • KMP / BFFによる技術の学習コスト増大 ◦ Swift / Kotlin / Typescriptの3言語とそれに伴う環境構築が求められる ◦ 十分な知識を習得しないまま KMP / BFFを利用し結果的に生産性を落とす場合も • 検証の大規模化 ◦ 半期をかけたタブ単位の検証など、検証対象の規模が拡大 ◦ 同時に複数の検証が走るケースなど検証数も増 • 設計パターンの変更に伴うオーバーヘッド ◦ FluxとSwift ConcurrencyやKMPとの相性が悪い ◦ KMPとパターン統一をしつつ SwftUI / Swift Concurrencyを活用したコードに
アーキテクチャ / KMP
Feature Module開発 https://developers.cyberagent.co.jp/blog/archives/33752/
取り組み:セグメント最適化
取り組み:Firebase Personalization
タップルのアーキテクチャ特性まとめ
事業ドメイン • アジリティ(保守容易性 / 拡張性)の事業要求が高い • 安心安全のためのセキュリティ / 品質 特徴的な機能要件
• モジュール性(機能単位での堅牢性) • モバイルはユーザー行動を促進させるUXに集中(ユーザビリティ) 暗黙的な特性 • 大規模、複数の検証を容易に(検証容易性) • 若手が多く開発難易度を下げる必要あり(保守容易性) タップルのアーキテクチャ特性 『ソフトウェアアーキテクチャの基礎』 5章 アーキテクチャ特性を明らかにする p.67
タップルは • モジュール性を高めてUXを磨いていく ◦ マイクロサービス&BFF / Feature Module / 課金システム刷新
• 開発の難易度を下げて保守を簡単にしていく ◦ リアーキテクチャ / SwiftUI / Swift Concurrency • より大規模な検証を可能にする検証容易性に投資 ◦ セグメント最適化 / Personalization タップルのアーキテクチャ特性まとめ
これからについて
保守容易性 • KMPの責務限定 ◦ Android ⇨ iOS の動きに限定 ◦ iOSメンバーの専門性としてはアディショナルにし、若手の必須スキルにはしない
• 主要画面のアーキテクチャスタイル統一 ◦ 半年目処で統一していく モジュール性 / カスタマイズ性 • Server Driven UI の検証 • 生成AIの推進 これから
Server Driven UI https://medium.com/airbnb-engineering/a-deep-dive-into-airbnbs-server-driven-ui-system-842244c5f5 • バックエンドとのIFを画面の識別子とStateに統一することで画面構成の責務をバッ クエンドに移譲するアーキテクチャスタイル • AirBnB、Lyft、Expediaなどが推進
参考: 当初のBFFの導入背景 by CTO
なぜServer Driven UI ? • 当初の責務に沿った形でのBFF活用を目指せる • すでに導入済みのBFFを活用して検証容易性を推進できる ◦ リリースなしでのUI変更
◦ 大規模な個別最適化 • SwiftUIによってState ⇔ UIの変換がなめらかになった • BFFに責務を集約することで短期的な生成AIの活用を推進できる
おさらい)バックエンドを同じシステムと捉えると
生成AIの推進 https://medium.com/airbnb-engineering/a-deep-dive-into-airbnbs-server-driven-ui-system-842244c5f5
ご清聴ありがとうございました