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
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
140
Pub/Sub で実装するワーカープールパターン - BigQuery リバースETLジョブの並行数制御-
techtver
PRO
0
130
株式会社TVer 会社紹介資料
techtver
PRO
9
120k
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
techtver
PRO
3
2.8k
Feature Flagを定義から削除まで 安全に行うために考えたこと
techtver
PRO
0
3.6k
4100万ユーザーを支えるTVer iOSアプリ開発 〜0人から始まったチームのAI活用による挑戦〜
techtver
PRO
1
2.7k
TVer iOSチームの共通認識の作り方 - Findy Job LT iOSアプリ開発の裏側 開発組織が向き合う課題とこれから
techtver
PRO
0
1.3k
20240710_HR SUCCESS SUMMIT 2024_テーマセッション「エンジニア採用2.0」登壇資料(株式会社TVer_香坂)
techtver
PRO
0
160
採用応募者の個人情報保護の取扱いについて_株式会社TVer
techtver
PRO
0
820
Other Decks in Programming
See All in Programming
dRuby over BLE
makicamel
2
330
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
5
4k
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
2
980
JavaDoc 再入門
nagise
0
320
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
160
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
540
ふつうのFeature Flag実践入門
irof
7
3.7k
Inside Stream API
skrb
1
680
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.4k
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.2k
AI時代のUIはどこへ行く?その2!
yusukebe
21
7k
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
GitHub's CSS Performance
jonrohan
1033
470k
Technical Leadership for Architectural Decision Making
baasie
3
400
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Designing for Performance
lara
611
70k
Music & Morning Musume
bryan
47
7.2k
Unsuck your backbone
ammeep
672
58k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
My Coaching Mixtape
mlcsv
0
140
Rails Girls Zürich Keynote
gr2m
96
14k
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