Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
Search
TVer Inc.
PRO
November 17, 2025
Programming
3k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
JSConf JP 2025登壇資料
TVer Inc.
PRO
November 17, 2025
More Decks by TVer Inc.
See All by TVer Inc.
AI時代における_iOS設計の守り方と人間の役割
techtver
PRO
0
31
動画配信アプリでの Engage SDK 導入 — TVer Android が Play ストアにコンテンツを届けるまで
techtver
PRO
0
380
TVer Web-based TVのリアーキテクチャ
techtver
PRO
0
310
Pub/Sub で実装するワーカープールパターン - BigQuery リバースETLジョブの並行数制御-
techtver
PRO
0
170
株式会社TVer 会社紹介資料
techtver
PRO
9
130k
Feature Flagを定義から削除まで 安全に行うために考えたこと
techtver
PRO
0
3.9k
4100万ユーザーを支えるTVer iOSアプリ開発 〜0人から始まったチームのAI活用による挑戦〜
techtver
PRO
1
2.9k
TVer iOSチームの共通認識の作り方 - Findy Job LT iOSアプリ開発の裏側 開発組織が向き合う課題とこれから
techtver
PRO
0
1.4k
20240710_HR SUCCESS SUMMIT 2024_テーマセッション「エンジニア採用2.0」登壇資料(株式会社TVer_香坂)
techtver
PRO
0
180
Other Decks in Programming
See All in Programming
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.2k
SREの越境 / SRE Collaboration
y0hgi
2
290
Are APIs Still Relevant in the AI Era?
soyuka
0
330
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.1k
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
1.9k
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
170
Webの地図
yosuke_furukawa
PRO
6
4.9k
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
980
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
270
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
220
Heart of Swift Concurrency
koher
0
1k
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
The SEO Collaboration Effect
kristinabergwall1
1
580
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
290
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
850
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
How to build a perfect <img>
jonoalderson
1
6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Faster Mobile Websites
deanohume
310
32k
Transcript
©2025 TVer INC. TVerのWeb内製化 - 開発スピードと 品質を両立させるまでの道のり JSConf
JP 2025 永井洸気 株式会社TVer サービスプロダクト本部 / フロントエンド開発部 ジュン・ユン・サング(ポール) Jeun Yun Tsang (Paul)
©2025 TVer INC. 2 自己紹介 永井 洸気 株式会社TVer サービスプロダクト本部 /
フロントエンド開発部 • 2024年3月にWebフロントエンジニアとしてTVerに入社 • tver.jp や、CTV(コネクテッドTV)の開発を行なっている • 趣味は、筋トレ、テニス、プロ野球(阪神タイガース) • X(@0906koki)
©2025 TVer INC. 3 自己紹介 ジュン・ユン・サング(ポール) Jeun Yun Tsang (Paul)
株式会社TVer サービスプロダクト本部 / フロントエンド開発部 • イギリス出身 • 2024年10月にWebフロントエンジニアとしてTVerに入社 • tver.jp のフロントエンド開発を行なっている • 趣味は、筋トレ、卓球
©2025 TVer INC. TVerの紹介 4
©2025 TVer INC. 5 TVerの紹介 01 02 03 見逃し配信だけでなく、地上波放送のリアルタイム配信も開始! 好きな環境で
楽しめる! 番組放送終了から 約7日間見放題! リアルタイム配信 パソコン スマートフォン アプリ テレビアプリ タブレットアプリ すべて 無料 ※番組終了から配信までは、時間がかかることがあります ログインすれば 追っかけ再生 も!
©2025 TVer INC. TVerの紹介 累計アプリダウンロード数、9,000万ダウンロード突破! スマートフォン・タブレット、コネクテッドTVを合わせ た累計のアプリダウンロード数が9,000万ダウンロード (以下、DL)を突破。 TVerアプリのDL数は、2025年4月に8,500万DLを記録して から、わずか6カ月で新たに500万DLを獲得。
6
©2025 TVer INC. tver.jp の技術スタック
8
©2025 TVer INC. tver.jp の技術スタック ・言語・FW:Next.js, React, TypeScript ・ライブラリ:CSS Modules,
SWR, Biome, OpenAPI ・テスト:Vitest, Playwright, Storybook ・ホスティング: Amazon S3, Amazon CloudFront ・開発管理ツール:Github, Github Project, Github Actions ・ドキュメント:Figma, Miro, Confluence, Google Docs ・コミュニケーション:Slack, Google Meet ・AIツール:Claude Code Max 20x, Gemini, GitHub Copilot • 技術スタックとしてはNext.jsやTypeScriptなどシ ンプルでモダンな技術を採用 • S3に静的アセットを配置して、CloudFrontで配 信。レンダリング方式はCSR • OVP(Online Video Platform)プレーヤーとして STREAKSを使用 9
©2025 TVer INC. TVerの開発組織
©2025 TVer INC. 11 TVerの開発組織
©2025 TVer INC. 12 TVerの開発組織 - Webフロントチーム • Webフロントチームは現在、正社員3名 +
業務委託5名 • 各ミッション軸のチームに正社員1名 + 業務委託数名が所属 ラインナップ アクセシビリティ セレンディピティ Webフロント iOS Android バックエンド デザイナー PdM
©2025 TVer INC. 実は1年前 13
©2025 TVer INC. Webフロントチーム 14
©2025 TVer INC. Webフロントチーム 1名だけだった👍 15
©2025 TVer INC. • TVerはバックエンドは内製化していたが、iOS、Android、Webフロントエンドを開発パー トナーへ開発を発注していた • PdMがプロダクトの仕様や施策を決め、PjMが開発パートナーにコミュニケーションを取 りながら開発管理を行う体制 16
©2025 TVer INC. より開発スピードと品質を高めてプロダクトの成長を 牽引するため、フロントエンド領域の内製化を決断 • TVerはバックエンドは内製化していたが、iOS、Android、Webフロントエンドを開発パー トナーへ開発を発注していた • PdMがプロダクトの仕様や施策を決め、PjMが開発パートナーにコミュニケーションを取
りながら開発管理を行う体制 17
©2025 TVer INC. 18 2023.08 QA内製チームの立ち上げ 2023.10 iOS内製開発チームの立ち上げ、 Android開発の完全内製化が完了 2024.03
Webフロントエンド内製開発チームの立ち上げ 2024.04 iOS開発の完全内製化が完了 2024.10 QA、Webフロントエンド 開発部の完全内製化が完了 フロントエンド開発部発足、 Android内製開発チームの立ち上げ 2023.04
https://findy-code.io/media/articles/tver-frontend 19
©2025 TVer INC. 内製化立ち上げで抱えていた課題
©2025 TVer INC. 21 ユーザーへもっと早く価値を 提供するために、開発スピー ドを上げたいが。。。 内製化立ち上げで抱えていた課題 ユーザーがもっと早く簡単に好きなコン テンツを発見できることが目標
©2025 TVer INC. 22 • 当初のコードは複雑性が高く、品質 があまり高くない状態 • コーディングルールも存在せず、人 によって実装がバラバラに。開発ス
ピードが出せない 内製化立ち上げで抱えていた課題
©2025 TVer INC. 23 品質を担保しながら、開発ス ピードを向上させていくため、 課題の洗い出しから着手 内製化立ち上げで抱えていた課題
©2025 TVer INC. そもそも開発スピードと品質は何?
©2025 TVer INC. 開発スピードの定義 25 そもそも開発スピードと品質は何? 要件・デザインの 理解 コードの理解 設計・実装
リリース テスト PRレビュー 監視・バグ対応 振り返り 仕様を読み解く時間からバグ対応までのスピードが大事
©2025 TVer INC. 品質の定義 26 そもそも開発スピードと品質は何? コードの 分かりやすさ バグ発生率 パフォーマンス
Web Vitals デザインの一貫性 アクセシビリティ SEO ユーザビリティ バグの発生率だけではなく全体的なユーザー体験とコードの質
©2025 TVer INC. 洗い出した課題がいっぱい。。。
©2025 TVer INC. デザインシステムがなく CSSも整理されていない • 個別にコンポーネントのCSSが設定されている • カラートークンはあるがちゃんと整理していない •
カラートークン以外の共通CSSが定義されていない • 汎用コンポーネントと個別コンポーネントが混在して いるケースがある • アクセシビリティを考慮していない これらの課題により、コンポーネントの仕様とデザインの 一貫性が低下し、結果的に全体的な品質が低下している 28 洗い出した課題がいっぱい。。。 シンプルなコンポーネントはずのにCSSが 多くて重複の定義も存在されている コンポーネントの例 適用されているCSS スペーシングがベタ打ち ボタンのカラートークンになっている
©2025 TVer INC. APIデータの定義がバラバラ • APIの型定義がなく、フロントエンドで定義されて いるAPIデータが実際のAPIと合っているかどうか が分かりにくい • APIデータを取得するためのfetch関数が別リポジ
トリで管理していてメインテナンスが大変 この結果、APIの仕様が分かりにくくなり、実装スピー ドの低下やメンテナンスの負担に繋がっている 29 洗い出した課題がいっぱい。。。 型定義がないAPIデータのfetch関数が別リポジトリで管理 されていて、同時にデプロイしないとアプリ側とずれる可 能性がある ↓
©2025 TVer INC. 自動テストと検証環境が整備されていない • デプロイできる環境が少ないため、共通開発環境へマージしないと検証できない • Storybookとそのホスティング環境がないため、コンポーネントのUI検証が手間 • コンポーネントテストとユニットテストが少ない
• UIとデータ取得のロジックが混在していてテストが難しい • モックデータを生成する仕組みがなく手書きで書いている • E2Eテストがなく、QAチームの手動テスト工数が高い ↓ 手動検証に手間がかかり、品質も保証できていない 30 洗い出した課題がいっぱい。。。
©2025 TVer INC. 課題が尽きない • 動画プレイヤーの改善 • ESLintとPrettierが設定されているがルールが整理されていない • コードのスタイルガイドがなくファイル毎に書き方が変わるため、理解に時間がかかる
• エラーログとパフォーマンスの監視(New Relic) • SEOがバックエンドで管理されていてカスタマイズが難しい • 画像が圧縮されていない • 内部リンクのhrefがベタ打ちになっている 31 洗い出した課題がいっぱい。。。 とりあえず解決策を見にいこう! これ以外にも課題がまだあるが。。。
©2025 TVer INC. デザインシステムとStorybookの導入
©2025 TVer INC. ヘッドレスUIライブラリの検討 汎用コンポーネントを改修する前に下記を検討した • TVerは自社製デザインになっているため、フル パッケージのUIフレームワークが合っていない • アクセシビリティを向上したいが実装に高い工
数が掛かるのを避けたい • 必要なコンポーネントが用意されていて、ド キュメントも分かりやすいこと 上記を踏まえてRadix Primitivesを選定 https://www.radix-ui.com/primitives 33 デザインシステムとStorybookの導入
©2025 TVer INC. デザイントークンとSassを利用する • デザインシステムで定義されたデザイントーク ン(例 : カラー、スペーシング、radius)を変 数化し、簡単に参照できるようにした
• ひとつの変数で表現できないCSSをmixinで定義 してセットとして設定する 34 デザインシステムとStorybookの導入 ブレイクポイントもセットとして 設定されているので使いやすい!
©2025 TVer INC. 汎用コンポーネントの改修 • デザインシステムで定義された汎用コンポーネント のバリエーションをpropsで表現 • ドメインロジックが必ず入らないことを意識 •
必要に応じてカスタマイズできるよう拡張性を担保 35 デザインシステムとStorybookの導入
©2025 TVer INC. StorybookとChromaticの導入 • アプリを起動しなくてもコンポーネント単位 で簡単にUIやインタラクションの検証が可能 • 状態とモックデータを自由に設定できるので エッジケースまで洗い出しが容易
• Chromaticへデプロイすることで、デザイ ナーによる確認が楽 36 デザインシステムとStorybookの導入
©2025 TVer INC. デザインシステムと汎用コンポーネン ト改修の結果 • 各画面のUIにおける一貫性を向上でき、品質が向上 • 汎用コンポーネントが使いやすくなって実装スピー ドが向上
• アクセシビリティの改善 37 デザインシステムとStorybookの導入
©2025 TVer INC. 生成ツールとAIの活用
©2025 TVer INC. 39 なるべく手動と単純な作 業を生成ツールとAIに任せ て自動化する文化を作る 生成ツールとAIの活用
©2025 TVer INC. 生成ツールの導入 • SVGRでSVGファイルからアイコンを簡単に Reactコンポーネントへ変換できるようにする https://react-svgr.com/ • pathpidaでNext.jsのpagesディレクトリからタ
イプセーフのURLを生成できるようにする https://github.com/aspida/pathpida • OpenAPI TypeScriptでデータスキーマ、fetchと SWRをアプリのリポジトリ内で生成する https://openapi-ts.dev/ 40 生成ツールとAIの活用 Pathpidaの例 データスキーマの例
©2025 TVer INC. AIでモックデータと MSWハンドラーの実装 • テスト環境を改善するためにMSW(Mock Service Worker)を導入 •
Claude CodeのCustom Slash Commandで、OpenAPI のスキーマからMSWのHandlerを自動生成 • Mockデータ生成の際のデータソースとして master.mdを用意し、実際に存在する開発環境の データを参照するように整備 41 生成ツールとAIの活用 Claude Codeのプロンプト 生成されたHandler
©2025 TVer INC. • 別リポジトリで管理しているOpenAPIスキーマを 取得し、GitHub Actionsで型の生成 + SWRを生成 する
• Claude Code ActionsでOpenAPIの型を参照し、 MSWのHandler生成と、型エラーの修正を自動化 • 最終的にPRが生成され、レビューを通して問題な ければマージ GitHubワークフローで 生成フローを完結させる 42 生成ツールとAIの活用 ワークフローを実行 する PRが作成される OpenAPIスキーマを 取得する AIによるMSWのハン ドラー生成 & 型修正
43 OpenAPIの型生成 Claude Code ActionによるMSW生成と型修正
©2025 TVer INC. AIで生成されたモックデータと MSWハンドラーの活用開始とその結果 • APIがまだ実装されていない状態でもMSWが返す モックデータを参照して実装を開始することがで き、開発スピードが向上 •
StorybookにAPI取得含めてストーリーの作成がで きるようになり、実際のユーザーに近い環境での 検証をコンポーネントに対して実施可能に • Storybookの生成に関しても、Claude Codeの Custom Slash Commandを使用し、標準化された Storyの生成を可能に 44 生成ツールとAIの活用
©2025 TVer INC. 動画プレーヤーの改善
©2025 TVer INC. 46 • VOD配信(見逃し配信)のOVPをSTREAKSに移行 ◦ 元々リアルタイム配信で使用していたPLAY社のSTREAKSをVODにも採用 ◦ VODとリアルタイム配信で同じOVPを使用することで、開発スピードが向上や管理コスト
が削減。移行時にシーク時のサムネイル機能や画質向上のなども追加 • 広告リクエストの単体テストの実施 ◦ 広告ターゲティングに必要な情報を広告サーバーに渡して、広告を再生するための VMAP/VASTを受け取るが、その際に渡すパラメーターにテストが書かれていなかった ◦ そのため、ヒューマンエラーが発生しうる可能性があったので、単体テストを実装し、未 然に不具合を防ぐ仕組みを構築 • プレーヤーに必要なアセットロードの並列化によるパフォーマンス改善 ◦ プレーヤーを再生するには、IMASDKやプレーヤーのSDK、その他様々なアセットが必要 だが、それらが直列で読み込まれていた ◦ 並列で読み込ませてプレーヤー構築までの速度を改善(約1s) 動画プレーヤーの改善
©2025 TVer INC. その他の解決策
©2025 TVer INC. • PR毎にプレビュー環境をデプロイする仕組みをS3 + CloudFrontで構築し、レビュー 時の検証を容易に • コードスタイルガイドを書いてルールを明確にしながらAI(Copilot,
Gemini Code Assist)に単純なレビューを任せる • QAエンジニアが、QA項目に沿ったテストケースを元にPlaywrightでE2Eテストを実装 • ESLintとPrettierをBiomeに統一し、実行速度の向上。pre-commit時に実行し、事前に 検証可能に • 画像サイズを圧縮できるCDNへ移行(ダウンロードサイズを50%以上削減) • Feature-Sliced DesignとPresentational・Containerコンポーネントのパターンにリ ファクタリングし、コードの責務を明確に 48 その他の解決策
©2025 TVer INC. 今まで導入した解決策の結果
©2025 TVer INC. • 画面の一貫性とバグの発生率の改善で品質を向上できた • コードがより疎結合で拡張性が高くなり、開発スピードを向上できた • 生成ツールとAIで手間な作業削減し、ユーザー価値に貢献する開発に集中可能に 50
今まで導入した解決策の結果 レビュー依頼から初レビューまでの平均時間 初コミットからPRオープンまでの平均時間 Findy Teamsで計測しているリードタイムが改善傾向に 🎉
©2025 TVer INC. 次に挑戦したいこと
©2025 TVer INC. • SSRを実現し、パフォーマンスとSEOを改善する • FigmaのCode ConnectとMCPの活用や、VRTの導入による デザイン面の強化 •
CTVにおける処理共通化の検討とUI/UXの改善 52 次に挑戦したいこと AIを活用しながらさらにTVerの 品質と開発スピードを向上して行きたい
ご清聴ありがとうございました! ©2025 TVer INC.
©2025 TVer INC. TVer Tech Blog 54 TVerのエンジニア活動をブログに掲載しています! https://techblog.tver.co.jp
None