開局から5周年を迎えて、ABEMAアプリのダウンロード数は6,800万を超えました。テレビのイノベーションを目指し、"新しい未来のテレビ"として成長を続けます。
ABEMAについて
「ABEMA」は株式会社サイバーエージェントと株式会社テレビ朝日が共同出資し、2016年4月に本開局した、新しい未来のテレビとして展開する動画配信事業です。国内唯一の緊急・速報をはじめとした24時間編成のニュース専門チャンネル、オリジナルのドラマや恋愛番組、アニメ、スポーツなど、多彩な番組をお楽しみいただけます。
「ABEMA」を運営する株式会社AbemaTVの開発本部には、エンジニア、デザイナー、PMなど約150名が所属し、ABEMAの開発を行っています。ここには、モバイルアプリケーションエンジニア、Webアプリケーションエンジニア、クロスデバイスエンジニア、ストリーミングクライアントエンジニア、バックエンドアプリケーションエンジニア、コンテンツ配信エンジニア、コンテンツエンジニア、SRE(Site Reliability Engineer)、Cloud Platformエンジニア、広告配信エンジニア、スタジオ技術エンジニア、データエンジニアなど、サービス開発・運用に携わる様々なエンジニアが属しています。
モバイルアプリケーションであるAndroid(モバイル、タブレット)アプリケーションとiOSアプリケーションを開発するエンジニアは、Nativeチームという1つのチームで開発に取り組んでいます。以前はAndroidアプリケーションエンジニアとiOSアプリケーションエンジニアは別々のチームでしたが、次の課題や欲求から、プラットフォームに依存しないチーム体制をとっています。
- iOS、Androidチームの人数の乖離
- プラットフォーム間での仕様や設計、実装、機能の乖離
- ドメインロジックの共通化
- Mobile DevOpsの推進
Mobile DevOps
Nativeチームには約20名のエンジニアが所属しており、これはおそらく国内サービスでは比較的大規模かと思われます。1つのサービスにこれだけのエンジニアが携わるため、並行で開発される機能の数も多くなる傾向にあります。それらの機能を可能な限り早くユーザーに提供し、フィードバックを得てさらなる改善に取り組むことは、サービスの継続的な改善と競争力に繋がります。我々Nativeチームでは、デプロイ頻度の向上と、デプロイまでのリードタイムを短縮するために、毎週アプリケーションのリリースを行う方針をとっています。
上図は、開発計画からリリースまでを簡略化したものです。我々は開発計画からリリースまでの2週間を1スプリントという単位で呼称します。1スプリントには、大きく分けて次の4つのフェーズが存在します。
- 開発計画
- 2週間後のリリースまでに開発・QAを行うべき項目、開発完了した項目、不具合項目の整理
- 開発
- 機能の実装、自動テスト
- QA(Quality Assurance)
- 手動E2Eテスト
- 機能単位の手動テストは機能開発と並行で行われる
- リリース
- 段階リリースを実施し、ユーザー影響の大きいクリティカルな問題の早期発見に取り組んでいる
もちろん、スプリントを跨ぐような開発項目も存在します。しかし、QAやリリースの日程が固定化されているため、開発工数からリリース日を試算することが可能です。機能ごとに独立して開発計画からリリースまでを行えることは、大規模チームである我々にとって最大のメリットと言えます。
この定型化された開発フローは、CircleCIやGitHub ActionsといったCIツールに大きく支えられています。Nativeチームでは、
- アプリケーションバージョンの更新(Version CodeやVersion Nameなど)
- Git tagの生成
- GitHub上のRelease、Milestoneの作成
- Unit Test、Integration Test、Visual Regression Testの実行
- ストアへのバイナリのアップロード
- App Distributionへのバイナリのアップロード
- Lintチェック
などを自動化しています。
ABEMAのMobile DevOpsを加速させているのは、開発フローだけに留まりません。Feature Flagによるリリースを伴わないアプリケーション機能のON・OFF、サービスレベル指標(SLI)およびサービスレベル目標(SLO)の定義による、サービス重要指標のオブザーバビリティ向上、サービス品質向上などに取り組んでいます。
ABEMAで作成し使用しているオープンソースライブラリや、New Relic One(オブザーバビリティプラットフォーム)の導入事例を紹介します。
- Flagfit
- Android向けFeature Flagクライアントライブラリ
- koma
- Android向けUIレンダリングパフォーマンス計測ライブラリ
- New Relic One導入事例
アーキテクチャ
ABEMAのAndroidアプリケーションは、2016年の本開局当初からFluxというアーキテクチャを採用してきました。現在、次の目的を果たすためにClean Architectureベースのアーキテクチャの導入と移行に取り組んでいます。
- 開発サイクルの効率化
- プラットフォーム間の仕様標準化や実装共通化を容易にすること
- ビジネスロジックとUI・データ管理のためのロジックの分離
- 設計によるコンポーネント間の疎結合性の担保
- マルチモジュール化(Android)、マルチフレームワーク化(iOS)
- ビルド高速化
- テスタビリティ・メンテナビリティの向上による内部品質の改善
- 修正影響範囲・ユニットテストの単位の明確化
- テストアーキテクチャの設計(テストピラミッドの導入など)によるテスト最適化
- QAコスト削減
- UI開発の安全性と生産性の向上
- カタログによる表示確認
- Visual Regression Testの導入
- 負債解消
- メディア系のデータ永続化など、要件が変わってきている部分の最適化
- 混在する前世代の設計の廃止(iOS)
Fluxアーキテクチャを採用しているときは、レイヤーごとにコンポーネント化されておらず、コンポーネント間が密結合になりがちでした。そこで、Clean Architectureをベースに各レイヤーの役割を明確にし、レイヤー同士の依存関係も再定義しました。
この設計によりコンポーネント間が疎結合になったことで、
- マルチモジュール化・マルチフレーム化が容易になった
- テスタビリティ・メンテナビリティが向上した
- Visual Regression Testingの導入が容易になった
など、様々な恩恵を得られています。また、レイヤーの細分化、役割の明確化によって、実装者ごとにロジックの置き場所がブレるということも少なくなっています。
しかし、メリットが多くある反面、レイヤー間のモデルマッピング処理に関するボイラープレートの増加など、アーキテクチャ移行による新たな課題も生まれています。移行を進めながらチーム内で積極的に議論し、より良いアーキテクチャへとブラッシュアップを進めているところです。
アーキテクチャ移行に関する取り組みは、次のページでも紹介しているので、ぜひご覧ください。
マルチプラットフォーム
Clean Architectureベースのアーキテクチャ移行により、コンポーネント間が疎結合になったことで、プラットフォームに依存したUIレイヤーからアプリケーションロジックやドメインロジックを分離できました。さらに、AndroidとiOSで設計が共通化されたことにより、プラットフォームへの依存が少ない実装を各プラットフォームのアプリケーションから切り出しやすくなりました。また、KMM(Kotlin Multiplatform Mobile)やFlutterといったマルチプラットフォーム、クロスプラットフォーム技術の発展という時流も相まって、ABEMAでもKMMを用いたロジックの共通化に取り組んでいます。
KMMを選択した理由は大きく2つあります。
- UI部分のコード共通化は、ABEMAのデザインやUI/UXの要求を満たすことが難しい
- 開発やコミュニティ状況、DXと将来性
現在、DataSourceの一部から導入を開始し、実際に本番環境で利用されています。今後は共通化部分をさらに広げ、ドメイン層、アプリケーション層の共通化を目指しています。
また、親会社であるサイバーエージェントグループ内でも、マルチプラットフォーム、クロスプラットフォーム技術の導入が広がっています。取り組みの詳細については下記のリリースをご覧ください。
より良いチームを目指して
ABEMAのNativeチームでは、各個人の能力を最大化し、より大きなチームワークを生むために次のような取り組みを行っています。
- 月イチKPT
- 月に1回チーム内でKPTを行い、定常的な問題の発見と課題解決に取り組む
- チームラーニング
- チームメンバーの強みを知り、他メンバーから期待されていることと他メンバーに期待することを共有し、それぞれのメンバーの期待値をすり合わせる
- オンボーディング効率化
- 新規メンバーがスムーズに業務に取り組めるよう、オンボーディング業務をテンプレート化する
- 実装共有会
- 各プロジェクトで発生したコードベースの大きな変更を共有する
- 新しい技術の導入や実装変更の提案を行う
メンバーが多くなりプロジェクトごとに開発を進めることが多いと、どうしても縦割り感がでてしまい、チームとしての一体感が損なわれてしまいます。ABEMAのNativeチームでは、上記などの取り組みを通して各メンバーの意見を尊重しながら、より良いチームを目指しています。
まとめ
ABEMAは開局から5年以上が経過しました。時間の流れと共に、サービス規模、開発規模が開局当初よりも大きくなりました。今後も進化を続け、世界に誇れるメディアサービスを目指して、Nativeチームとして様々な技術チャレンジを行っていきます。
採用情報
サイバーエージェントではAndroidエンジニアを積極採用中です。詳細はこちらをご確認ください。
技術情報
サイバーエージェントでは、技術者による発信を積極的に行っています。
- Twitter:https://twitter.com/ca_developers
- Developers Blog:https://developers.cyberagent.co.jp/blog/
- 公式YouTubeチャンネル:https://www.youtube.com/channel/UCYvmsuoQ32tVY6MpOYhr5jA
- Connpass:https://cyberagent.connpass.com/
著者紹介
國師 誠也
2018年に株式会社サイバーエージェントに新卒入社。株式会社AbemaTV Native Team所属。 モバイルネイティブアプリケーションエンジニアとして、ABEMAモバイルアプリやテレビアプリ、マルチプラットフォーム開発に従事。
- GitHub: ronnnnn
- Twitter: ronnnnn_jp