Upgrade to Pro — share decks privately, control downloads, hide ads and more …

すべてのスクリーンにABEMAを!未開拓デバイス向けアプリケーション開発への挑戦

CyberAgent
December 15, 2021

 すべてのスクリーンにABEMAを!未開拓デバイス向けアプリケーション開発への挑戦

クロスデバイスチームでは主にCEデバイス(家庭用電化製品)を中心に複数のデバイスにまたがりABEMAアプリを開発・提供しています。

このセッションでは、チームで誰も知見のない未開拓のデバイス開発に対して不確実性をどう排除していったのか、新規デバイスへのユースケースにどう向き合ったのか、少人数で多くのデバイスを開発するためにどういうことを考えて開発しているかなどを紹介します。

https://developer.abema.io/2021/sessions/hsglnmXTjo/?utm_medium=social&utm_source=slideshare

CyberAgent

December 15, 2021
Tweet

More Decks by CyberAgent

Other Decks in Technology

Transcript

  1. 五藤 佑典 YUSUKE GOTO https://ygoto3.com/ @ygoto3_ • California State University,

    San Bernardino グラフィックデザイン専攻 • ソフトウェアエンジニア @ サイバーエージェント • ABEMA 開発本部 ◦ Cross Device チーム あらゆるデバイスに ABEMA を展開するための技術を提供するチーム ◦ Streaming Client チーム ABEMA の再生品質を軸に UX エンジニアリングにコミットするチーム ◦ 動画技術エバンジェリスト 世界各国に足を運び動画技術に関する情報をキャッチアップし、 社内外の動画サービスの発展に貢献するロール ◦ DesignOps 推進バックエンド 大規模組織でスケールできるプロダクトデザイン開発組織を構築する活動
  2. 板橋 清信 KIYONOBU ITAHASHI keyiiiii @keyi8773 • 2012年 サイバーエージェント中途入社 •

    ABEMA 開発本部 ◦ ABEMA 開局 〜 2017 年 Web クライアントチームで ABEMA 立ち上げ ◦ 2018 年 〜 現在 Cross Device チームでさまざまなデバイス開発 • テックリード • グロースエンジニア
  3. 実装だけでなく、グロース戦略まで考える グロースエンジニア Cross Device チーム デバイス A デバイス B デバイス

    C グロース戦略まで考えないとサービスの 成長も運用コスト面でも難しくなる
  4. テレビの再発明 尊重する価値 • 報道 • 同時性 • 生中継 • 無料

    時間からの解放 • タイムシフト • 追っかけ再生 • 倍速再生 場所からの解放 • スマートフォン • タブレット • PC • スマートテレビ • スマートディスプレイ • スマートスピーカー • ゲームコンソール
  5. 画面がある場所全てがターゲット 場所からの解放 • スマートフォン • タブレット • PC • スマートテレビ

    • スマートディスプレイ • スマートスピーカー • ゲームコンソール
  6. 20 以上のサポートデバイス • iPhone • iPad • Apple TV •

    Android Smartphone • Android Tablet • Android TV • Fire Tablet • Amazon Fire TV • Google Chrome • Mozilla Firefox • Internet Explorer • Microsoft Edge • Apple Safari • Google Chromecast • Google Daydream View • Amazon Echo • LINE Clova Desk • SONY BRAVIA • Panasonic VIERA • TOSHIBA REGZA • LEOPALACE21 Life Stick • CCCAIR Air Stick • ...
  7. 20 以上のサポートデバイス こんなにいっぱい どうやって開発しているのか? • iPhone • iPad • Apple

    TV • Android Smartphone • Android Tablet • Android TV • Fire Tablet • Amazon Fire TV • Google Chrome • Mozilla Firefox • Internet Explorer • Microsoft Edge • Apple Safari • Google Chromecast • Google Daydream View • Amazon Echo • LINE Clova Desk • SONY BRAVIA • Panasonic VIERA • TOSHIBA REGZA • LEOPALACE21 Life Stick • CCCAIR Air Stick • ...
  8. マルチプラットフォーム的アプローチ • 全てのプラットフォームに同じように ABEMA を実装する iOS のコード Android mobile のコード

    Web PC のコード Android TV のコード Linux-based TV のコード ... プラットフォームを増やすごとに エンジニアリソースが必要
  9. New Device チーム • デバイスの新規開拓を行うチーム ◦ あらゆるデバイスに ABEMA を搭載することがミッション ◦

    初期はマルチプラットフォーム的アプローチでアプリケーション開発 サポートするプラットフォームが増え、 リソース枯渇
  10. GUI フレームワーク 3 種の神器 クロスプラットフォームな GUI フレームワーク • HTML Living

    Standard / HTML5 ◦ IPTV 関連のさまざま標準規格から参照される HTML の標準仕様 • Android ◦ モバイル端末で実績がある GUI ベース OS • Unity uGUI ◦ ゲームコンソールへのリーチに強み
  11. GUI サポートしていない場合の選択肢 • 各プラットフォームが提供するグラフィックス API を使い GUI システム構築 • GUI

    フレームワークの搭載検討 ◦ オープンソースかつメディアに強い GUI フレームワーク ▪ WPE ▪ Google Cobalt ▪ Qt
  12. GUI サポートしていない場合の選択肢 • 各プラットフォームが提供するグラフィックス API を使い GUI システム構築 • GUI

    フレームワークの搭載検討 ◦ オープンソースかつメディアに強い GUI フレームワーク ▪ WPE ▪ Google Cobalt ▪ Qt GUI の基盤だけで 高コスト
  13. • 初めてのゲームコンソール ◦ チーム内にはもちろん、社内にも知見を持った人があまりいない • 初めての開発環境 + 言語 ◦ Unity

    + C# の業務経験が初めて • リリース目標が割とタイト ◦ あまり長く開発期間を設けることができない • 少人数チームでのマルチデバイス対応 ◦ 開発リソースをあまり増やせない制約 不確実性高い問題 誰も知見の無いデバイス開発において
  14. 1. ユーザーストーリーの洗い出し 2. カスタマージャーニーマップ作成 3. ユーザーインサイトツリー 4. サイトマップ作成 5. カンプ作成

    これらをチーム全員でデザインしていくオープンデザインとして毎週開催 コロナ禍ということもあり miro + zoom 上ですべて議論 • ドキュメント化が進んだ (認識の齟齬が起きないようにできるだけローコンテキストで話をする必要性) ユースケースの洗い出し
  15. 1. ICONIX プロセス ユースケース駆動開発。開発のフローが予め定義されているので迷う必要がない • 要求定義 ◦ 現状の ABEMA でのドメインモデルの洗い出し

    ◦ オープンデザインでみんなで洗い出したユースケースをレビュー・修正 • 予備設計 ◦ ロバストネス図の作成 本来はここから詳細設計を経て実装に移っていくが、開発期間も限られているので予備 設計(ロバストネス図作成)と平行して開発着手 実装
  16. 2. クリーンアーキテクチャ • 少人数チームで複数のデバイスを管理しないといけない ◦ デバイス毎に異なるアーキテクチャで実装するのは辛い ◦ ロジックを共通化できるところは共通化し、デバイスに密依存するところはできる限り 切り離したい •

    チーム全員が新規デバイスに対する知識を理解してから開発着手では間に合わない ◦ ある程度走りながらキャッチアップしても問題ないようにしないといけない 実装 クリーンアーキテクチャを導入
  17. 2. クリーンアーキテクチャ • 層ごとに関心を分離させられる ◦ 内側を共通ロジックで持つことができれば外側はどんなデバイスであっても理論的 には動作させることができる • 意思決定を遅らせることができる ◦

    詳細についてはできるだけ決定を遅らせることができる ◦ サービスにとってのコアの部分(ドメイン・ユースケース)の実装をしながらデバイス 固有の問題をキャッチアップする余力を作る 実装
  18. ハードウェア/OS ドメイン ユースケース GUI システム ハードウェア OS 未開拓デバイスはハードウェアも OS も

    初めて触れるものばかり ソフトウェアで カバーできないシステム領域
  19. 動画再生 コーデックなど権利問題が多い動画処理に関わる API は 大体プラットフォームから提供されている 動画再生に関する処理はプラットフォーム提供の API を利用する • **Decoder

    / **Codec • **Extractor • … etc 場合によっては、 GUI フレームワークが用意する描画用 バッファへの繋ぎ込みも個別で必要
  20. コンテンツ保護 セキュリティレベルが高い DRM システムの提供はハードウェア依存 TEE (Trusted Execution Environment) により メイン

    OS とは隔離された実行環境で 動画コンテンツの復号処理が行われる https://developer.arm.com/ip-products/security-ip/trustzone/trustzone-for-cortex-a
  21. コンテンツ保護 セキュリティレベルが高い DRM システムの提供はハードウェア依存 TEE (Trusted Execution Environment) により メイン

    OS とは隔離された実行環境で 動画コンテンツの復号処理が行われる https://developer.arm.com/ip-products/security-ip/trustzone/trustzone-for-cortex-a メイン OS がハックされても 動画データは保護される
  22. コンテンツ保護 セキュリティレベルが高い DRM システムの提供はハードウェア依存 • Google Widevine の Security Levels

    の例 Level 1 復号含めた全てのビデオ 処理を TEE の中で行う Level 2 復号は TEE の中で行う が、解読されたバッファが OS に返された後ビデオ処 理が行われる Level 3 復号含めた全てのビデオ 処理を OS の中で行う
  23. 通信:同時接続数の制限 ソケットや TLS 同時処理数に制限があるケースがある • 同時接続を回避させるために ◦ アプリケーション側の接続管理(シリアル処理など) ◦ 接続数が少ないタイミングでのプリフェッチ

    ◦ 1 画面に同時に表示する情報の削減 ◦ リクエスト頻度を削減する UI デザイン • GUI フレームワークとネイティブライブラリで各々で接続管理している場合は 同期処理も必要
  24. 通信:組み込み証明書の搭載有無 対象 OS に SSL に使用している CA 証明書が搭載されているとは限らない • どんなデバイス対応にも言えることだが、新しいデバイスでは要確認

    ◦ プラットフォーマー側での証明書搭載可能か? ▪ 可能であっても手続きに時間がかかる場合も ◦ アプリケーション側に証明書インポート API があるか? ▪ あったとしてもインポート処理のオーバーヘッドは問題ないか