【Team & Project】LINE GAMEの基盤プラットフォームのインフラ・サーバー開発を担当しているチームを紹介します

LINEの開発組織のそれぞれの部門やプロジェクトについて、その役割や体制、技術スタック、今後の課題やロードマップなどを具体的に紹介していく「Team & Project」シリーズ。今回は、LINE GAMEの基盤プラットフォームでDockerを活用したクラウドプラットフォームのオープン化や統合開発環境システムのインフラの開発を担当するチームとサーバー開発を担当するチームを紹介します。開発チームのYoulyu Zhangと福地 翼に話を聞きました。

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

Zhang :2018年6月から3ヶ月内定者アルバイトとしてLINEキャリアのAPIサーバーエンジニアとして働いた後、同年10月にLINE GAME部門に新卒で入社しました。現在はインフラプラットフォーム開発チームで働いています。 

福地:2018年4月に新卒として入社しました。去年まではLINE GAMEのクライアントエンジニアとしてUnity向けのライブラリー開発をしていましたが、今年からサーバーエンジニアとしてゲームサーバー開発チームで仕事をしています。

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

Zhang : 私はアメリカで大学を卒業して就職先を探していたのですが、何を基準に選べば良いのかとても迷っていました。当時、自分なりに「ホワイトそうな大企業を選ぶ」と「日本でエンジニアとして働く」という基準を作って企業を探していたのを今でも鮮明に覚えています。また日本の企業のことはほとんど知らなかったのですが、 Boston Career Forumという採用イベントでLINEのことを知ることができました。 
LINEは最終的に内定を出してくれた数社の中の一つでした。そして最終的にLINEを選んだ理由は、入社時のプログラミング問題が解けて面白かったこと、若い会社なので新しい技術を使ったり、様々なチャレンジが出来そうだと思ったからです。 

福地 : 就職活動を始めた当初は、ゲーム業界に絞って就職先の企業を探していました。色々と調べていくうちに、ゲーム自体を作る以外にゲームのプラットフォームを開発して、ゲームを作っている会社にプラットフォームを提供する分野の仕事があることを知り、大学で学んだことが活かせると思い興味を持ちました。探してみるとあまりその分野での新卒募集は多くなく、数少ない候補の中にLINE GAMEがありました。LINEにはLINE ポコポコやLINE バブル2のような有名で多数のユーザーを抱えるゲームが沢山あるので、それらのゲームを支えている基盤プラットフォーム開発にやりがいを持って仕事ができるかと思い選びました。

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

Zhang :私は新卒で入社したので、最初は働くことのイメージが持てませんでしたが、徐々に仕事に慣れていく中で、自分のやりたいことが出来る環境であることに面白いと感じるようになりました。自分の作りたいことや、やりたい機能を全部使って開発をすることが出来る、その自由度もやりがいの一つですし、自分が開発したサービスを多くのユーザーに使ってもらえることもやりがいだと感じています。

福地 :サーバーエンジニアとして日が浅いので、任される仕事の多くが初めての経験で、仕事をする過程で新しい知識が身に付いていくことがとても楽しいです。 
自分がやりたいと思った時に意思表示すればチャレンジする機会をもらえます。以前クライアントエンジニアとして仕事をしていた時に、サーバーエンジニアも経験してみたいと希望して、すぐにサーバーエンジニアとしての仕事を与えてもらいました。そのような柔軟さがLINEの組織の魅力だと思いまし、自分自身のやりがいに繋がっています。 

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

Zhang:私たちインフラプラットフォーム開発チームの役割は、ゲーム部門のインフラを維持改良することです。具体的には、Yorisaという自社開発のContainer Orchestration Engineを維持更新すること、Monitoring、Loggingシステムを作成構築すること、ロードバランサーやDNSの維持、 Kubernetesなどのツールを取り込んでサポートすること等々が私たちのチームの仕事です。 
チームメンバーは8人いて、全員がフルスタックエンジニアです。一人一人得意不得意はありますが、きっちり仕事の分野を分けているわけではないので、仕事はその時その時に振り分けています。
また、最近、私たちのチームは Kubernetesへの移行を検討しているのですが、社内開発チームの移行やサポートなども行なっています。 

Yorisaのアーキテクチャー図 
Yorisaは、コンテナオーケストレーションシステムを提供するとともに、LINE GAME PLATFORMのコンポーネントへのグローバルネットワークアクセスを提供します。 

福地:ゲームサーバー開発は日本と韓国で大きく分けて3つの開発グループに分かれています。 

