LINEギフトのサーバーサイド開発

栗原由樹氏:ここからはLINEギフトのサーバーサイド開発について紹介いたします。まずは簡単に自己紹介をします。私は栗原由樹と申します。LINEギフトの開発チームのマネージャーをしています。

エンジニア歴は23年くらいで、LINEギフトの開発を担当して、およそ1年くらいになります。LINEにジョインして以降は、主にファミリーサービス、アプリの開発に携わっていまして、2013年にはLINEマンガのサービス立ち上げなども行なっています。

言語的には、もともとPerlのサーバーサイドのエンジニアだったんですが、その後iOSアプリやJavaのサーバーサイドの開発を経験していて、最近ではマネジメントもしています。

趣味はガジェット集めや、最近はモンハンライズをやっています。どうぞよろしくお願いいたします。

ではアジェンダになります。アジェンダはこのようになっています。まずLINEギフトについてご紹介したあとに、実際にどんなものを作っているのか。その後、サーバーサイドエンジニアの仕事の範囲や、どうやって業務を進めているのかなど。

また、LINEギフトが抱える課題などを紹介したあとに、最後に技術スタックや求めている人物像についてお話しようと思います。

LINEの友だちにギフトが贈れるサービス

ではさっそく、LINEギフトのご紹介をします。参加している人の中にも、もしかしたら利用したことがある方もいるかもしれませんが。LINEギフトはLINEの友だちにギフトが贈れるサービスです。

直近では累計ユーザー数が1,500万人を突破していて、LINEユーザーのだいたい6人に1人くらいが利用しているサービスに成長しています。2020年の年間総流通額で言うと、対前年比で250パーセントくらいの伸び率を達成しています。

これはコロナ禍ということもあって、なかなか直接会えない状況でもちょっとしたお礼をしたいというユーザーのニーズに、LINEギフトがマッチしていたのも一因ではないかと考えています。

利用ユーザーは20代から30代の女性が半数くらいで、主に誕生日やバレンタイン、クリスマスなどの季節イベントで利用してもらっています。

(スライドを示し)LINEギフトはこの中の左上のところですね。LINEアプリのところに位置しています。LINEギフトはLINE Platformの1つとして位置付けられていて、LINEアプリ上で動くものとなっています。

導線としてはLINEアプリのトーク画面のメニューであったりとか。あるいは、ホームタブというLINEの一番左のタブのサービス一覧というところにあったり。またはウォレットタブと呼んでいるんですが、一番右のタブからもアクセスできます。

このほかにも、ホーム画面に時折「友だちがもうすぐ誕生日だよ」って出てくるのをご覧になられた方がいるかもしれませんが、そこからもLINEギフトへの導線があったりします。

LIFF Platformの上で動いているサービス

LINEギフトがどんなサービスなのかは、なんとなく理解していただけたかと思いますが、実際に私たちがどんなものを作っているのかについて、もう少し具体的に紹介します。

先ほど紹介したように、LINEギフトはLINEアプリとして提供していますが、関係図で言うと、このようなかたちになります。一番下にLINE Platformがあります。これはトークであったりとか、ソーシャルグラフを管理しているものになります。

その外側に、LINE上のWebアプリを管理するLIFF Platformがあります。LINEギフトはLIFF Platformの上で動いているサービスです。

LINEギフトなんですが、いくつかプロダクトを提供しています。それがこの3つのプロダクトです。一番左がエンドユーザーさん向けの、いわゆるLINEギフトサービスそのものです。

またLINEギフト上で商品を販売しているショップ向けのShop CMSというプロダクトもあります。こちらはAPIも提供していて、ショップの中には自社で在庫管理システムをお持ちの企業もいますので、そことシームレスにシステムをつなぐことも可能になっています。

この2つは、2015年4月にリリースされていて、現在で6年ほど運用しています。このシステムはPerlで書かれていて、のちほど紹介しますが、現在これをJavaに絶賛書き換え中です。

次に右側のeGift Platformですが、こちらはeチケットの発行管理をするためのプラットフォームです。eチケットというのは、例えばスターバックスさんやコンビニなどで、スマホの画面を見せて商品を交換することをやったことがある方もいるかもしれませんが、これはそのeチケットを発行するためのシステムになります。

