Ad Network & Performance室とは

樋村隆弘氏(以下、樋村):本日は「Ad Network & Performance室のご紹介」と題して、私たちのチームで開発しているLINE広告ネットワークの簡単な紹介と、そこでサーバーサイドエンジニアに求められる役割やおもしろさなどについて、お話ししたいと思います。よろしくお願いいたします。

本日のアジェンダです。最初にAd Network & Performance室について簡単に紹介した後、LINE広告ネットワークの事業や中身について紹介して、最後に技術スタックやおもしろさ、求められるマインドについてお話いたします。

それではまず、私たちの部署について簡単に紹介します。私たちは、先ほど紹介のあったOfficial Account開発室と同じく、開発4センターの下に所属しています。ここの下に、Ad Network & Performance室というのがありまして、この下に、ほぼ同じメンバーでAd Network Devチームがあります。

LINE広告とは

私たちのAd Network & Performance室はLINE広告ネットワークの開発と運用を担当している部署です。

ではまず、私たちの担当しているLINE広告ネットワークの紹介の前に、LINE広告全体について簡単に紹介します。LINE広告はその名のとおり、LINEに広告を配信するためのプラットフォームです。今日の説明会にいらしているみなさんは、おそらくLINEをインストールしていると思うので、LINEに配信されている広告をおそらく一度はご覧になったことがあるかなと思います。

LINE広告は、トーク画面の一番上のところや、ニュース面、タイムラインをスクロールしていくとその間に入っているようなインフィード面などが代表的ですが、それ以外にもいろいろなところに配信されています。LINE広告の規模感ですが、LINE自体は国内における月間アクティブユーザー数が8,800万人(2021年3月時点)を突破していて、それに合わせてLINE広告も、やはり国内最大級の運用型広告プラットフォームと言えると思います。

LINE広告ネットワークとは

以前は、LINE広告はLINEのためだけに広告を配信する広告プラットフォームでしたが、現在ではLINE広告ネットワークを通じて、LINE外のアプリ配信面にも広告配信が可能になっています。本日は、このLINE広告ネットワークについて紹介します。

LINE広告ネットワークですが、先ほども申し上げたとおり、こちらはLINE広告のプラットフォームを用いて、LINE以外のアプリに対しても広告を配信する広告ネットワークです。LINE広告ネットワークの配信先となるアプリの総MAUは、2020年の9月の時点で1.1億ユーザーに達していて、広範なアプリ広告枠に対してLINE広告のターゲティング機能を活用した上で、広告の配信が可能となっています。

LINE広告ネットワークのユーザーの特色としては、どちらかというと女性面に偏っている傾向はありますが、配信先としてはレシピサイトやコミックアプリを始めとして、国内のさまざまなアプリに対して広告配信可能となっています。

このLINE広告ネットワークですが、もともとはモバイル動画の配信プラットフォームであるFIVE Ads Networkというネットワークが前身となったサービスです。このFIVE Ads Networkは、2014年に創立されたベンチャーであるファイブ株式会社が開発・運用していたサービスです。

この社名の「ファイブ」は、5秒動画が由来です。これはスマートフォン時代に合わせてCMなどと比べてより短尺な動画が必要だというところで、動画の制作からコンサルティングまでやるぞと創立されたベンチャーです。

従来のTV CMなどの素材ですと15秒や30秒の動画になってしまうので、そういったものはスクロールを頻繁にするような広告枠に流れていても訴求ができないということで、そういったところから含めてやる感じでした。

このファイブが順調に成長して、2017年の12月にLINEに買収されてLINEの傘下となりました。その後FIVE Ads Networkが、LINEの広告システムと連携して、「LINE Ads Platform for Publishers」として生まれ変わって、2019年にリリースされました。こちらが、現在はLINE広告ネットワークと名前を変えて動いているかたちになります。

そしてファイブ株式会社自体も、2020年の5月の末にLINEに吸収合併されまして、現在は私たちもLINEの1チームとして開発4センターのもと、LINE広告ネットワークの開発・運用に引き続き携わっています。

LINE広告ネットワークのサーバーサイドエンジニア

事業の概要はこれぐらいにして、LINE広告ネットワークの中身を簡単に紹介しながら、本日の主題であるは何をしているかについて、お話ししたいと思います。

これはすごい簡略化した図ですが、だいたいのLINE広告ネットワークは、広告枠を提供する側のSupply Side Platform、SSPと、広告を出したいほうのDemand Side Platform、DSPに分かれていることが多いです。LINE広告もその例に漏れず、社内でSSPとDSPという感じで分かれています。