サーバー1(日本) 
日本にある開発グループで、約5名でランキングや掲示板、ゲーム内チャットなど、ゲーム内で実際に利用される機能開発を主に開発しています。 

  • 機能一覧 
    • PION Community(GameProfile, GameGraph, Leaderboard, Guild, Chat, Board, ReviewBoard, Interplay, etc…) 
    • Recommendation Friends 
    • Data Engineering / 溜まったログデータをうまく活用して、新しいサービスに繋げる取り組み
      • support GameUniversity at Taiwan 
        • aggregation user action(login, billing, etc…) from common log (GAMEのAPIから送られてくるログ)
      • GamePlatformCommonLog 
      • Personalized Statistics
    • GameCategory – game tab 
    • BridgePage – game landing page 

サーバー2(日本) 
日本にある開発グループで、約6名で、ゲームの中では使わない、ゲームを運用する上で必要になる機能を開発しています。 

  • 機能一覧 
    • 認証や課金、LINE本体との連動といったアプリ運営で必要になる機能開発 
    • Auth, Billing, SocialGraph, Data Engineering, etc… 

サーバー(韓国) 
韓国にある開発グループで、約10名で、広告やユーザーの追跡などのプロモーションに関する機能開発をしています。 

  • 機能一覧 
    • Promotion, Ad Marketing Platform, POD, Trackit, 
    • Data Engineering, etc… 

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

Zhang :私たちのチームメンバーは、全員で8名で、国籍は中国5名、日本2名、フランス1名といったメンバー構成です。主にコミュニケーションは英語で行っていますが、日本語もサブとして使うことがあります。先ほど説明した Yorisaという自社開発のContainer Orchestration Engineですが、チームメンバーが2013年12月にDockerがリリースされた後、すぐに Dockerを使って開発をしたそうです。その当時はまだKubernetesがなかったので、「Dockerを使ってコスト削減をしたいなら自分で作るしかない」といって開発を進めた行動力は素晴らしいと思います。 

福地 : GAMEプラットフォーム開発組織の中でも日本や韓国で働いている方を含めると、エンジニアが一番多いのが私たちのチームです。コミュニケーションは基本、英語を使っています。韓国の方は日本語が上手なので、日本語でコミュニケーションを取ることもあります。クライアントチームからサーバーエンジニアとして異動した時も、すぐに仕事ができるようにチーム編成を調整してくれたり、サポートしてくれたりマネージャーを含めチームメンバーはとても親切で働きやすい環境です。 

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

インフラサーバー
LanguageKotlin, Java, Golang, ClojureJava, kotlin
DatabaseMysql, Redis, Hazelcast, Elasticsearch, RIAKRedis, Hbase
Others  – Docker, Kubernetes 
– Spring boot, Golang echo 
– Chef, Ansible 
– Drone, Jenkins 
– Docker, Kubernetes, Jenkins 
– Spring boot 
– Prometheus, Nginx, 
– JavaScript(React, Vue) 
– Elastic stack, Kafka 

―― 今のチーム課題と課題解決に向けた取り組みについて教えてください。 

Zhang :昔はそれぞれのチームが個別に作っていたモニタリングシステムですが、それらの細分化されたシステムを統合することが大きな課題です。 
またインフラのマネジメントコストを下げ、運用を簡素化し、便宜性と信頼性を上げること、実際のサーバーのコストを下げることも課題の一つです。 
これらの課題のために、具体的に4つの取り組みを進めています。 

  • モニタリングシステムの統合と簡単化、信頼性を上げる 
    • モニタリングツールの開発 (Slack bot、Alert dashboardなど)。 
    • PrometheusやGrafanaの統合とそのユーザ管理。
  • インフラのマネジメントコストダウン 
    • コンテナ化のサポート。 
    • Kubernetesを使うためのセットアップとサポート。

モニタリングツールの開発については、チームメンバーがSlack botを開発してOn Call Dutyを進めています。On Call Dutyとは、アラート対応担当者が勤務時間外でも発生したアラート見てより簡単に対応できるようにする取り組みです。業務対応した時間はちゃんと手当も出ますので、より正しい勤怠ができています。Slack botを開発することで担当者は、アラートを受け取って、ワンクリックでミュートにしたり、担当者に連絡など、より簡単に対応することができます。このようにアラートダッシュボードを運用することで、アラートが出たヒストリーや、アラートが飛んだ時のラベルなどを管理することができます。 
そして、インフラのマネジメントコストダウンについては、実際のサーバーのコストダウンのためにコンテナ化を対応しています。私たちは Kubernetesの導入も進めているのですが、ゲーム開発者へのサポート以外にも、社内の開発チーム全体に移行に必要なセットアップやサポートもしています。 

