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.
動画配信アプリでの Engage SDK 導入 — TVer Android が Play ストアにコンテンツを届けるまで
techtver
PRO
0
130
TVer Web-based TVのリアーキテクチャ
techtver
PRO
0
240
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
Other Decks in Programming
See All in Programming
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
110
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
470
What We Talk About When We Talk About XP
m_seki
2
370
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
500
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
2
340
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
160
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
440
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
270
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
210
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
3
1k
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
860
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
230
Building AI with AI
inesmontani
PRO
1
1.2k
Product Roadmaps are Hard
iamctodd
55
13k
So, you think you're a good person
axbom
PRO
2
2.1k
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
490
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
440
For a Future-Friendly Web
brad_frost
183
10k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
510
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