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
220
0
Share
タップルのサービス特性に合わせた設計方針を考える
2023/11 CA.swift #18
https://cyberagent.connpass.com/event/294204/
nade
October 20, 2023
More Decks by nade
See All by nade
Server-Driven UI入門: 画面のStateを直接受け取るアプローチ
kazumanagano
5
4k
iOS開発におけるGitHub Actions self-hosted runnerを利用したオンプレ CI/CD のすゝめ
kazumanagano
0
150
Github Actions self-hosted runners のすゝめ
kazumanagano
0
560
モバイルアプリのオブザーバビリティを向上させるプラクティス
kazumanagano
8
4.9k
タップル モバイルアプリにE2Eテストが導入されるまでの軌跡
kazumanagano
0
120
よりUXに近いSLI・SLOの運用による可用性の再設計
kazumanagano
4
8.8k
App Size Optimization への挑戦
kazumanagano
1
1.4k
無料トライアル施策のしくじりから学ぶサブスクリプション構成 ベストプラクティス
kazumanagano
2
2.4k
モノレポで複数アプリを リリースする場合の運用戦略
kazumanagano
0
4k
Other Decks in Programming
See All in Programming
Going Multiplatform with Your Android App (Android Makers 2026)
zsmb
1
220
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
780
条件判定に名前、つけてますか? #phperkaigi #c
77web
2
940
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
210
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
510
AIと共にエンジニアとPMの “二刀流”を実現する
naruogram
0
120
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
220
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
480
Radical Imagining - LIFT 2025-2027 Policy Agenda
lift1998
0
160
Nuxt Server Components
wattanx
0
240
Symfonyの特性(設計思想)を手軽に活かす特性(trait)
ickx
0
120
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
8
4.3k
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
Amusing Abliteration
ianozsvald
1
150
Designing for humans not robots
tammielis
254
26k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
150
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
240
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
Ethics towards AI in product and experience design
skipperchong
2
250
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
91
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
64
54k
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
ご清聴ありがとうございました