大きな企業だと、自前でこのシステムを持っていたりするんですが、小規模のショップだと、そのシステムを自前で用意するのはなかなか難しいので、そういったお客さんに対して、気軽にeチケットを発行してLINEギフトで販売できるようにするためのシステムです。

サーバーサイドエンジニアのお仕事

さて、ここまではLINEギフトがどんなもので、どんなプロダクトがあるのかを紹介しましたが、ここでは実際にそういうプロダクトを作る中で、サーバーサイドエンジニアがどんな仕事をしているのかを紹介します。

サーバーサイドエンジニアがまずやらなければならないのが、フロントエンド向けのAPIや、バックエンドの処理の設計、開発になります。またリリースしたシステムやサービスで発生する運用業務も行なっています。そういった設計や運用の中で、関連する社内部署と技術的な調整や仕様のすり合わせなどを行うこともあります。

それ以外にも少しインフラに近いところで、サーバーの環境構築などもしています。LINEの社内には、Verdaと呼ばれるプライベートクラウドがあるので、基本的にはVerdaのWebUIでポチポチすることで、WebサーバーやデータベースなどのVMインスタンスを起動できます。

それに対して必要であれば、例えばAnsibleなどのツールを使って環境構築したりします。またシステムがリリースされたあとのメトリクスなどを監視したり、障害が起こった際にはその対応も行なったりします。

ちなみに障害の検知については、社内に別の監視専門チームがいまして、24時間監視しているので、夜間でもなにか起こったときには、そのチームから連絡をもらって対応することもあります。

こういった仕事の範囲の中で、現在LINEギフトでどのようなことを行なっているのかについて、少し具体例を紹介しようと思います。現在LINEギフトでは季節イベントのキャンペーンの開発であったりとか、新機能、追加機能の開発、あとユーザーからのお問い合わせに対する対応や関連する調査、そしてシステム運用などの定常業務を行なっています。

またこれに加えて最近では、先ほどちょっとお話ししましたが、LINEギフトシステムがPerlで書かれているので、これをJavaに書き換えています。そのほかにも社内や外部連携機能の設計、開発や、eGift Platformの新機能の設計、開発などもしています。

LINEギフトチームの業務フロー

では私たちが実際どういうフローで業務を進めているのかについても説明しようと思います。ちょっとその前にチーム体制がどんな感じになっているのかについて紹介します。

LINEギフトの中のチーム体制は、このようになっています。私が所属するのは、中央にある開発になります。開発の中には、今日お話しているサーバーサイドのほかにも、フロントエンドや技術的な面でプロジェクト管理を行うテクニカルPM、また品質管理を行うQAチームなどがあります。

そして私たちが最もコミュニケーションを行うのが、図の左上にあるLINEギフトの事業を行っている事業部です。この中には多くのチームがいますが、その中でも特に企画チームとコミュニケーションを取りながらプロダクトを作っていきます。

なお、人数規模は多少違いますが、このチーム体制はほかのサービスもだいたい同じになっています。

サーバーサイドのメンバー構成は現在LINEギフトではこのようなかたちになっています。もともとLINEギフトは日本のチームで開発を行なっていましたが、前述のJava化やeGift Platformの開発をするタイミングでベトナムのLINEの子会社のエンジニアにもお手伝いいただいており、加えて協力会社さんも若干名います。

では実際にどのように業務を進めているのかを紹介しようかなと思います。基本的にはこのように左から右に、事業部側の企画チームから企画が立案されて、それが開発に降りてきます。

降りてきた内容を精査して、開発側で詳細設計や見積もり、あと必要に応じて社内の他の部署との調整を行なったあとに、開発を開始します。開発では実装後のプルリクを作成して、お互いコードレビューして、問題なければマージ。そして開発期間の最後にベータ環境でQAを行なって、問題がなければリリースします。

場合によっては、企画段階から開発が入ることもあるので、開発の業務範囲というのはかなり前段から、リリースとそのあとの運用まで、幅広くなっています。

