ライブ配信サービスの舞台裏

山中勇成氏(以下、山中):よろしくお願いします。プラネタリウムの登壇は初めてです、よろしくお願いします(笑)。

『AbemaTVで働くエンジニアの裏側』というタイトルで発表します。だいたい10分くらいですね。

自己紹介なんですけど、本名は山中勇成といいます。

「みゆっき」というハンドルネームで活動してます。2017年3月に、SFCっていう慶応の飛び出た学部がありまして(笑)、そこを卒業しました。

そのときの研究テーマは「非圧縮の4KをIP伝送する」っていうテーマでした。その後2017年4月にサイバーエージェントに入社しまして、いまAbemaTVのコンテンツ配信チームというところにいます。

「SRE」って、よく聞くのは「Site Reliability Engineer」なんですけど、僕は「Streaming Reliability Engineer」というのを名乗っています。アディショナルとしては、こういうカメラを持ってるほどの、放送とか映像オタクです。

AbemaTVについてざっとご紹介します。AbemaTVは、24時間・365日のリニア型放送を行なうインターネットテレビ局です。

ニュースとかアニメとかスポーツとか、さまざまなジャンルのコンテンツを配信しています。配信するデバイスは、PC・タブレット・スマホ、最近はテレビデバイスとかでも視聴できるようになってきています。

AbemaTVのコンセプトは、「無料」で「会員登録なし」で、「24時間編成」のリニア型の配信があるので、テレビのように視聴することができます。

それで、AbemaTVの先日の株主総会の資料なんですけど、3,100万ダウンロードを突破しています。

規模として、これは外向きの数字で、エンジニア的に言うとHTTPのリクエストがだいたい1日に40億あります。

週末はCDNから2.2PBの動画を配信して、オリジンからも62.5TBの配信をしているという。

数だけ見るとすごくデカいサービスです(笑)。

AbemaTVを支える技術

そんなAbemaTVがどういう技術を使っているかを軽く紹介します。

基本的にAbemaTVでいま使っているのはこの3つで、GCPとk8s(Kubernetes)とGolangになります。よく「なんでGCPを選んだんですか?」とか「AWSはダメなんですか?」というのを聞かれるんですけど、とくにここを選んだのは、……そのときCTOだった人がノリで選んだというだけで(笑)、深い理由はありません。

エンジニアってやっぱりそのとき流行りのものを使ってみて、それも結局ダメだったところとか良かったところとかいろいろあって、そういうのが知見になって次の開発につながったりするので。そういう意味も込めて、ここではGCPを使ってみたという感じです。

AbemaTVで使ってるGCPのサービスを並べるとこんな感じで、非常に多くのサービスを使ってます。

AbemaTVの働き方

それで、ここからはAbemaTVの仕事をどんな感じでやってるかという、僕の紹介なんですけど。僕は渋谷プライムプラザという、道玄坂を登って交番があるんですけど、さらにそれより上のほうのビルにいまして。

こんな感じの120度のテーブルが一人ひとりあって、そこにディスプレイを2枚くらい並べて、こうやって仕事をしています。基本的に会社とかはフロアによっても形が違うんですけど、わりと自由に自分の机に物を置けたり、「ディスプレイが欲しい」って言ったら会社のほうで用意してくれたりする環境です。

チームはこんな感じの体制になってます。

Web、iOS、AndroidはたぶんWebサービスだと一般的だと思うんですけど、新デバイスというチームがありまして。

ここは、昨年末にVRデバイスでもAbemaTVを視聴できるようになったんですけど。そういうのだったりとか、テレビのデバイス向けの対応とか、そういう新しい、スマホとかWeb以外のデバイスの開発をしてたり。

あとサーバー系、バックエンド系もけっこういろんな種類がありまして。基盤開発とか。プロダクト開発というのは、いわゆるAPIとか、ユーザーとか課金面に関係するもの。それから納品された動画データとかを管理するのに特化した、コンテンツ&データ管理の部門だったりとか。あとは僕がいるコンテンツ配信の部門があります。

コンテンツ配信チームの仕事

僕がコンテンツ配信チームというところにいるんですけど、そこで実際何をやっているかというと……。AbemaTVって24時間配信をしているんですけど、そこの映像ソースというのはいろいろあるんですが。

1つは生放送だったらスタジオからリアルタイムに送られてくる映像。もう1つは、あらかじめMP4とかで納品された動画を配信する。だいたいこの2パターンにわけられます。これをコンテンツ配信チームがどのようにかして、スマホであったりテレビ・デバイスとかであったりに配信するというのが仕事になっています。

実際にこのスタジオ(撮影)だったり納品の動画だったりを、スマホに配信するために何をやってるかというと、並べるとキリがないんですけど、大まかに言うとこんな感じです。

まずAbemaTVはリニア型の配信以外にもオンデマンドの配信とかもしているので、各種映像の配信だったり、本当にその人が視聴することができるのかとかのチェックだったりとか。

