LINE Corporation이 2023년 10월 1일부로 LY Corporation이 되었습니다. LY Corporation의 새로운 기술 블로그를 소개합니다. LY Corporation Tech Blog

2,300万人超のユーザーに価値を届ける仕事。LINEギフト開発の醍醐味をエンジニアに聞いた

サービス・機能やそれにまつわる開発の裏話や取り組みを聞く「Product Story」シリーズ。今回は、「LINE」を通じて、さまざまなプレゼントを友だちに贈ることができる「LINEギフト」を紹介します。2021年の年間総流通額は前年比330%を達成し、さらに累計ユーザー数は2,300万人を突破するなど、成長著しいサービスとなっています。
*2022年3月時点でLINEギフトを贈ったことがあるもしくはもらったことがあるユニークユーザー

今回はLINEギフトの開発を支えるリードエンジニアの大橋宏輝とサーバーサイドエンジニアの名田太河にインタビュー。彼らが携わった「PerlからJavaへの移行」「Yahoo!ショッピングとの連携」「Xmas還元キャンペーン」という3種類のプロジェクトでの取り組みや、LINEギフトのエンジニアとして働く醍醐味について解説してもらいました。

左から名田さん、大橋さん

年間流通額が昨年比330%、サービス連携なども進む急成長プロダクト

――今回のインタビューではLINEギフトの開発メンバーが担ってきた各種プロジェクトについてお話を伺います。まずは、LINEギフトというサービスについて教えて下さい。

大橋:LINEギフトは、その名のとおりLINEアプリ上でユーザー同士がギフトを贈ることができるサービスで、2014年11月にローンチしています。ちょっとしたお礼や謝罪などのシーンでドリンクやお菓子などの引き換え電子チケットを贈ったり、バレンタインや母の日・父の日のようなシーズナルイベントや結婚や転職などのライフイベントなどでの贈答品を贈ったり、様々なシーンで利用されています。

昨年(2021年)はコロナ禍が続く中でニーズが高まったことや、TVCMなどのプロモーションも注力されたこともあり利用が増え、LINEギフトの年間流通総額が前年比330%を達成、累計ユーザー数も2300万人を突破するなど、大きな成長を記録しています。また、 Yahoo!ショッピング・PayPayモール・ZOZOTOWN・一休.com・出前館など、昨年3月に経営統合したZホールディングスのグループ各社サービスとの連携も進んでいて、LINE内に限らずグループ内においても注目度の高いプロダクトになっています。

事業の成長や拡大に伴って、もちろん開発案件の数も増えています。事業側のニーズを汲み取り、スピード感を維持して様々な要求に応え、事業成長に開発から貢献するために、採用活動をはじめ体制強化にも取り組んでいます。

――LINEギフトはどのような技術が使用されていますか。

名田:技術スタックを紹介すると、プログラミング言語としては現在主にJavaを使っています。このあと詳しく説明されますが、もともとPerlで書かれていたので、必要に応じてPerlを使う機会もまだありますね。ユーザーからのアクセスを処理するLIFF(LINE Front-end Framework)やLINEギフト事業部向けの管理画面では、LINEのプライベートクラウド「Verda」のロードバランサからギフト側サーバーで起動されたnginxやPerl/PlackもしくはJava/Spring Bootで書かれたWebサーバーで処理を行っています。

また、その他のバックエンドでは、バッチ処理を主にJava/Spring Bootで部分的にPerl、DBはMySQLを用いて構成されています。セッション管理やキャッシュ処理など、KVSはこれまでMemcachedを使ってきましたが廃止してRedisに置き換えを完了したところです。Elasticsearchも逐次かつ定期的にDBの情報と同期していて、商品名称などの検索はDBではなくElasticsearchを使用しています。

プロジェクト1 : PerlからJavaへの移行

―― 現在LINEギフトで進められているという、PerlからJavaへの移行プロジェクトについて、移行を行う理由を教えてください。

大橋:もともとLINEギフトはPerlで開発されてきたサービスなのですが、2022年内を目標にJavaベースのシステムへ刷新しようとしています。

まずは開発効率の向上が一番の理由です。LINEではサーバーサイドの開発にJavaを用いるケースが多いことから、Java系の内製ライブラリが充実しています。しかしPerlの場合はそうではなく、自分たちでライブラリ自体を作成しなければならないことが多いです。

また、開発言語にJavaを用いることで、社内のJavaエンジニアを含め、より多くのエンジニアにLINEギフトの開発に関わってもらいやすくなると考えています。

名田:Javaは静的型付け言語であるため、型安全性の利点を享受できるのも良いところです。そしてこのプロジェクトでは、単にJavaへの移行を行うだけではなく、LINEギフトのアーキテクチャそのものも刷新しようと試みています。

――アーキテクチャのどのような部分を変えようと構想していますか?

