【Team & Project】 Smart Channelのレコメンド配信システムの開発を担当しているチームを紹介します

LINEの開発組織のそれぞれの部門やプロジェクトについて、その役割や体制、技術スタック、今後の課題やロードマップなどを具体的に紹介していく「Team & Project」シリーズ。今回は、レコメンド配信システムを開発しているCRS Devチームを紹介します。 CRS Devチームの渡邉と萩原に話を聞きました。 

CRS Dev チームの皆さん

―― まず、自己紹介をお願いします。 

渡邉:私はLINE公式アカウント開発を行うOfficial Account開発室でCRS Devチームのマネージャーをしています。

萩原:私はCRS Dev チームで開発リードをしています。 学生時代にアメリカのオクラホマ州に住んでいた繋がりで、 Oklahomer という ID で呼んでもらうことが多いです。主に Smart Channel の Backend 開発として、 Machine Learning チームと連携しつつ、リアルタイムに安定してレコメンドを提供できるシステムの開発・運用に取り組んでいます。 

―― みなさんがLINEに入った理由を教えてください。 

渡邉:私はLINEの前進の会社であるライブドアに入社し、色々なサービス開発を担当していました。入社当時はLINEというアプリはまだ世の中に生まれていませんでしたが、LINEアプリが誕生してからその成長の様子をずっと見ていました。NHN Japan、ネイバージャパン、ライブドアの3社の経営統合後、徐々にLINEに関わる仕事を担当するようになり、今に至ります。 

萩原:私も同じくライブドア入社でした。入社後は、コンシューマ向けのサービス開発を主に行っていましたが、 LINE占いの開発を引き継いだことをキッカケに、LINE のファミリーサービスにも関わるようになりました。
LINE占いは最も古いファミリーサービスのひとつですが、LINEアプリ本体からの導線が置かれた日に、トラフィックとユーザレコード数が凄まじい勢いで増加して驚愕したのを今でも覚えています。

※左から開発リードの萩原、マネージャーの渡邉 

―― LINEで働くやりがいを教えてください。 

渡邉:CRSはバックエンドのシステムの名称である「Contents Recommender System」の略で、みなさんに見えるものとしてはSmart Channelというサービスになります。LINEには沢山のサービスがあって、様々なコンテンツを提供しています。Smart ChannelはそういうコンテンツとLINEを繋ぎ、ユーザが便利になるように、最適なコンテンツを最適なタイミングでレコメンドして表示するサービスです。 

そのため、各コンテンツとAPI連携するのですが、ずっとこの会社にいる私でもびっくりするぐら多様なサービスがあって、社内の様々な人と連携しながら開発できるのがとても楽しいです。 

※ 赤枠の部分がSmart Channelと呼ばれるコンテンツレコメンドや広告を表示するサービスです 

萩原:Smart Channelは現在、日本だけでなく台湾やタイもサポートしています。タイでは日によって天気が大きく変わらないため、天気予報の需要が少ない反面、宝くじの結果速報の需要が大きかったり、台湾では総統選に関わるコンテンツが非常に注目されたりなど、同じようなコンテンツであっても国によって全く異なる需要があります。 

それを支えるために各国にローカル PM がいて、コンテンツ連携の企画・進行をするのですが、毎週のグローバルミーティングでは各国ごとの異なるコンテンツ事情が聞けてとても面白いです。 

―― チームの構成・役割などについて教えてください。 

渡邉:現在、エンジニア5名でSmart ChannelのBackendを主に担当しています。Backendのシステムを作るのが主な役割ですが、そもそもプロダクトとしてどんな機能をつくっていくのか、どんな数値指標を追ってくのかなど、プロダクトマネジメントにも積極的に参加しています。 

また、CRSはコンテンツレコメンドをするシステムなので、機械学習を用いた機能を社内の Machine Learning の部分を専門に開発するチームと協力して開発しています。 

先ほど萩原さんが言われたように、Smart Channelは日本だけでなく台湾やタイもサポートしています。それぞれの国にPMがいて、連携して開発を進めています。 

―― チームメンバーを紹介してください。 

渡邉:今一緒にお話ししている萩原さんは、英語を流暢に話すことが出来るので、グローバル対応するために私が熱望してチームに来てもらいました。 

また、エンジニアであれば使っている人が多いと思いますが、Slack用の絵文字作成サービスの作者もチームメンバーにいます。色々な技術に興味もって、とても楽しそうに開発してくれている方や、大学の専攻で音声分析をしていて過去にマイクロソフト主催のイマジンカップ3位を取った方など、私たちのチームは、個性豊かなメンバーが揃っています。 

―― 利用技術・開発環境について教えてください。 

萩原開発は主にJavaでSpring Bootを使っています。キャッシュストレージはRedis 、一部の恒久的ストレージにはMySQL、そしてメッセージキューとしてはKafkaを使うなど、弊社内では一般的な構成となっています。 

Machine Learningを担当するチームと分担して作業することも多いため、コンポーネント間のメッセージングはKafkaを使うなどして連携を疎に保ちつつ、 LINEのトークタブのトラフィックを安定して捌く必要があるパートを主に開発しています。 

また、 Smart Channelではリアルタイムの処理の部分は私たちがサーバサイドの実装で馴染みのあり、LINEの大きなトラフィックでも比較的安定して動くJavaで書いていますが、Learning worker(以下図参照)の部分は機械学習の処理にアドバンテージのあるPythonで書かれていたりします。このように各チームが別の言語で実装したものをAPIで連携するアーキテクチャーも開発しています。 

※LINE DEVELOPER DAY 2019でSmart Channelのアーキテクチャーについて具体的に解説しました。 https://logmi.jp/tech/articles/322171 

