Official Account開発室では3つの事業を担当

松野徳大氏(以下、松野):それではみなさま、よろしくお願いいたします。LINE株式会社Official Account開発室の松野です。私からは、Official Account開発室でやっていることについて紹介します。よろしくお願いします。

本日のアジェンダですが、まず簡単な自己紹介をして、そのあとにLINE公式アカウントの事業がどういうことをしているのか、また実際にどういうものを開発しているのかについて紹介します。最終的には、実際にどういうテクニカルスタックで開発しているのかというところまで紹介できればと思っています。

まず簡単に自己紹介ですが、私はLINE株式会社の開発4センターのOfficial Account開発室と、B2B Platform開発室という2つの部署の室長を兼務しています。

Perlでサーバーサイド開発などをしていて、C++でWindowsアプリを開発したり、iOSアプリの開発や、Javaでのサーバーサイドアプリの開発もやっていました。最近はちょっとマネージャー業をメインでやっています。

Official Account開発室では、3つの事業を担当しています。LINE公式アカウント事業、これが一番のメインですが、あとはLINEセールスプロモーションという店頭販促ソリューションの開発。LINEポイントADという、LINEポイントをインセンティブとした、いわゆるアフィリエイト広告の開発も担当しています。本日はこの中で、LINE公式アカウント事業をメインに紹介します。

B2B Platform開発室については、LINE DMPとCRSについてそれぞれ担当者から紹介があるので、そちらを参考にしてください。

LINE公式アカウントとは

では、LINE公式アカウント事業の紹介から始めます。LINEがどんなサービスかについては、参加している方は全員ご存知かなと思いますが。老若男女問わず、家族や友達と楽しくコミュニケーションが取れるコミュニケーションアプリですね。

一方、LINE公式アカウントはどういうものか考えてみますと、いろいろな人間の輪、友達とか家族とかそういったコミュニケーションの輪の中に、企業や店舗がジョインできるような、そういったサービスになっています。人と人とのコミュニケーションをCLOSING THE DISTANCEするだけではなく、人と企業の間もCLOSING THE DISTANCEしていこうというコンセプトでやっています。

街中や、喫茶店、お店、飲食店、スーパーマーケット、ショッピングモールなどで、こういったLINE公式アカウントの友だち募集中のポスターを見たことがある方も多いと思います。非常にたくさんの店舗さんに使ってもらっています。

ポスターにふくまれるQRコードを読み取ると友だち登録が完了して、お得なクーポンが送られてきたり、新商品の入荷情報などが送られてきたりして、そのお店とより密にコミュニケーションが取れるようになっていくようなサービスを提供しています。

お店の場合だと、ポスターとかでよく見かけると思うのでイメージが掴みやすいかと思うのですが、実はそれ以外に大手の企業さんにもLINE公式アカウントを使っていもらっています。

「LINE公式アカウント 事例」などで検索していただくと出てくると思うのですが、LINE公式アカウントは非常に多くの、いわゆるナショナルクライアントと呼ばれるような大きな企業さんにも使っていただいています。非常に大きな企業から小さな店舗まで、さまざまな規模で活用できるのがLINE公式アカウントです。

社外でももちろん使っていますが、社内のサービスでも使われています。LINEマンガ、LINE MUSIC、LINEショッピング、LINEトラベルなど、さまざまな事業をLINEでは展開しているんですが、そのほとんどがLINE公式アカウントでサービスを告知したり、サービスの通知をしたり、さまざまな用途で利用しています。

先ほども紹介がありましたが、LINEが普及している日本、台湾、タイ、インドネシアの4ヶ国に対して、LINE公式アカウント事業を展開しています。

結局何を開発しているのか

事業に関しては、今まで紹介したとおりですが、実際エンジニアとして何を開発しているのかは気になるところじゃないかなと思います。

我々が開発しているのは、Official Account Platform です。 Official Account Platform の基礎には、まずLINEのプラットフォームがあります。LINEのプラットフォームには、トークサーバーと呼ばれているメッセージングのコアを司る部分や、ソーシャルグラフの管理といったものをやる部分がまずあります。

その外側に、Botバックエンドというレイヤーがあります。開発1センターという部署が、メッセージングAPIという、Botを開発するためのAPIを開発しています。Botに発言させるためのAPIを提供したり、Botが受け取ったメッセージをWebhookとして外部のサーバーに送信したり、あるいはBotが受け取ったメッセージをストレージに保存しておくChatboxという機能。そういったものを提供してくれるBotバックエンドというプラットフォームがあります。

その1枚外側のプラットフォームとして構築しているのが、Official Account Platformです。このOfficial Account Platformというのが、企業や店舗、あるいは社内サービスなどが、BotのバックエンドやBotのプラットフォームを利用しやすいかたちにラップするのが主な仕事になっています。

メッセージ配信システムとInsight

実際はどういったものを開発しているかというと、1つ大きいのはメッセージの配信システムですね。ブロードキャスト配信やそういったこともいろいろできるのですが、こういったかたちでテキストやLINEスタンプ、画像といったものを、メッセージ配信システムからエンドユーザーさんに向けて配信できるシステムを作っています。