福地 :私たちチームの課題は大きく分けて3つあります。一つ目は「 サービスが重複しているものがある」ということです。もともとあったサービスの機能を踏襲しつつ、新しい機能の追加や内部構成の変更をしたものが新規のサービスとしてリリースされたりもしますが、リリースした後も、前のサービスはそのまま残っています。そのため同じ機能を提供できるサービスが重複して存在している状況があります。 

二つ目は「使われていないAPIなどを整理する」ことです。こちらもサービスの重複と似ているのですが、ゲームを開発している人からの要望に合わせてAPIを新しく追加しているので、APIの量がどんどん増えてきています。ゲームのクローズにより使われなくなったAPIも出ているので、それらを整理する必要があります。 

三つ目は「 APIの汎用性が高すぎて、使う際の敷居が高い」ということです。APIでは色々なことをできるように作っているのですが、色々なことができる反面、使う側がAPIについて調査したり検討するコストが高くなっています。APIを使う敷居が高いというのが今チームが持っている問題です。 

これらの課題を解決するために、 API simplificationというAPIを私たちは開発しました。これは、ユーザーの一つのアクションをイベントとして定めて、そのイベントが発生したら、事前に連携をさせてあったイベントを複数発生することができる仕組みです。開発者はこのAPI を使うことで、一つのイベントが発生する毎に、自動で関連する3〜4個の目を一気に更新することができるので、他のAPIを使う必要がありません。 

また、APIの数が多い課題について、私たちは30日間APIの利用頻度を毎回集計しています。現在、約100のAPIがありますが、実際半数は1ヶ月に1回もコールされていないことが分かりました。これらの使われていないAPIを管理者権限に必ず必要などうか確認しながら、企画者を含めて削除プロセスを設けました。この削除プロセスにより全体のAPIの数を減らすことができる予定です。 

  • API simplification により、APIの窓口を一つにする
    • Event Drivenを採用 
    • API利用頻度によって削除プロセスを設ける  
  • 古いサービスのfadeout 
    • より汎用性のあるサービスにデータを移行 
    • 古いサービスを削除

LINE GAMEPLATFORMは誕生して約9年になります。昔のサービスも今までずっと運営してきました。そのため管理するAPIもとても多くなっています。それらを徐々に最新のものにしていき、データのマイグレーションを進め、サービスを移行するための努力をして、少しずつサービスやAPIの整理を進めるという動きをしています。 

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

Zhang :私たちは今、モニタリングシステムの統合を進めていますが、Yorisaで使っている技術のClojureやRIAKは、そこまでポピュラーな技術ではありません。 
そこで、Yorisaのメンテナンスしつつ、Kubernetesに移行するプランを立てています。今のゲーム開発基盤プラットフォームのインフラのコアな技術、Yorisaと Kubernetesの開発に力を入れ、さらにより良いサービスにすることが私たちの大きな目標です。 

福地 :データエンジニアリングと関係してくるのですが、私たちはユーザーの行動ログなど、多くデータを持っています。しかし、あまりこれらのデータを活用してサービス化できていないという課題があります。このようなログデータをサービスとして使うときの活用方法を考え、これからのサービスを作っていくというのが、今後のロードマップです。 
実際に取り組んでいるプロジェクトではないですが、例えば「ログからユーザーを絞った広告を出す仕組みを用意する」「個人のログを統計としてユーザーが確認できるようなサービスを提供する」といった形で、LINE GAMEPLATFORMとしてより多くデータを活用して、よりゲーム開発者に魅力的なサービスを提供することを目指しています。 

―― 最後に、 LINE GAMEの基盤プラットフォームのインフラ・サーバー開発チームに興味を持ってくれた人にメッセージをお願いします。 

Zhang :自分たちのチームは主にゲーム開発者のサポートなので、技術の自由度が高いと思います。Container OrchestrationとDevOpsに興味を持っていて、コードもたまに書きたい方が楽しく働けるところだと思います。ネットワークやLinuxに関する知識だけでなく、仕事で様々なツールを使うことになりますので、それらに対しても詳しくなります。 

福地 :ゲーム開発者が実際に利用するAPIサービスを製品として提供しているため「開発者の視点からみて使いやすいAPIを考える」や「開発者のレベルに合わせて同じ機能でもサービスの提供方法を変える」といったプラットフォーム開発ならではの視点を持って開発することで開発の視野が広がると思います。 



ゲームプラットフォーム開発室ではメンバーを募集しています。

サーバーサイドエンジニア / LINE Game Platform