―― 今のチーム課題について教えてください。 

萩原:私たちの課題は大きく2つあります。 

1つ目は、社内に今提供しているサービス以外にも、まだ多くのメディアあるので、それらのメディアとレコメンドエンジンを連携して素早くコンテンツを提供出来るような仕組みを作ることです。 

また、既にレコメンドを持っているサービスには、既に持っているレコメンドデータを再利用することができる実装になっていますが、レコメンド機能を独自に開発していないサービスとか、リリースしたばかりのサービスには、いきなりレコメンドを作ることは難しかったりします。そのようなレコメンドの機能がまだないサービスには、コンテンツだけ連携してくればレコメンドを代りに作ってくれる、汎用的なレコメンドエンジンを作り提供する必要があります。 

2つ目は、災害情報などを素早く届ける仕組みを作っていくことです。 

地震があった時は、LINEのメッセンジャーのトラフィックが大きく跳ね上がります。それは、家族や友達にメッセージを送り合い、互いに安否確認をすることなどに利用されているからです。その時、ユーザーに安心や安全を提供するために、「先程の地震は震度4でした」という表示や、二次災害の情報として「津波が発生しました」など、災害情報をリアルタイムに素早く表示することの必要性を感じています。 

LINEは東日本大震災をきっかけに、スマートフォンで大切な人とつながるコミュニケーションアプリとして生まれました。大切な人とつながり、さらに、地震や豪雨などの災害情報を素早く届けることができるようにすることは、私たちの大きな課題の一つです。 

――課題解決に向けた取り組みについて教えてください。 

萩原:1つ目の課題についてですが様々なレコメンドエンジンで生成されるコンテンツを安定して供給するだけでなく、レコメンドエンジンをまだ持っていなかったり、もしくは新しいサービスでまだ十分なデータを持っていないようなケースでもレコメンドを提供できる仕組みを持ち、それらのサービスの成長に貢献する必要があります。 

そこで、コンテンツを投げ込めば最適にレコメンドしてくれる Auto Targeting 機能開発を進めているところです。 

こちら画像の左側にあるサービスはKafkaに対してただコンテンツデータだけを提供しています。コンテンツデータさえ渡していれば、あとはSmart Channelの中で適切にターゲティングを行って、そしてターゲティングされたコンテンツ群をスコアリングして、その中で一番いいものをユーザに対して返すというような仕組みになっています。 

すでにいくつかのコンテンツでは、サービス側から提供されるターゲティング情報なしで配信を行い、実際に成果が出ることも検証されました。このような方法をもっと活用できるように、ほかのサービスとの連携方法を確立しようと、今開発を進めているところです。これができると、LINE内のサービスであれば、とにかくコンテンツ情報さえSmart Channel側に投げ入れておけば、あとの最適化はすべてSmart Channel側で行ってレコメンデーションが提供される。そんな世界観が確立できると考えています。 

2つ目の、災害情報を素早く届けるための課題についてですが、そもそも一人にメッセージを送ることはそんなに難しくありません。しかし、届けなければいけない人が数千万人という規模になると、対象者に迅速に情報を届けることが大変難しくなります。 

どうやって効率的に届けるか、そのアーキテクチャー開発は一番の悩みどころですね。私たちのチームではまだ、ベストな解決法を見つけることができていないので、現在は継続的に仕組み作りに取り組んでいます。 

―― 今後のロードマップを教えてください。 

萩原:今年前半から半ばにかけては、各連携を簡略・高速化する仕組みを進めて、様々な場所に対してレコメンデーションを提供するプラットフォームとしての機能を充実させています。 

同時に、連携が増えて増加するレコメンドデータを素早く提供できるように内部的なアーキテクチャ改善も進めています。 
機能の面でも位置情報を用いたレコメンド方法を実装したり、それぞれのサービスとの連携を簡略化/高速化してその瞬間ごとにユーザが関心を持つであろうコンテンツを新たな切り口で提供し色々な情報と接する機会を作る予定です。 

今後は、社内での様々なサービスに対してレコメンドを提供するプラットフォームとして作り込んでいきたいです。 

Smart Channelは表示領域がとても小さいので、そこで表現できることは多くはありません。だからこそ、純粋にユーザにとって便利な情報が分かりやすく表示されることを目指しています。社内には連携しきれていないサービスがたくさんあるので、色々なサービスを色々なトリガーで連携することで、パッと見た瞬間に「この情報知りたかった!」と思ってもらいたいと考えています。Smart Channelに表示されたことによって、ユーザが普段だったら自分から探しに行かないような意外な出会いができて、驚きや感動が生まれるようなものを目指していきたいと思っています。 

―― 最後に、CRS Devチームに興味を持ってくれた人にメッセージをお願いします。 

渡邉:サーバーサイドの技術でMachine Learning の技術を使ったシステムが作れることはとても面白いです。興味はあるけど理系ではないので難しいと思っている方、文系でも大丈夫ですよ。 Machine Learningの複雑な計算を行ったり、LINEならではのトラフィックの中で課題を解決していくことは、他のサービスでは体験できない楽しさがあります。 

萩原:Web開発のエンジニアでもMachine Learningチームと協業する機会のあるチームです。また、様々な国のサービスやその運用チームにも関わることができて、新たな発見がたくさんあります。 

色々な国のサービスと関わることが多く、国によって使われるサービスが違う、どんなコンテンツが要求されるのか全然違うことが見えてきたりする。そのような体験ができるのは、色々なコンテンツと関わるサービスならではの面白さだなと持っています。 

CRS Devチームではメンバーを募集しています。 

サーバーサイドエンジニア / Recommendation Delivery System (Smart Channel Backend)