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
月間4.5億回再生を超える大規模サービス TVer iOSアプリのリアーキテクチャ戦略 - i...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
TVer Inc.
PRO
August 26, 2024
Programming
16k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
月間4.5億回再生を超える大規模サービス TVer iOSアプリのリアーキテクチャ戦略 - iOSDC2024
iOSDC2024
https://fortee.jp/iosdc-japan-2024/proposal/00223e3b-6ba6-4dcc-8f78-7b8b27841ab5
TVer Inc.
PRO
August 26, 2024
More Decks by TVer Inc.
See All by TVer Inc.
TVer Web-based TVのリアーキテクチャ
techtver
PRO
0
230
Pub/Sub で実装するワーカープールパターン - BigQuery リバースETLジョブの並行数制御-
techtver
PRO
0
160
株式会社TVer 会社紹介資料
techtver
PRO
9
130k
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
techtver
PRO
3
2.9k
Feature Flagを定義から削除まで 安全に行うために考えたこと
techtver
PRO
0
3.8k
4100万ユーザーを支えるTVer iOSアプリ開発 〜0人から始まったチームのAI活用による挑戦〜
techtver
PRO
1
2.8k
TVer iOSチームの共通認識の作り方 - Findy Job LT iOSアプリ開発の裏側 開発組織が向き合う課題とこれから
techtver
PRO
0
1.3k
20240710_HR SUCCESS SUMMIT 2024_テーマセッション「エンジニア採用2.0」登壇資料(株式会社TVer_香坂)
techtver
PRO
0
170
採用応募者の個人情報保護の取扱いについて_株式会社TVer
techtver
PRO
0
840
Other Decks in Programming
See All in Programming
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
280
MySQLとPostgreSQLって何が違うの?
akagami
0
150
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
240
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
160
Hono + Inertia + React で LP を構築した話
oukayuka
2
180
初めての模倣学習とVLA
natsutan
0
310
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
1.2k
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
190
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
310
ソフトウェアラスタライザ
fadis
1
720
Introducing Stack Pull Request in GitHub
kkamegawa
0
110
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
7.9k
Featured
See All Featured
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
630
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Six Lessons from altMBA
skipperchong
29
4.5k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Ethics towards AI in product and experience design
skipperchong
2
350
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
670
WENDY [Excerpt]
tessaabrams
12
39k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
560
Faster Mobile Websites
deanohume
310
32k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Transcript
©2024 TVer INC. 月間4.5億回再生を超える大規模サービス TVer iOSアプリのリアーキテクチャ戦略 2024.08.23 小森英明
@hide 株式会社TVer
©2024 TVer INC. 2 自己紹介 小森英明(コモリヒデアキ) 株式会社TVer フロントエンド部 / iOSエンジニア
X @mathtanguu 2023年10月 1人目iOSエンジニアとしてTVerに入社 趣味: ポケカ、欧州サッカー観戦、ドラマ鑑賞(笑うマトリョーシカ/スカイキャッスル)
©2024 TVer INC. 3 TVerとは 民放テレビ局がひとつになった テレビの新しい プラットフォーム ドラマ バラエティ
アニメ / ヒーロー 報道 / ドキュメンタリー スポーツ その他 見放題 ¥ 0
©2024 TVer INC. 4 サービスの特徴 01 02 03 見逃し配信だけでなく、地上放送のリアルタイム配信も開始! 好きな環境で
楽しめる! 番組放送終了から 約7日間見放題! リアルタイム配信 パソコン スマートフォン アプリ テレビアプリ タブレットアプリ すべて 無料 ※番組終了から配信までは、時間がかかることがあります ログインすれば 追っかけ再生も!
©2024 TVer INC. 5 サービス規模
©2024 TVer INC. 6 サービスの成長曲線 ▪ ダウンロード数、再生数、MUBにおいて順調に伸長 ▪ レギュラー番組の配信コンテンツは800番組以上に 万
億
©2024 TVer INC. 7 現在のiOSチームの状況 2023/04 2023/09 2023/10 2024/03 2024/04
Android チーム 立ち上げ Androidエンジニア1人目採用 🎉 Android チーム 内製化 外部ベンダー依存の開発体制から 脱却 🎉 iOS チーム 立ち上げ iOSエンジニア1人目採用 🎉 iOS チーム 内製化 外部ベンダー依存の開発体制から 脱却 🎉 Web チーム 立ち上げ Webエンジニア1人目採用 🎉 QA チーム立ち上げ QAエンジニア1人目採用 🎉
©2024 TVer INC. 8 現在のiOSチームの状況
©2024 TVer INC. 9 現在のiOSチームの状況
©2024 TVer INC. 01 現在の課題と推進しているアーキテクチャ、その採用背景について 10
©2024 TVer INC. 現在の課題 • ViewController内にビジネスロジックを持っている箇所がある • 何重にもネストされた可読性が低い分岐処理 • 不必要な状態変数定義
• 並列処理にも関わらず実行順序に依存しているロジック • 不必要なラップにより階層が深くなっているクラス群 11
©2024 TVer INC. 12 目指すアーキテクチャ • SwiftUI • TCA •
Swift Package Managerを活用したマルチモジュール • Swift Playgroundを利用したデモアプリ • Atomic Designの導入 • Design Systemの導入 • Unit Test/Snap Shot Test/UI Test/E2E Test
©2024 TVer INC. 採用背景 • Fluxベースで、他プラットフォーム(Android, Web)と同一なアーキテ クチャを採用することでエンジニア間のコミュニケーションコストを 削減したかった •
TCAはデータフローに関して規則性があり、書き手に依存せず、Unit Testも含めてアウトプットが一定であることが期待できること TCA 13
©2024 TVer INC. 現在のデザイン課題 • フォント定義やカラー定義などに曖昧さがあり、アプリ全体に適用で きていない • 非デザイナーが咀嚼しやすい形でデザインアウトプットがまとまって おらず修正による指摘漏れが多発しやすい
• 命名が統一されておらず、他プラットフォームとのコミュニケーショ ンコストがかかる 14
©2024 TVer INC. 採用背景 Design Systemの導入 15
©2024 TVer INC. 採用背景 ルールを明文化 16
©2024 TVer INC. 02 リスクを最小化するためのリリース戦略について 17
©2024 TVer INC. リリースにおけるリスク リアーキテクチャ完了後のリリースは怖い • TVerは非常に多くの利用者を抱える巨大サービスになりつつある • クラッシュ率が0.1%でも数千万人の利用者がいる場合、数万人規模で 影響がでる
• 過去にフルリニューアルをした際にユーザービリティが落ちてしまい 事業KPIへ悪影響を与えたことがある • iOSアプリをストア公開するにはAppleによる審査が必要で、すぐに ユーザーに反映させることはできない 18
©2024 TVer INC. リリースにおけるリスク 一括リリースはもっと怖い • プロジェクト期間が長くスケジュールの不確実性が高すぎる • グロース施策に影響がでる可能性がある •
問題発生時の切り戻しの手段がhotfixしかなく、対応に時間がかかる 19
©2024 TVer INC. 20 Home画面/機能 ※あくまでもイメージ Episode画面/機能 Series画面/機能
旧コード = RegacyAppFeature Home モジュール … ✨ 切り出されたモジュールの中で新しいアーキテク チャで実装。 一時的に1つのアプリの中に新しい コードと古いコードが混在した状態でリリース。 旧コード = RegacyAppFeature Home画面/機能 Episode画面/機能 Series画面/機能 Home モジュール ✨ リリース後、新しいモジュールでの動作確認が 完了次第古いコードを削除していく。詳細な進 め方は後述。 旧コード = RegacyAppFeature Episode画面/機能 Series画面/機能 Episode モジュール Home モジュール ✨ ✨ これを繰り返していくことで、新しいモジュー ルに入れ替えていく。 … … Episode モジュール Home モジュール Series モジュール ✨ ✨ ✨ … 最終的には1つの塊がモジュールに分割さ れ、アプリ全体のリアーキテクチャが完了 分割リリース マルチモジュール構成 + モジュールごとのアップデート
©2024 TVer INC. 21 Feature Flagを用いた解放率のコントロール Phase.1 ストア公開 この時点では開放率は0%
新画面 旧画面 100% 0% 開放率 1% 開放率 10% 開放率 50% 開放率100% 🎉 モニタリングしつつ、開放率を徐々に上げていく 新画面は実装としては入っているが、まだユーザー公開 はされていない状態。 Firebase Remote Config等を用いて、ここをコントロール 可能にする。 新画面 旧画面 90% 10% モニタリング項目 ・クラッシュ発生率 ・お問い合わせ件数 ・事業KPIへの影響 クラッシュの発生率やお問い合わせ件数、KPI影響等をモニタリングしながら、悪影響がないことを確認しつつ 開放率を上げていく。 悪影響がみられた場合には一旦開放率を0%に戻し旧画面へのロールバックを行う。 問題が解決したのち に再度開放率を上げていく。 これにより緊急対応、hotfixなどでエンジニアの稼働負荷が高まることを抑える。 Phase.1 リリース完了 新画面 旧画面 0% 100% 100%開放 完了後、旧画面のコードの削除を行い、次の フェーズでは完全に旧画面を無くした状態でリリースを 行う。 問題発生時は 開放率を0%に戻す 各フェーズのリリースにおいても、段階的な解放を実施 削除可能 ✨ ✨ ✨
©2024 TVer INC. 22 Feature Flagを用いた開放率のコントロール 新画面 旧画面 90% 10%
モニタリング項目 ・クラッシュ発生率 ・お問い合わせ件数 ・事業KPIへの影響 問題発生時は 開放率を0%に戻す ✨
©2024 TVer INC. 分割リリースは大変 分割リリースによるデメリットと向き合う • 技術難易度が上がるので想定スケジュールより長くなることが予想で きる • バイナリサイズが大きくなる
デメリットを許容してでも、多くのユーザーを抱えるTVerにとっては リスクを最小化することがサービスの努め 23
©2024 TVer INC. 総括 24
©2024 TVer INC. 25 総括 01 現在のアーキテクチャと推進しているアーキテクチャ、その採用背景について 02 リリースリスクを最小化するための戦略について
©2024 TVer INC. 26 現在のiOSチームの状況
©2024 TVer INC. 27 総括 Mission チーム1 Mission チーム2
Mission チーム3 事業KPIを元にMissionを設定し、複数チームを作り開発組織を 拡大させていきたい
©2024 TVer INC. 28 総括
None
ご清聴ありがとうございました! ©2024 TVer INC. 30