サイバーエージェントには、「秋葉原ラボ」というデータ解析やデータマイニングを行う研究開発組織があります。
秋葉原ラボでは、サイバーエージェントが提供する様々なサービスへ展開するためのデータマイニング技術の研究・開発を日々行っておりますが、「AbemaTV」への活用もその一つ。
以前10年以上研究畑を歩んできたデータマイニングエンジニアとして、秋葉原ラボ所属の森下を紹介させていただきましたが、今回は2014年新卒入社のソフトウェアエンジニア佐藤にインタビュー。
現在「AbemaTV」のレコメンドプッシュ通知における自動化の開発を担当する佐藤に、入社の理由や日々の開発、AbemaTVならではの挑戦について聞きました。
佐藤 栄一
秋葉原ラボ所属 ソフトウェアエンジニア。2014年サイバーエージェント新卒入社。入社後は、広告配信のバックエンドを担当し、リターゲティングやフリクエンシーキャップといったユーザごとの配信制御やリアルタイムの集計に使うためのシステムの開発等に従事。現在は「AbemaTV」のレコメンドプッシュ通知の自動化部分の開発を担当している。
――なぜ新卒入社でサイバーエージェントを選んだのでしょうか?
私が所属していた大学の研究室と、サイバーエージェントの研究開発組織である秋葉原ラボが産学連携の取り組みを行っており、その一環で秋葉原ラボでアルバイトをすることになったことがきっかけです。
大学ではレコメンデーションなど機械学習の応用をテーマにしていたので、秋葉原ラボでも機械学習や検索まわりのシステム開発を担当していました。具体的には、検索窓に入力するクエリの補完機能や関連クエリを提示するシステム、またそれらキーワード管理のための辞書システムなどの開発を行いました。このシステムは現在もほぼそのままの形で「AbemaTV」含め、いくつかのサービスで導入されています。
その他にも当時は投稿監視システムでのスパムフィルタのタスクにも関わっていました。
正直なところ、サイバーエージェントは派手な会社というイメージが強く、私のようにプログラムばかり書いている情報系大学生としては少し怖い印象がありました(笑)ただ実際にオフィスを訪問してみるとまったくそんなことはなかったので、アルバイトとして働くことが決まった際にも特に不安はありませんでしたね。
秋葉原ラボで開発するシステムのほとんどは、社内の複数サービスが利用するものなので、実装するシステムには一定の汎用性が求められます。これは個人的な好みですが、私自身特定のサービスに特化するよりも、汎用的なソフトウェアを書くことに魅力を感じたので、入社を決めました。サイバーエージェントでは新規サービスが次々と出てくるので、新しいことに積極的に挑戦できる環境だというのも大きな理由です。
――入社後の経歴について教えてください
2014年に新卒としてサイバーエージェントに入社してからも、そのまま秋葉原ラボに所属し、入社後は広告配信のバックエンドに関わるようになりました。リターゲティングやフリクエンシーキャップのようなユーザごとの配信制御やリアルタイムの集計などに使うためのシステムを開発していました。これはSQLライクなクエリを書くことで、ログ情報をもとにリアルタイムにデータを構築する仕組みです。これはそのまま「AbemaTV」のプッシュ最適化プロジェクトでも活用しています。システムの運用も合わせて担当しているので、デプロイなど運用まわりのツールを作って改善したりというのも継続的に行っています。
また、一時的に他のサービスの負荷試験チームにジョインしたこともありました。
――現在AbemaTVでどういったことに取り組んでいるのでしょうか?
現在は、「AbemaTV」のプッシュ通知を最適化するプロジェクトの一部として、レコメンドプッシュ通知の送信自動化部分の開発を担当しています。プロジェクトは何名かのメンバーで構成されていて、私のほかに、レコメンド作成を担当しているメンバーや、分析を担当しているメンバーなどがいます。
「AbemaTV」でレコメンドプッシュ通知を送る場合、他のWebサービスと異なるのは、実行されなければならない時間(予約機能などと同様に番組の放送開始直前であることが多い)が事前に決まっていて、ユーザに対するレコメンドを作成するバッチなどとは実行時間が異なることです。
そのため、この実行タイミングの差を埋める必要があり、HBaseを利用して特定の時間に処理を発火させる汎用的なタイマーシステムとして新規に開発を行いました。
また、プッシュ通知に関するユーザの意見を知っておきたいので、Twitter上の投稿を検索して関連するものをslackに通知するような簡単なBOTを作ったりもしました。ユーザの声を取り入れて日々改善していければと思っています。
他には「AbemaTV」に関するシステムに限らないのですが、秋葉原ラボで運用しているシステムが徐々に増えてきているため、運用の効率化のため、オンプレ環境でもKubernetesの導入を進めています。まずは「AbemaTV」でのプッシュ通知の自動化でKubernetesを採用し、徐々に他のシステムも移行していこうと考えています。
――AbemaTVならではの開発上の課題があれば教えてください
秋葉原ラボで開発する多くのシステムは、サービスの要件を満たしつつ、できるだけ汎用的に使えるように作っていました。しかし、「AbemaTV」は “インターネットテレビ局” ということでこれまでのサイバーエージェントのサービスとは異なるので、独自の追加実装や新しい仕組みが必要になることが多いですね。例えば、先ほどお話したタイマーシステムなどもそうです。
実は、初めからタイマーシステムとして汎用的に作る予定ではなく、プッシュ通知のためのシステムを作る予定でした。しかし、「AbemaTV」以外のサービスのプッシュ通知を考えた時に、あまりにも要件が異なる点が多いこと、また、プッシュ通知以外への応用も出来るようにということで、タイマーシステムとして切り出すことにしました。残りの部分は「AbemaTV」専用に開発しています。
また、「AbemaTV」を含め、複数のサービスで使うことが前提なので、どれかのサービスで処理が遅くなったりした時に、他のサービスに影響しないように考慮しつつ設計・実装しています。
――逆に、AbemaTVで開発しているからこそのやりがいはありますか?
いままでとは違ったサービスが出てくることで、当然、これまでとは異なる要件が出てきます。そういうものを汎用的な仕組みで実現できるようになったときは、やはり嬉しいですね。
――今後の技術者としての目標を教えてください
日々、開発・運用業務を行う上でさまざまな技術やツールを使っていますが、OSやネットワークなど、深く理解していきたいと思っています。あとは、OSSなどにも積極的に貢献していきたいです。コミュニティにパッチを送る場合もあるのですが、いくつか独自にパッチを当てたまま放置してしまっているものもあるんですね。余計なメンテナンスコストになってしまうので、本質的な作業に集中するためにも、なるべく公開して本家に取り込んでもらうのが良いと思っています。
――ありがとうございました!