このあたりはご存知の方も多いと思うのですが、現在の広告配信においては、広告枠の表示のタイミングでリアルタイムに広告リクエストを送って取引をするReal-Time Biddingが主流となっています。

この図はかなり簡略化していますが、LINEで広告枠を表示しようとした時には、LINEのSSPにまず問い合わせがいって、それがリアルタイムにDSPに問い合わせをして、DSPは入っている候補の広告をフィルターして、そこにスコア付けして、より良いものが返っていく感じになっていると思います。

LINEの外部に配信しているLINE広告ネットワークについても同様で、SSPからLINE広告ネットワークのサーバーにリクエストが来ると、LINE広告ネットワークのサーバーからLINE DSPにOpenRTBで接続して、広告を取ってくるようになっています。ここのLINE DSP以降が全部共通なので、広告主や代理店は、広告の配信結果の確認や管理を一括で行えます。

またDSPによって、このあたりの得意分野がけっこう異なることもあって、LINE広告ネットワークについては、LINE DSPだけではなくてLINE以外のDSPともOpenRTBで接続しています。なので、このあたりはけっこうレイテンシーの制約であったり、運用ポリシーなども異なったりしているので、そのあたりをがんばって吸収しているプラットフォームになっています。

さっきの簡略化した図から少々ブレイクダウンしますと、このようになります。赤色で付いている部分が、私たちのチームが開発・運用しているところです。やはり見てみると、ほぼ広告配信に必要なものすべてといった感じになっています。もともと、LINE広告ネットワークは独立した広告ネットワークだったので、このあたりの全部必要なものは、ひととおり揃っている感じになっています。

なので、私たちは広告を表示するためのSDKの開発もチームで行っています。またサーバーについても、Supply SideとDemand Sideというかたちで分かれています。また、あとは広告の表示やimpといったビーコンを受信する、ビーコンサーバーがあります。

ビーコンサーバーはAdサーバーよりも、よりレイテンシーの制約が厳しいので、別のサーバー群として分けて管理しています。このあたりは、よくある構成かなと思います。このビーコンサーバーに届いたデータについては、fluentdを活用してBigQueryにアップロードされています。配信のレポートや各種ETLのジョブは、BigQueryを活用して作られています。

このあたりは、LINEの他のチームだと、BigQueryではなく自社で運用しているHadoopクラスタやKafkaなどを利用しているケースが多いのですが、私たちはもともと別の会社だったということもあって、パイプラインの中心がまだBigQueryにあるという状態です。一応このログについては、最近はBigQueryと、あとはLINE社内のHadoopの両方アップロードされる構成になりつつあります。

また動画や画像など広告に必要な素材の配信についても、社内のクラウドサービスを利用してCDNを経由して配信を行っています。あとは、レポートの表示ですとか広告枠を管理する画面とかも私たちのチームで管理・開発をしています。最近はこのパートナー管理画面と呼ばれている部分、こちらのリニューアルが進行中です。

現在はベータリリースが終わっていますが、まだまだ引き続き開発が必要なので、ぜひみなさんに来ていただけると助かります。LINEの他のチームの場合、この四角で書いたコンポーネントごとに、それこそチームが分かれていたりするケースが珍しくもないのですが、私たちのチームはこのあたりの全部を面倒見ている感じです。

チームにおけるエンジニアの役割

今まで見てきたように、私たちのチームではアプリ広告に必要なSDKから配信サーバー、パイプライン、管理画面の開発など、広告配信に必要なものすべてが担当範囲となります。

ここで、私たちのチームにおけるエンジニアの役割ですが、先ほど見てきたように、広告プラットフォームはさまざまなコンポーネントが絡み合って存在しているので、依存関係も複雑ですし、広告自体も、ターゲティング条件などがかなり複雑で、仕様も難解になりやすいです。

そのため、エンジニアはやはり企画や要件定義の段階から、ビジネスやプロダクト企画のチームなどと直接コミュニケーションして、早い段階から議論に参加して仕様を詰めていく必要があります。また、実際に設計や開発をして、テストをする際にもQAチームとコミュニケーションして、開発を進めている感じです。

リリースしたあとも、A/Bテストを実施して効果分析することもエンジニアの仕事になります。特にサーバーサイドに関しては、ほぼ毎日デプロイしている状況なので、実装したものが即座に効果のフィードバックが得られるような状況のため、けっこう楽しくてやりがいがあるかなと思っています。

LINE広告ネットワークの技術スタック