AbemaTVは同じタイミングで広告を見ても、実はユーザーごとに何パターンか分けられてるんですけど、そういう広告の挿入だったりとか。あとメタデータ、いま何を放送しているっていうデータの挿入だったりとか。

生放送の場合にはCMの時間っていうのは決まっていないんですけど、それを「このタイミングでCM入れたい」っていうタイミングで入れるためのツールみたいなのがあって、そういうのも開発してます。

ということで、けっこういろいろなことを中ではやってます。

エンジニアのチャレンジポイント

最後になるんですけど、AbemaTVで僕はエンジニアをやってるんですけど、どういうチャレンジをするポイントがあるか、どういうところに熱意を持ってるかということを紹介します。

まずは「24×7で動き続けるサービス」ということで、メンテナンスを入れるサービスというのはけっこう多くあると思うんですけど、AbemaTVはこれまで自主的にメンテナンスをしたことがなくて。

サービスが止まっちゃうとかあるかもしれないんですけど、できるだけメンテナンスを入れずにリリースをするとか、負荷対策のための環境移行とかもダウンタイムを作らずにやるっていうのが1つあって。これはけっこう大きなポイントかなと思います。

あとは「後方互換性を保ち続けるリリース」。できるだけ視聴できるデバイスを少なくしたくなかったり、できるだけ多い人に見てもらいたいとか。

テレビデバイスとかだと1番最初にアプリがプリインされてるんですけど、それって多くの人はアップデートしないんですけど、例えばそれを見られなくすると、そのテレビデバイスからはアクセスできなくなるんで。そういう後方互換性を維持しつつも、新しい機能を入れるということが必要です。

あとは「高負荷に耐えられるリソース」ということで。AbemaTVはけっこうトラフィックがデカいんですけど、そういうのを効率よくというか。人は増やすんですけどいまできることを減らさないとか。高負荷に耐えられるような構成とかを考えながらシステムの開発をしています。

……というのが、僕が考えるAbemaTVでやるエンジニアのポイントかなと思ってます。以上になります、自己紹介でした。

SHOWROOMのエンジニアの働き方

志水理哉氏(以下、志水):では、替わって。SHOWROOMエンジニアの裏側について、お話したいと思います。

まず軽く自己紹介なんですけども、SHOWROOMのテックスタジオで働いております、志水理哉と申します。

略歴も書いたんですけど、大したこと書いてなくて。2017年だから去年SHOWROOMのエンジニアになったんで、ストリーミング歴はまだ1年なんでまだペーペーです。

好きな言葉なんですけども、これパベル・ネドベドっていうチェコのサッカー選手で。「僕はジダンやラウルのような美しさはないから、ただがむしゃらにがんばるだけさ」っていう、すげぇ泥臭い選手なんです。バロンドールも取ってるんですけど。

あと、その下にあるのはSKE48の惣田紗莉渚さんっていう方なんですけど、去年「泥臭くちゃだめですか?」って言ってて。こういうのが好きで、こういう人間です。

それでは、SHOWROOMの説明に入ります。SHOWROOMというのは、無料で誰でも配信できるライブ配信サービスです。

SHOWROOMの特徴としては、映像ももちろんあるんですけど、それだけではなくて、ギフトやアバター。それからリアルタイムのコミュニケーションによって生まれる熱量ですね。熱量がSHOWROOMの魅力です。

数値的なところでいうと、累計ダウンロード数がいま320万ダウンロードを突破しております。

会員登録数がだいたい190万を超えたくらいかな。すごく成長していて、あとこのルーム数っていうのが、要はチャンネル数って言ってもいいですかね。配信できる人の数が、いま20万を突破したところです。

SHOWROOMの特徴

SHOWROOMを知ってる方も知らない人もいると思うの、これはよく説明している3大特徴なんですけれども。

SHOWROOMの1番の特徴は「リアルタイム交流」で、基本的にSHOWROOMは生配信しかしてないです。オンデマンド配信というのはしていなくて、機能としても備えてません。

もちろんOBSっていう、配信ストリームでもともと録画されたものを配信するってものを使ってる方もいるんですけども、基本的に生配信のみです。

画面上には映像だけではなくて、必ずアバターだとかギフト、あとはコメントっていうふうに、視聴者が可視化されてます。なんでそういうことをしてるのかっていうと、配信者が応援されることで、その応援に勝つとイベントとかがあって、イベントに勝つとCMに出れたり雑誌の表紙を飾れたり……、といったようなストーリーが創出されると。

この3つがサイクルとなって、熱量の高い方が多いサービスなのが、SHOWROOMの特徴となります。

今日はエンジニア志望の方が集まっていると思うので、エンジニアに特化して話をすると、やっぱりこの応援っていうのが、ほかのサービスと比べて、僕としてもお話したいところです。

まず映像があって、視聴者がアバターとしてやってきて、コメントしたりギフティングしたりするんですけど。つまりそこにWebリクエストが入って来て、それをさばかなきゃいけないというのがSHOWROOMのエンジニアの仕事になりますね。