大橋:まだ検討中ですが、たとえばApache Kafkaを導入することで大量のメッセージを送信できる設計にしたいと考えています。また、特定機能のマイクロサービス化も将来的には実施する予定です。さらに、スケールしやすいシステムにするため、コンテナ化とKubernetes導入なども推進します。より良いアーキテクチャについて考えることが好きなエンジニアにとっては、非常にやりがいを持って取り組めるプロジェクトだと思います。

このプロジェクトでは、オフショア開発で日本やベトナムのパートナー会社の方々にも協力してもらっているため、社外のエンジニアとのコミュニケーションスキルが向上するのも良い点です。日本とベトナムとでは文化や考え方も異なるため、密に連携をとってお互いの認識を合わせながらプロジェクトを進めていく必要があります。

名田:オフショアの企業とコミュニケーションをとる過程で、ドキュメント化するスキルもすごく鍛えられますよね。それに、ベトナムの方々が書いたプログラムをレビューする機会も多いため、ソースコードからエンジニアの意図をくみ取る力も向上しました。

この移行プロジェクトは、ユーザーアクセスを処理するLIFF APIや、LINE社内向けの管理画面、出店者向けの管理画面やバッチ処理などの移行に今後取り組んでいきます。ボリュームのあるLIFF APIや社内向け管理画面から優先的に対応していく予定です。

移行に際して、コードから全体仕様を読み解いていく経験、JavaやSpring Bootの実装経験がたくさん積めること、あとはJavaならではの実装最適化に取り組めることは、個人的なキャリア観点でもとてもポジティブに捉えています。

プロジェクト2 : Yahoo!ショッピングとの連携

――次は「Yahoo!ショッピングとの連携」について伺います。まずはプロジェクトの概要をご説明いただけますか?

大橋:Yahoo!ショッピングには約4億もの商品があり、国内のECサービスのなかでも最大級の品揃えです。Yahoo!ショッピングとのデータ連携を行い、それらの商品をLINEギフトで取り扱うことを目指しました。この連携によって、LINEギフト側は品揃えが大幅に充実しますし、 新たな顧客接点ができることでYahoo!ショッピングの既存店舗の売上への貢献、またZホールディングス全体としてのEC事業の拡大という様々な効果が見込めます。

――連携プロジェクトにおいて、技術的に難易度の高かった点はありますか?

名田:Yahoo!ショッピングの商品数が膨大であるため、それらのデータを効率良く取り込むための方法を検討する必要がありました。APIを呼び出して商品データを特定件数ずつ取り込むのは、所要時間やパフォーマンスの観点から見ると適しているとは言えません。

そこで、泥臭い手法ではありますが、Yahoo!ショッピングの商品情報を一定件数の商品ごとに生成されたローデータ形式のファイルで取り込み、バッチでファイルを処理する設計にしました。商品データの同期は日次で行います。

――日次での取り込みだと、Yahoo!ショッピング側で価格情報などを変更した場合に「LINEギフト」側で即時反映されないという課題が生じます。どのように解決しましたか?

大橋:商品を検索する処理では日次で同期されたデータを用い、ページ内に商品情報を表示する際にYahoo!ショッピングのAPIを呼び出して最新情報を取得する設計にしました。

それ以外には、在庫情報を扱うための設計にも工夫があります。Yahoo!ショッピングは商品の在庫数が頻繁に変動します。そのため、Yahoo!ショッピングと「LINEギフト」との間で、在庫数の情報をリアルタイムで同期させる仕組みを作るのは困難でした。

そこで、このプロジェクトではLINEギフトの「ユーザーは商品を必ず1個ずつ購入する(複数個の購入はできない)」という仕様に注目しました。LINEギフトではYahoo!ショッピングの商品の在庫数を知る必要はなく、「Yahoo!ショッピング側に商品があるか・ないか」だけを把握できれば、要件を満たせます。

このことから、Yahoo!ショッピングが提供する商品情報のAPIには、商品の在庫の有無を判定するフラグのみを返してもらうことに決め、仕様をシンプルにしました。このあたりは、ヤフーの技術ブログの記事の「LINEギフト連携PJにおけるベストプラクティス」部分で紹介いただいていますので、ご興味あればご覧いただけると良いと思います。

――今後、この機能をさらに改善していく予定があれば教えてください。

名田:現在は、Yahoo!ショッピング側とLINEギフト側の両方の画面を操作しなければ、商品の発送やユーザー対応などの処理ができません。これを、Yahoo!ショッピング側の画面を操作するのみで完結できるように改修しているところです。

また、取り込み時間の短縮に関しても改善を試みています。目算をつけていたとはいえ、連携を開始して改めてYahoo!ショッピング側の商品件数の多さを認識しました。並列処理、非同期化、不必要な処理の除去など様々な観点から取り込み時間の改善を検討し、今後の商品数の増加にも対応できるようにしているところです。

プロジェクト3 : Xmas還元キャンペーン

――次は「Xmas還元キャンペーン」についてご説明ください。

名田:LINEでは2021年のクリスマスシーズンに、特定期間内に「LINEギフト」で商品を購入すると、購入額の一部をボーナスクーポンとして還元するキャンペーンを実施しました。このキャンペーンでは私が開発の主担当を務めました。