最後に、いわゆる技術スタックについて紹介します。先ほど他のみなさまが映されたスライドと、けっこう似た部分が多いので冗長になってしまうかもしれませんが、私たちの採用している技術スタックについて紹介します。

LINEでは、先ほどからあったとおりJavaや、最近ではKotlinが使われていることが多いですが、私たちはScalaを中心に使っています。

フレームワークは、finagleというTwitter社が開発しているフレームワークを利用していまして、これはFutureによる非同期処理が非常に簡単にできるフレームワークなので、採用しています。また、実際にTwitter社が開発して利用していることからわかるように、トラフィックが非常に多い場所で力を発揮するので採用しています。このfinagleがScalaで作られていたので、(Scalaを)採用したという感じです。

基本的にScalaは、社内のチームでも使っているところはそこまで多くはないのですが、私たちも基本的にBetter Javaとして使っていまして、Javaしかわからないという方でもちゃんと読めるようなコードを書きましょう、という感じで一応開発をしています。

サーバー間のRPCについては、Thrift RPCが使われています。これはfinagleがそもそもマイクロサービスのフレームワークですので、そのfinagleの組み込み機能としてのThrift RPCを利用しています。データストア以降はだいたい他と一緒な感じで、RedisとMySQLという感じですね。広告配信のためのデータについてはRedisを使っていて、マスターデータとかについてはMySQLという感じの役割分担になっているかなと思います。

また先ほど申し上げたとおり、集計パイプラインや分析ついては、だいたいBigQueryで動いています。このBigQueryのスキーマについても、ThriftのRPCで使っている定義から、自動的にスキーマを生成してBigQueryにインポートするようになっています。またThriftからドキュメントも生成していますので、SQLがある程度書ける人であればログ分析ができるように、環境を整えています。

また最近ではBigQueryだけではなくて、LINEのHadoopクラスタにもデータを入れているので、そこでLINEのデータと合わせて分析をするようなかたちになっています。なので、BigQuery だけでなく SparkやHiveも使われています。

さらに、ログのインポートについても、fluentdで収集しています。モニタリングなどもだいたい他と一緒で、PrometheusとGrafanaが使われています。監視系では他にNagiosも使われています。Nagios を使っている部分は今後はPrometheusに移していこうかなと思っています。

あとはエラービーコンやSDKから飛んできたエラー系のメトリクスについては、Elasticsearchなどに入れて、Kibanaなどで後から見れるようにモニタリングしていたりします。デプロイはJenkinsでCIを回していて、Javaなのでfat jarを作ってJデプロイをしています。

あとはDrone.ioがちょこちょこ使われていたりします。インフラのプロビジョニングはAnsibleとfabricという感じで、もともとfabricで書かれていたのですが、それをAnsibleに移行している途中ですね。また管理画面の開発ですけど、こちらはTypeScript、React+Reduxという感じです。

インフラの部分ですが、社内のIaaSクラウドを私たちも利用しています。以前はAWSやGCPを使っていたのですが、買収期にLINEのプライベートクラウドに移行しました。もともと、IaaSとしての使い方が主だったので、比較的簡単に移行できたかなと思っています。

本日サーバーサイドエンジニアの説明会ではありますが、私たちはSDKも開発をしているので、そのあたりをちょっと触れておくと、基本的にAndroidとiOSについてはJavaとObjective-Cで開発をしています。最近ですとKotlinが人気ですが、ランタイムのバージョン互換性の問題があるので、お客さまのアプリに組み込む際に問題があるため、ピュアなJavaを使っています。

LINE広告ネットワークチームのおもしろいところ

最後に、どこがおもしろいかというところについて話したいと思います。大量のトラフィック、1.1億のユーザーから生み出される大量のトラフィック・データがあるので、この膨大なトラフィックを高速に処理するのは大変ですが、その反面やりがいやおもしろさがあるかなと思っています。

また開発したものがダイレクトに売り上げに直結するというような、目に見えるかたちでのフィードバックを得られることも多いので、その反面プレッシャーも大きいですが、やりがいも大きいかなと思っています。また一方で、広告はアプリの収益化の第一の選択肢になっているかと思いますが、ユーザーにとってアプリ本来の機能と広告は関係ないものなので、私たちがユーザーのアプリ体験を悪化させてはいけないかなと思っています。

ですので、ユーザーのことを第一に考えて開発できるということが、必要なマインドになってくるかなと思います。きちんとした広告プラットフォームを作って、ちゃんとそれが収益になることを示して、アプリ広告業界全体がよくなっていくといいなと思っています。

みなさんと一緒に働くことを楽しみにしています。ご清聴ありがとうございました。