LINE株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。 LINEヤフー Tech Blog

モダンな技術を積極的に取り入れたライブコマースサービス「LIVEBUY」開発の裏側

サービス・機能やそれにまつわる開発の裏話や取り組みを聞く「Product Story」シリーズ。今回は、2021年11月にテストローンチされたライブコマースサービス「LIVEBUY」の開発プロジェクトを紹介します。マイクロサービスアーキテクチャの採用やインフラでのKubernetesの活用、サーバーサイドの開発言語としてKotlinの導入を始め、モダンな技術を積極的に取り入れてさまざまなチャレンジを行っています。このプロジェクトについて、開発マネージャーの堀口直人とサーバーサイドを担当した宇井敬一朗・岩谷明に話を聞きました。

プロジェクトの途中で発生した大きな方針転換

――LIVEBUYとはどのようなサービスでしょうか。

堀口:「LIVEBUY」はライブコマースと呼ばれるサービスで、商品を販売したい人がライブ配信で商品を紹介し、視聴者は商品を気に入ればその場で購入することができるというものになります。

イメージとしてはテレビショッピングに近いのですが、ライブコマースは出演者と視聴者がチャットでコミュニケーションすることが可能です。このため、商品説明を聞きながら分からないことがあれば視聴者から出演者に質問するなど、リアルの対面販売に近い形で商品を紹介したり購入できる点がテレビショッピングとの大きな違いです。

LIVEBUYならではの特長としては、LINEプラットフォーム上で提供されていることがあります。すでにLINE公式アカウントを開設している場合、友だちとして登録されている顧客をLIVEBUYに誘導するなど、LINEのエコシステムを活用して商品を販売することができます。

岩谷:またLIVEBUYはLINE上でWebアプリケーションを実行する「LIFF」(LINE Front-end Framework)上で動作するサービスになっています。このため、すでにLINEを使っていれば誰でもすぐにライブコマースを視聴できるほか、「LINE Pay」とも連携していて、ライブ配信の視聴から商品の購入、決済に至るまでがシームレスに連携していることもLIVEBUYの強みです。

――開発プロジェクトはどのように進められてきたのでしょうか。

堀口:開発が始まったのは2019年4月で、当初は少人数でプロジェクトをスタートしました。設計に携わったのは、岩谷さんと宇井さん、そしてもう1人のエンジニアです。新規サービスの開発であったため、プロトタイプの開発と不足している機能の追加といった作業を繰り返してきました。また、途中事業上の要因もあり時間もかかりましたが、2021年の秋にテストローンチしました。

岩谷:実はプロジェクトを開始した当初は、ライブ配信を楽しむサービスの1つという位置づけで、エンターテインメント要素が強いサービスになる予定でした。ただプロジェクトの途中でECに力を入れていくという新たな方針が打ち出され、我々が開発してきたサービスを手直しして現在のLIVEBUYの形になっています。

堀口:先ほどお話したように、LIVEBUYはLIFFで開発したWebサービスとして提供していますが、もともとはネイティブアプリでの提供を予定しており、そのための開発も進めていました。

ただECという文脈で考えると、LINEアプリ上で動画の視聴から購入、決済まで完結できたほうがよいということになりました。それで専用アプリの開発をストップし、LIFFのWebサービスとして開発を再スタートしました。

使って実感したKotlinのメリット

――LIVEBUYのサーバーサイドはどのように開発が進められたのでしょうか。

岩谷:以前所属していた部署で開発していたとき、もし最初から開発するならこれを使いたいと考えていた技術を採用したり、既存のプロジェクトで悩んでいたことを解消できるアーキテクチャを採り入れるなど、新しいものを積極的に採り入れました。

具体的には、複数のサービスを組み合わせてシステムを構成するマイクロサービスアーキテクチャや、コンテナオーケストレーションツールであるKubernetes、Googleが開発したリモートプロシージャコールの仕組みであるgRPC、Androidアプリの開発言語としても人気のあるKotlinなどを採り入れています。

宇井:最近ではLINE社内でもサーバーサイドでKotlinを使うプロジェクトは増えていますが、当時はまだ珍しい状況でした。