エンジニアリングで力を入れていること

エンジニアリングで力を入れているところを説明しますと、まずポイント1なんですけども、「演者と視聴者のコミュニケーションが取りやすいこと」っていうのに力を入れています。

ここでは低遅延配信について具体例を入れたいと思うんですけども。画面右下ですね。

これよくストリーミングとかでやる手法なんですけども、タイムスタンプを出していて。後ろにあるのがたぶんPCで、手前にあるのが携帯電話なんですけど。後ろにあるパソコンで、OBSで時計のタイムラップを配信して、それを配信サーバーに配信して、それを受信した携帯のやつをさらにその上から別のカメラで撮る、っていうことをしてるんですけども。

これは映像になっていて、RTMPっていう手法を使ってるんですけども、だいたい1~3秒くらいの遅延になっています。この遅延が短くないとコミュニケーションって取りづらくて。よくあるのが、宇宙にいる人との会話のやつとかラグがあってコミュニケーション取りにくいと思うんですけども。低遅延配信というのがコミュニケーションを取るのに大事だと思って、力を入れてます。

もう1つ、「演者がトラブルなく安心して配信できること」にも力を入れています。

ここだと負荷対策の例を入れているんですけども、演者って基本的に配信素人なわけですね。

もちろんスタジオ配信のときとかは、うちのプロのスタッフが見るんですけども。基本的にスマートフォンで配信するときっていうのは、よくわかんない、配信について詳しくないっていう人がやるんで。

なにかトラブルあるとすごく不安になっちゃうんで、止まらないように負荷対策をしてて。それは配信サーバーの負荷対策と、Webサーバーの負荷対策があって。配信サーバーとかだとオートスケールももちろんやってるんですけど、オートスケールで間に合わないような急激な負荷がやってきたりするので、そういうのは手作業でやったりとかしますね。

あとWebサーバーのほうは僕の得意分野のほうなんですけれども、泥臭く、普通なことをやってます。DBの遅いクエリを直したりとか、キャッシュ使ってみたりとか。あとはデーモン使って非同期処理したりとかですね。

最後、3つ目なんですけども。これはなんかマインドのところになっちゃうんですけども、「エンジニア発信で新機能を開発していこう」という文化です。

というのも、ショールームには行動指針があって、Imagination、Issue、Effortですね。要は「自分で考えて行動に起こす」ってことが大事だと思っています。

最近では「美肌機能」をリリースしました。これもきっかけはあったんですけども、「こういうのあったらいいよね」っていう仮説があって。

本当にやってみたベースで、うちのiOSエンジニアが「このライブラリ使ったらこんな感じでできたよ」っていうのをフィードバック受けながら、今月末にリリースしたばっかりの機能で。「こういうこともやっていこう」っていうのに力を入れてます。

SHOWROOMの運用体制

うちのチームの運用体制なんですけども。SHOWROOMの社員としては100人超えたくらいなんですけども、実際にSHOWROOMっていうサービスを開発してる人はこんなものかなと思います。

ディレクターがいてデザイナーがいて、アプリサーバーエンジニアも、僕がここに入るんですけども、みんなでシステムを作っている感じです。わりとそれほど突拍子もないことはしていません。説明したいところで言うとインフラストラクチャーですね。

うちだとDeNAでクオリティアシュアランスするんですが、品質を管理する部門、あとカスタマーサポートの人員が会社にはありません。

基本的に全部DeNAのサポートを受けていて、そことのコミュニケーション。Slackでコミュニケーションしたりとか、テレビ会議したりとか。たまに行ったり来たりしてますね。

あと加えて、今日、入口であったと思うんですけど、バーチャル事業部っていうのもあったりします。これは別部隊で動いてます。

SHOWROOMの開発では、「ただの作業者にならないこと」っていうのを大事にしています。

「トップダウンで言われたからやりました」とか「誰にもなにも言われてないんで、なにもやりません」というのはよくないと思うので、自分の意思として、腑に落ちた仕事をやっていきましょう、ということですね。

それとまったく関係ない写真が出てて、この前フットサル大会に出て。うちのエンジニアは出社遅いんですけど、これ8月のめっちゃ暑い日に朝9時に集合して、見事にみんな間に合ったっていう奇跡の写真ですね。

あと左が、ワールドカップの1戦目かな? それをみんなで見て、エンジニアは寿司とピザ好きなんで、あとコーラとお酒と、ワイワイやったりとか。

あと右のほう、SHOWROOM内でハッカソンとかして。「こんな感じで開発してますよ」っていう写真です。

最後になるんですけども、SHOWROOMは「努力がフェアに報われる社会を作る」というミッションをもとに活動しております。

興味持った人はインストールしてみたりとか、あとはこのあと僕とお話してみたりとか、しましょう! よろしくお願いします。以上です。

:ありがとうございます。志水さん、みゆっきさん、ありがとうございました。