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
64
タップルのサービス特性に合わせた設計方針を考える
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.7k
iOS開発におけるGitHub Actions self-hosted runnerを利用したオンプレ CI/CD のすゝめ
kazumanagano
0
42
Github Actions self-hosted runners のすゝめ
kazumanagano
0
410
モバイルアプリのオブザーバビリティを向上させるプラクティス
kazumanagano
7
3.7k
タップル モバイルアプリにE2Eテストが導入されるまでの軌跡
kazumanagano
0
27
より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
型付き API リクエストを実現するいくつかの手法とその選択 / Typed API Request
euxn23
8
2.2k
聞き手から登壇者へ: RubyKaigi2024 LTでの初挑戦が 教えてくれた、可能性の星
mikik0
1
130
Macとオーディオ再生 2024/11/02
yusukeito
0
370
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
ActiveSupport::Notifications supporting instrumentation of Rails apps with OpenTelemetry
ymtdzzz
1
230
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
「今のプロジェクトいろいろ大変なんですよ、app/services とかもあって……」/After Kaigi on Rails 2024 LT Night
junk0612
5
2.1k
リアーキテクチャxDDD 1年間の取り組みと進化
hsawaji
1
220
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
350
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
2
250
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.1k
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
Teambox: Starting and Learning
jrom
133
8.8k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
4 Signs Your Business is Dying
shpigford
180
21k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Docker and Python
trallard
40
3.1k
Raft: Consensus for Rubyists
vanstee
136
6.6k
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
ご清聴ありがとうございました