普通にそのまま即時配信もできるのですが、予約配信ができたり、あるいはメッセージの内容をタイムラインにポストしたり、あるいはABテスト配信をしたりもできます。あるいは全員に配信するのではなくて、デモグラフィックに応じて特定のユーザー層にだけ配信するといった機能など、いろいろ提供しています。

続いてInsight、分析機能ですね。メッセージを配信したあとに、そのメッセージがどれくらいのユーザーに届いたのか。あるいは何人くらいのユーザーがそのメッセージを実際に見てくれたのか。その中に含まれるURLをどれくらいのユーザーがクリックしてくれたのか。そういった情報を見れる画面も提供しています。

社内にIUという分析基盤があるのですが、そこに全社からデータが集まってきますので、それをSparkのQueryで集計して、データはHBaseにストアしています。そして実際、そのストレージに貯めたデータをこの画面で表示したりするところまで、自分たちで作っています。

そのストレージ自体は、今物理サーバー15台くらいに収まっていて、ストレージは36TB くらいあるのですが、ディスクIOは平均100MB/s、ピークで400MB/sくらいという感じになっているので、そこそこ大きいストレージにデータを貯めて画面で見れるような機能を提供しています。

ショップカードとクーポン

LINE公式アカウントには大手の企業から小さなお店まで、いろいろユーザーがいます。実は小さなお店向け、個店向けの機能もあって、ショップカードとクーポンは、1つ大きいところです。

ショップカードはスタンプカードみたいな感じになっていまして、例えばお店に10回来店したらクーポンがもらえますよ、といったものがあると思いますが、そういったものをLINE上でも簡単に作れる機能です。この画面はエンドユーザーも見れるので、そういったエンドユーザーが使いやすいように機能を作るのも、我々の業務の一部となっています。

こっち側がクーポンの編集画面です。例えば唐揚げ20%オフクーポンみたいなものを作って、ショップカードと紐付けて、10回来店したらクーポンあげたり。あるいはクーポン自体は普通にメッセージで配信して、来店を促すようなこともできるようになっています。

自動応答システムとLINEチャット

あとは自動応答システムみたいなものも作っています。これはLINE CLOVAの部署と一緒に連携していて、AIベースで自動応答できるようになっています。単純な正規表現やキーワードベースよりは、ちょっと賢い自動応答システムみたいなものを構築して提供しています。

あとはLINEチャットというWebチャットシステムを作っています。こちらはSpringのWebFluxという技術を使って、Webチャットを作っています。Server Sent Eventを使ったチャットのシステムです。

こちらは日本だけではなくて、グローバルでサービス展開をしていて、最近だと最大約15万同時接続くらいは出ているかなぁという感じです。一般的に、Webチャットのシステムとしてはそこそこ大きい規模になってきているかなと思います。最近のアップデートでVoIPにも対応しまして、LINE公式アカウントとも音声・ビデオ通話ができるようになったので、非常に便利になっています。

エンドユーザーが使いやすいよう機能を付け加える「Official Account Platform」

そういったかたちで、このピンク色の部分がBotのバックエンド部分なんですが、このバックエンド部分に加えて、エンドユーザーが使いやすいようなさまざまな機能を付け加えているのが、Official Account Platformです。

ただ、使うユーザーさんも企業とかお店だけではなくて、エンドユーザーが直接閲覧するようなページもたくさん作っています。LINEチャットに関しては、サブアカ感覚で使ってくれている方もいるので、非常にたくさんの方に利用してもらっています。

単純なデータの管理をするCMS的な部分だけではなくて、データを大量に集めてきて、それをパイプラインを通じて処理したり、あるいはそれをSparkで処理してHBaseに貯めて、管理画面で見たり。そういった非常に大きなデータを扱うようなシステムなどの開発も担当しています。

実際の規模感的なところなんでは、企業やお店が使うCMSって、けっこうユーザーのアクセスやトラフィックが小さいと思っている方も多いかなと思うのですが、現実的には僕らが提供しているメッセージ配信のCMSの部分は、直近のデータだと3億2000万マンスリーPVくらいあります。そのへんのWebサイトよりは、ぜんぜんPVが多いようなサービスになっています。

またサーバーの台数的にも、300VMインスタンスくらいはあるかなぁという感じですね。Webチャットの部分も、200VMインスタンスくらいあります。

あと、分析環境に関しては先ほど申し上げたとおりです。あとはLINE公式アカウントのインターナルAPIというのもあって。これが最近だと、ピークで6500 rpsくらいある状況になっています。あと、社内でしか提供していないAPIではあるものの、発行済みのアクセストークン数が今61個あります。社内サービス用のAPIとはいえ、かなり多くの方々がアクセスしている状態になっています。

そういったかたちで社内サービス、あるいはエンドユーザー、企業、店舗、そういったさまざまな方々に対して、それぞれがみなさん使っていて喜びが得られるような、メリットがあるようなサービスを提供しようと、我々のほうでは開発を日々がんばっています。

開発の魅力はどこにあるのか