――設計や実装においてどのような工夫をしましたか?

名田:金銭が絡むセンシティブなデータを扱うため、安全性の高い実装ができるように設計方針をドキュメントにまとめて、チーム内でのレビューを通し、実際に実装前に発行するSQLなどに関しての課題を洗い出すことができました。

さらに、クリスマス時期ということもあり商品の購入数が大幅に増えることが見込まれたので、高負荷に耐えられる仕組みを実装しました。クーポンの発行上限に対する総発行数や、利用金額の上限に対する総利用金額といった集計が必要なパラメータに関して、集計に負荷がかかることが予想できました。仮に2000万ユーザーに対して1人1枚クーポンを発行された場合、多い場合で2000万行を集計することになります。こういったパラメータをRedisでキャッシュすることで負荷が高くならない工夫をしました。また、クーポンの発行処理はトランザクション処理されており、DB上の発行実態とRedis上の発行実態で差異が生じてしまわないような工夫も行いました。

他には、クーポンの発行数が多いとユーザーにメッセージが届くまでに時間がかかってしまうため、特定のユーザーグループごとに別々のプロセッサで分散処理をして、負荷対策を行いました。具体的には、個々のユーザーに対して振られた整数のIDの末尾の値によって、処理するワーカーを振り分けることによって処理を分散しています。この方式は処理を「個々のワーカーに割り当てる」という処理が不要となるため、実装の簡略化、また計算資源の節約が実現できました。

個人的にやりがいがあったのは、発行上限や還元確率といった複数の条件がある中で、適切なクーポンを発行する仕組みを実装した部分ですね。クーポンの発行は複数のユーザーから並列に実施される可能性があり、また同時に発行すると上限を超過したクーポンを発行してしまう可能性があります。仮にこの問題を避けるために発行処理を直列に処理させると、性能上の問題があると想定されました。そのため、並列に処理できる方法として、RedisのINCR命令を使用して試しにクーポンを獲得させ、上限を超過しなかった方だけ獲得させるという方法を採用し、おもしろい実装ができたと思っています。

多くのユーザーに利用されるサービスだからこそ、やりがいは大きい

――LINEギフトでさまざまな施策に取り組んでいることが伝わりました。

名田:LINEギフトでは、今後もこうした各種のプロジェクトやキャンペーンを積極的に実施していく予定です。数多くのユーザーに利用されるからこそ、エンジニアとして各種の課題を解決してより良いサービスにしていくことに、非常にやりがいがあります。

――LINEギフトの開発・運用に携わったことで学んだことや、やりがいを感じることはありますか?

大橋:コミュニケーションの大切さを学びました。今回ご紹介したようなプロジェクトでは、社内のメンバーだけではなくベトナムのエンジニアやヤフー株式会社のエンジニアとも情報連携する必要があります。それぞれのステークホルダーは文化も考え方も異なりますから、密にコミュニケーションをとって、お互いを理解することが、プロジェクトを円滑に進めるために重要だと感じました。

また、多くのユーザーが利用しており、LINE社内の期待度も高いサービスの開発・運用に携われるところに大きなやりがいを感じています。LINEギフトでは各種のプロモーション施策を積極的に実施していますし、LINE社内でLINEギフトに携わるメンバーもかなり増えてきました。今後も確実にサービスが成長していくはずです。

私たちはLINEギフトを、単にプレゼントを扱うツールではなく、コミュニケーションサービスだと捉えています。知人や友人同士でギフトを贈り合うというコミュニケーションを、人々の文化として根付かせたい。大きな可能性を持ったサービスに携われることは、エンジニアとしての誇りです。

名田:非常にユーザー数の多いサービスだからこそ、システムのパフォーマンスや信頼性などをしっかり考えた上で設計・開発することが面白いです。どれほど大量のトラフィックが集中しても、止まらないシステムを作る必要があります。そのための方法を日々の業務のなかで考えることは、自分自身の成長に結びついています。

それから、過去のキャリアでは使ったことのなかったElasticsearchや、社内インフラ基盤であるVerdaといった技術スタックを積極的に使えるのも良い点です。自分自身の技術的な引き出しが着実に増えているのを感じます。インタビュー前半でJava化に伴ってアーキテクチャ刷新にも取り組むことを解説しましたが、より良いシステムに改善していくことが、エンジニアとしてすごく楽しみです。

また、自分の身近な人たちやSNSのユーザーがLINEギフトを使ったことを話したり投稿したりしているのを見聞きすると、開発者としてとても嬉しく思います。ユーザーの喜びの声を聞けるサービスというのは、開発していて非常に充実感がありますね。

大橋 : 今日具体的に説明できていないものも含め、事業成長のための課題も技術的な課題もたくさんありますが、成果が感じられるものやエンジニアとして価値のある経験になるものが多いと感じています。ぜひ多くの方にLINEギフトのサービスや開発の仕事に興味を持っていただき、一緒に成果と成長を目指せると嬉しいですね。

採用情報

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