LINEギフトの課題

ここまでLINEギフトの開発について紹介しましたが、実際LINEギフトではどんな課題があるのかをここで紹介しようと思います。

まず、やりたいことが多いというところです。先ほど最初のほうでお話ししましたが、LINEギフトは事業規模が急速に拡大していて、それに伴ってアクセス数の増加とか、新規開発案件も増えており、加えてJava化や運用保守業務というのを行うのがなかなか困難になってきています。

あと2015年リリースという話をしましたが、6年くらい経っているシステムなので、アーキテクチャがどうしても古くなっていることは否めないかなと思っています。なのでアーキテクチャを刷新したり、新しい技術を導入したり、またSREなどで安定稼働と運用改善などを行いたいと思っていますが、まだまだ人が足りない状態です。

またそれらのことを行いたいとは考えてはいるものの、そのノウハウや経験を持った人がまだまだ足りないというのも課題の1つになっています。

ここで1つだけ、どんな課題があるのかという例を紹介しようと思います。LINEギフトは、LINE公式アカウントからキャンペーン告知を行ったりします。行うんですが、そのキャンペーンがお得なキャンペーンだった場合は、一時的にアクセスが増えて、オーダー部分の負荷が増加します。

在庫引当が間に合わずにDB負荷が増加して、場合によってはDBが耐えられずにFailoverしたりすることもございます。これは原因としてはモノリシックな古いアーキテクチャが問題で。

そのへんを解決するためには例えばマイクロサービス化したりとかして、オーダー部分を切り離して処理を分散させたりしたいとは考えているんですけれども、なかなかそこまで手が回っていないという感じになっています。

また常に多くのオーダーがあるわけではないので、リソースを効率的に利用できるようにもしたいなと考えています。アクセス数や規模数もそこそこあるサービスにはなっているので、このへんをどうすればよいかを考えるのはチャレンジングであり、やりがいがあることかなとは考えています。

LINEギフトの技術スタック

そろそろこのプレゼンも最後に近づいていますが、ここでLINEギフトの技術スタックについて紹介します。このような感じになっています。

使用言語としてはJavaとPerlになっていますが、今はJava化しているところなので、後々はPerlはなくなっていくのかなと思っています。フレームワークはJavaはSpring Boot、PerlはAmon2を使用しています。

データベースはMySQL、Redis、Memcached、あと検索でElasticsearchというのを使っています。メッセージキューですとKafkaや、これはPerlのものなんですけれども、TheSchwartzというのを使っています。

そのほかにNginxとか、Dockerとか、これはCIですがdroneであったり、プライベートクラウドのVerda、あとGitHub Enterpriseとか、IDEだとIntelliJ Ideaなどを使っています。

あとコミュニケーションですが、コミュニケーションに使っているツールはここに書いてあるようにSlackとかZoom、あとLINE、LINE WORKS。タスクマネジメントはJIRA、ドキュメントはConfluenceや、ストレージとしてBOXを使っています。

少し前にベトナムのメンバーもいるという話をしまして、使用しているコミュニケーション言語は基本的には日本語で問題はないんですが、一部のドキュメントやコミットログとか、あとSlackでの会話では、たまに英語を使う場合もあります。

ただ英語のテクニカルな文章とかがある程度読めれば、あとは翻訳ツールなどを使用することで基本的には問題なくコミュニケーションはできると思います。

LINEギフトで求める人物像

最後に求める人物像について紹介したいと思っています。最初は、まさに今拡大しているサービスなので、そこに携わりたいという方がいたらぜひお願いしたいなと思っています。

あと、新しい技術が好きで仕方ない方や、アーキテクチャの設計や構築、最適化を考えるのが好きな方。あとJavaがもし書ければそのスキルを活かしたい方や、Javaが書けなくてもこれからやっていきたいと思っている方。さらにPerlをもし理解しているとさらに良いかなと思います。

あとは分散システムやシステムの改善、SRE、コンテナ化も含めてそのへんのワードを聞くとテンションが上がる方はぜひご応募いただけたらなと思っています。

LINEギフトについては以上になります。ご清聴ありがとうございました。