岩谷:私は以前Androidアプリの開発を行っていて、そこでKotlinに触れていました。そこでJavaより書きやすいと感じていたこと、社内でよく利用されるSpring FrameworkでもKotlin対応が進み始めていたことから、親和性・将来性があると判断し、LIVEBUYのサーバーサイドの開発にKotlinを使うことにしました。

宇井:私はKotlinで開発するのは初めてだったのですが、以前からJavaで面倒なところをKotlinは改善しているという話を聞いていて興味はありましたし、実際に開発に使ってみて体感することもできました。

特に大きかったのは、null safetyである点です。Kotlinであればnullを起因とするエラーを防ぐための仕組みが言語仕様に組み込まれていて、開発の負担を軽減することができます。これは大きなメリットだと感じました。また、非同期処理を簡単に実現できるKotlin Coroutineがあることも大きな魅力でした。実際の開発でも、この辺りのメリットは大変感じています。

マイクロサービスアーキテクチャの苦労と今後の期待

――マイクロサービスアーキテクチャも採り入れられていますが、実際に採用してみて感じたメリット・デメリットを教えてください。

宇井:実はマイクロサービスを採り入れる必要はないと考えていました。特にプロジェクトの開始当初は少人数だったため、マイクロサービスのメリットよりもデメリットが大きくなるのではないかと考えたためです。

具体的に言えば、細かくサービスを分割することにより、オーバーヘッドが大きくなるのではないかということです。将来的に開発者が増えるだろうと考えたこともあってマイクロサービスで開発することにしましたが、それによって苦労した部分もありました。

岩谷:少人数ではマイクロサービスのメリットを享受しづらいことは、今回改めて実感しました。ただ、今後サービスが成長して開発のメンバーが増えれば、マイクロサービスのメリットが活きてくるだろうと考えています。

堀口:設計の観点では、マイクロサービスであることのメリットがありましたよね。

岩谷:そうですね。さまざまな機能を1つのモジュールに集約するモノリシックなアプリケーションで、メンテナンス性を維持しながら機能を追加するといったことが難しくなっているプロジェクトを目にしてきました。また、機能の追加が意図しない部分にまで影響して問題が発生するといったこともあります。

しかし今回はマイクロサービスアーキテクチャを採り入れたことで、機能ごとにサービスを分割し、それらをgRPCのインターフェイスでつなぐ形にしたので、メンテナンス性の高い構成にできたのではないかと思っています。

共通基盤の活用により、少数精鋭で新しいサービスの開発が可能

――コンテナとKubernetesも使われたとのことですが、どういった点でメリットを感じましたか。

宇井:YAMLで管理することができる点や、スケーラブルなインフラを作りやすい点はメリットだと感じています。ただ理解しなければならない概念が多く、最初の学習が大変だと感じました。1度わかってしまえば便利なのですが。

岩谷:2021年の年末に、多くの人々の視聴が見込まれるライブ配信がありました。それに備えてサーバー側のリソースを倍以上に増強したのですが、それを簡単に実現できたことはKubernetesのおかげだなと思いました。その結果、現在では574個のKubernetes Podが動作しています。

宇井:マイクロサービスとの相性の良さもメリットですね。もしKubernetesを使えていなければ、ひょっとするとモノリシックで開発していたかもしれません。

岩谷:苦労した部分もあります。LINEにはVerdaと呼ばれる独自のクラウド環境があり、その上でKubernetes環境をマネージドで提供するVKS(Verda Kubernetes Service)が運用されています。このVKSをLIVEBUYでも使っているのですが、当時はVKSがリリースされたばかりのタイミングでもあり、トラブルが発生した際に原因がこちら側にあるのか、それともVKSにあるのかが分からず、VKSのチームと連携しながら調査するなどといったこともありました。

堀口:LINE社内の動画配信プラットフォームである、LSS(Live Streaming Station)も利用しています。これにより動画配信のための仕組みを自ら開発することなく、LIVEBUYでのライブ配信を実現しました。

LINE社内では、複数のサービスが共通して利用する機能などが共通基盤として整備されています。これらを使ってサービスを提供できることは、LINEのいいところだと思っています。もしこうした基盤がなければ、少人数のプロジェクトでLIVEBUYを開発することは難しかったでしょう。