では、Official Account Platformの開発の魅力はどこにあるのかについて紹介しようと思います。1つ大きいのは、他社のモノマネでサービスを作るのではなくて、新しい世にないサービスを作っていこうというところが、1つ大きいんじゃないかと思います。

LINE公式アカウントのようなサービスは日本だとほかにありませんし、世界的に見てもあまりありません。たぶん数社しかない。なのでそういった意味で、世界にないようなものをどんどん作っていって、ユーザーに便利な世界を提供していこうとやっているのが僕らかなと思っています。

なにかからインスパイアされて作るのではなくて、新しいものを作っていこう、あるいは業界自体を引っ張っていこうといった気概をもって開発を進められる環境かなと思っています。

あとは、トラフィックやデータも非常に多いので、それをどうやって効率的に少ないサーバー台数で収めるとか、あるいはどうやって大量のトラフィックを捌くとか、そういったところがエンジニアとして非常にスキルが試されるというか、楽しい部分じゃないかなと思います。

あとは、たくさんの方に使ってもらえるということですね。今LINEの公式アカウントはグローバルですでに1268万アカウント(2020年6月時点)作られていて。非常に多いですね。なので非常にたくさんの方に使ってもらっているので、そういった意味では、作った機能をたくさんの方に使ってもらえるので、非常に作りがいがあると捉えています。

あとは、社内のほかのチームとの連携も非常に多いので、Botのバックエンドを作っているチームに、こういう機能を作ってくれないか、あるいは事業上こういう要件があるから、こういうのを作ってくださいみたいな話をしたりとか。VoIPのチームと開発したりとか。

あるいは社内のほかのサービスですね。LINE NEWSやLINE LIVEなど、さまざまなサービスの担当者が、LINE公式アカウントを使ってこんな機能を作りたいんだけど、みたいな話を日々もってくるので、そういったところを実際に各サービスの担当者が便利に使えるように提案していくのが、我々のやっている業務の範囲となっています。

開発は社内のプライベートクラウドで

そういったかたちで、さまざまな開発をしているのですが、最後に、実際どのようなテクニカルスタックで開発をしているのかを簡単にご紹介したいと思います。

我々はサーバーに関しては、基本的にLINE社内のプライベートクラウドでの開発がメインになっています。openstackベースのプライベートクラウドになっていて、APIとかもいろいろあるし、コンソール部分も自社開発のものがあるので、非常に便利に使えるようになっています。

開発の体制としては、IaaS的なものがメインになっていて、Kubernetesなどは、LINE公式アカウントではまだあまり使っていません。DBなどのストレージ系に関しては、Elasticsearch、MySQL、Redis、HBaseあたりをメインで使っていて、そういったものに関しては、かなり専門的な知識をもっているプロフェッショナルのDBAさんが見てくれるので、非常に助かっています。

またCapacity planningとかも、そういったDBAの方が見てくれるので、非常に安心して開発ができるようになっています。あとは、社内でメッセージのやりとりに関してはKafkaを使っていますが、Kafkaの部分に関しても、Kafkaのプロの方々が運用してくれるし、コンサルティングもしてくれるので、Kafkaの部分も非常に安心して使えます。

社内のWeb開発は、ACPをベースにしたAPIの提供も割合としては非常に多いんですが、実際にはKafkaを使ったメッセージのやりとりも非常に割合が多い開発体制になっています。

基本的にJVM言語がメイン

開発しているうえで、プログラミング言語は何だろうというところはみなさん気になるところかなと思いますが、我々は基本的にJVM言語をメインで使っていて、最近ではJavaとKotlinを多く使っています。

新規コードは、Official Account開発室ではKotlinをメインで使っています。ただ初期のころに書いたコードはJavaのものが残っていて、LINE公式アカウントCMSの部分に関しては18万行くらいJavaがあって、8万行はKotlinです。

LINEチャットの部分は、4万行くらいJavaで、1万行はKotlin。そういったかたちで徐々にKotlinの割合を増やしています。

JavaだKotlinだといっても、実際どういうライブラリを使っているのかというところも気になるところかなと思います。フレームワーク的には、Springをメインで使っています。SpringのWebMVCとWebFluxの両方とも使っていて。最近はReactor使っているケースが多いですかね。ReactorとNettyでやっています。

あと、データベースのアクセスは、RedisはLettuceを使い、O/R MapperはMyBatisを使っています。テンプレートエンジンは、FreeMarkerとThymeleafを半々で使っています。そんなに、今もう全ページをFreeMarkerやThymeleafで作る時代でもなくて。ほとんどSPAみたいな感じでちょっとトークンを入れるくらいにしかあんまり使っていないので、テンプレートエンジンはわりとリードエンジニアの裁量で決める、みたいな感じになっていますね。

自己紹介から事業や開発しているもの、テクニカルスタックの紹介などをしました。けっこう駆け足だったと思うので、質問したいことや、もうちょっと詳しく知りたいところがあれば、随時質問をQ&Aのほうに投げてもらえければと思います。よろしくお願いします。

今回は採用イベントなので当たり前なんですが、現在LINE公式アカウントではエンジニア、LINE公式アカウントの開発をともに楽しむ旅の仲間を募集していますので、みなさまぜひよろしくお願いします。以上です。