岩谷:LINE Payを用いた決済についても、ビリングと呼ばれるチームが開発している、決済を提供する基盤があり、それを用いて実現しています。ただ決済に関しては、割賦販売法と言った法律など、気にしなければならないことが数多くあり、またプロジェクトのメンバーはECに関するサービスに携わった経験がほとんどなかったため、事業部や企画側のメンバーも交えて一緒に勉強しました。

――フロントエンドではどのようなチャレンジがありましたか。

堀口:今回、モジュール間の通信にgRPCを使っていて、フロントエンドとバックエンド間の通信もgRPCを使っています。ただWebブラウザのJavaScriptではHTTP/2が使えないため、WebブラウザからgRPCでアクセスすることを可能にする、gRPC-Webと呼ばれる仕組みを利用しています。このgRPC-Webに関する経験が社内でも蓄積されていない状況だったため、フロント側のメンバーはチャレンジングな部分になりました。

岩谷:フロントエンドとの通信にgRPC-Webを使うことにした背景には、もともとネイティブアプリ向けにAPIを開発していたことが背景にあります。ネイティブアプリであれば直接gRPCでサーバーサイドにリクエストを投げることが可能であり、シームレスに連携できます。

プロジェクトの途中でWebサービスとしてとして開発することになったため、既存の実装を活かしてgRPC-Webを選定しました。もしWebアプリケーションのために再度APIを作り直すということになっていたら、開発は間に合わなかったかもしれません。

宇井:ただgRPCならではのメリットもありました。実はフロントエンドの開発はJavaScriptではなく、型チェックがあるTypeScriptを用いています。このTypeScript向け型情報をgRPCのprotoファイルから生成することが可能であるなど、TypeScriptとgRPCの相性はよかったと感じています。

エンジニアとしてやりたかったことができたプロジェクト

――エンジニア個人として、働いていて面白いと思うこと、あるいはやりがいを感じる部分を教えてください。

岩谷:LIVEBUYはゼロからサービスを作ったため、単に言われたものを作るということではなく、企画側とも密に連携し、仕様を1つずつ議論しながら自分たちで開発を進めて行ったのは楽しい部分でした。始まったばかりのサービスではありますが、今後サービスが成長して多くの人に使ってもらえる可能性があるのは、エンジニアとして楽しみな部分です。

堀口:単にエンジニアリングだけでなく、事業部側や企画側ともやり取りして仕様などを決めなければならないことは、すごくやりがいがあるし楽しいなと思います。LIVEBUYはまさにそういったステージにあるプロダクトです。日々の開発では開発環境にデプロイした機能を企画職やデザイン職などのメンバー全員で実際に利用し、そのフィードバックを反映することでプロダクト品質を高めるといった取り組みを行っています。こうした取り組みを継続し、ライブコマースでナンバーワンという目標を達成したいですね。

宇井:今回のプロジェクトでは、GitをベースにCI/CDを行うGitOpsを実践するなど、エンジニアとしてやりたかったことができて楽しかったですね。またこれまで仕事で利用する機会がなかった、非同期I/Oに取り組むなど、新しいチャレンジができたこともよかったと思うことの1つです。

――最後に、今回のプロジェクトの感想を教えてもらえますか。

宇井:楽しくやれています(笑)。当然、大変なこともありますが、エンジニアとしての成長につながっていると感じますし、いろんな知見が得られているなと手応えを感じています。

岩谷:サービスをユーザーに届ける中で、技術の力で事業を後押ししたり、ビジネスを牽引するようなエンジニアになりたいと思っています。それを少しずつ実践できているという手応えがあり、楽しんで取り組んでいます。

堀口:LINEに入社してからこれまで、さまざまな新規サービスの開発に携わってきましたが、今回のプロジェクトが一番思い入れがあり、メンバーみんなと協力してサービスをリリースできたことは本当にうれしかったです。現状は少数精鋭ですが、今後サービス規模が拡大すれば、プロジェクトが大きくなってメンバーも増えると思うので、これからどうなっていくのかがすごく楽しみですね。

採用情報

LINE株式会社では一緒に働くエンジニアを募集しています!
今回のインタビューと関連する募集ポジションはこちらです。