LINE Engineer Insights vol.2 「新卒入社のエンジニアに聞く、LINEの新卒研修とゲームプラットフォーム開発」

LINEで働くエンジニアに色々と話を聞いていく「LINE Engineer Insights」の第2弾です。当コーナーはインタビュアーにLINEで働くエンジニア @tokuhirom を迎え、エンジニア同士でざっくばらんにお話を伺っていくというものです。今回も、LINEのエンジニアは一体どんな人達なのか、その内面に迫っていきたいと思います。
第2弾は、2016年度の新卒入社で現在は 開発2センター ゲームプラットフォーム開発室所属の加賀谷に、新卒研修やプラットフォーム開発などについて聞いてきました。

LINEを志望した理由

―― tokuhirom
今日は宜しくお願いします。vol.1をご覧いただいていると思うので「LINE Engineer Insights」の雰囲気はわかっていただいてると思いますが、なぜ今回出ることになったか聞いていますか?

―― 加賀谷
宜しくお願いします。LINE Engineering Blogのアドベントカレンダー企画お疲れ様という飲み会があったのですが「2回目は加賀谷くんで」という話が出ていて、気付いたら本当に出ることになっていました。

―― tokuhirom
飲み会で「やるぞ!」って言うことは大体本当にそうなりますね(笑) 入社してどのくらいですか?なぜ開発2センターを志望したのかもあわせて教えてください。

―― 加賀谷
2016年度の新卒入社なので、11ヶ月目です。配属希望は自分からは出していなくて、面談があって希望を聞かれるんですが自分はちゃんと答えられなくて「なんでもやります」といったら開発2センター ゲームプラットフォーム開発室に配属されたという流れです。

―― tokuhirom
「すごくゲーム開発をやりたい!」というわけではなかった?なぜ LINE を志望したのかも気になります。

―― 加賀谷
はい、スマホゲームあまりやらないですし…。すいません。志望した理由ですが、小中学生の頃から好きだったのでインターネットの会社に入りたいと思っていたからです。学生時代は研究もインターンも、科学技術計算系の一人でひたすらコーディングするプログラミングしかして来なかったのですが、チーム開発を経験したかったのと、コンシューマ向けのソフトウェアのコードを書きたいと思ってWEB系を志望しました。某社さんとか受けました。

―― tokuhirom
奇遇ですね、私もそこ受けました。ところで、ユーザー向けをやりたいというわりにビジネス向けの開発がメインの部署じゃないですか?

―― 加賀谷
そうですね、ゲームプラットフォーム開発室はLINEゲームの開発ベンダー向けのクライアントSDKやサーバサイドAPIの提供、開発サポートなどがメインな部署です。実際に働き始めてチーム開発が出来ていますし、プラットフォーム開発をする部署なので、1つのサービスをやっている部署より色々な技術領域に触れられるという意味では新卒で配属される部署としては良かったかなと思います。

LINEの新卒研修で作ったのはLINEだった?

―― tokuhirom
入社した頃の話をちょっと聞きたいんですけど、新卒の研修ってどうだったんですか?

―― 加賀谷
最初に3日くらいかけて総合職と技術職と全員で5チームに分かれて「LINE Business Connect で何か作りましょう」というハッカソンがありました。企画とか営業と一緒にプランを考えて、API使ってモックを作ったりしましたね。3日なのでホントに少し動く程度のものですけど。

その後、技術職だけで「1ヶ月でLINEのクローンを作りましょう」というお題をやりました。サーバもクライアントもUIも含めて全部、7人いたんですけど3人と4人のチームに分かれて。まだ当時は社内ツールのアカウントをもらっていなかったので Redmine を自分たちで入れてチケットを切って「プルリクエストやコードコンベンション等のポリシーをチームで決めてから実装始めなさい」みたいな。「設計をしっかりしてから入りましょう」という形だったので、HTTP禁止で TCP を使って自分でプロトコルを設計するところから始めなさいみたいな。そういう研修でしたね。

1つ前の世代の先輩たちは技術的な座学研修があったらしいんですが、自分たちの場合は座学はゼロで「はいどうぞ作ってください」というかんじだったので Java をさわったことがなかったから僕はすごく大変でした。Python とか C++ で、メイン関数が大きいコードを書くというのしかやってなかったので、オブジェクト指向みたいなものは同期から学んだところが結構あります。

講師の方もいたんですけどそんなに口を出してくるかんじでもなくて完全にオブザーバーくらいの立ち位置で、僕らはただひたすらにLINEクローンを作るという。4月入社ですが5月中旬が最終日で、皆で発表して終わりという形でした。

―― tokuhirom
そのLINEクローンは完成までいったんですか?

―― 加賀谷
一応そうですね、今も社内の GitHub Enterprise に両チームの分が残ってるはずです。

新卒同士、どういうコミュニケーションをとっている?

―― tokuhirom
新卒は仲良いですか?

―― 加賀谷
いいですね。同期で作っているLINEグループがあるんですが、毎日なにかしら話していたり飲みに行くことも多いです。

―― tokuhirom
1つ上の世代は「エンジニア以外の同期グループ」があってエンジニアがハブられてるというのを聞いたんですけど加賀谷くんの世代は大丈夫ですか。

―― 加賀谷
そういうグループがあるとは思うんですけど… 企画の子たちとも仲が悪いわけではないので、結構一緒に飲んだりしますし。仲がいいとは…思ってますけど…、どうですかね。今年の同期はエンジニアでもコミュニケーション能力が高い同期が多いのでうまく話せてると思います。

―― tokuhirom
ところで、なんでパソコンにLINEのステッカーを貼ってないんですか?

―― 加賀谷
え!あ、これは、社員ってLINEのステッカーをもらう機会ってそんなにないじゃないですか…?

―― tokuhirom
DevDayでも配ってたし、CTOがたまに色々配ったりしてるでしょう(笑)

―― 加賀谷
すぐ貼ります!!

―― tokuhirom
会社のパソコンはシール剥がして返却する必要ありますけどね!

趣味で続けている画像認識の研究

―― tokuhirom
加賀谷さん自身で、外部の例えば Github でソフトウェアを公開とかされていたりするんですか?

―― 加賀谷
今のところはしたことがなくて、外部の勉強会などには結構参加しています。ほんとに業務に関係ないんですけど、昔からやっている研究が画像認識とかだったんですね。特に食事の画像認識をやっていたので、関東コンピュータービジョン勉強会というのに参加していて、2月にもLT大会があったので「LINE BOTに料理の写真を送るとそのレシピを教えてくれる」みたいなのを作って発表するというのはありましたね。
外部で発表するということは無くはないという状態なんですけど、今のところ会社の業務に関係したことはあまりやってないというか。
今度開催される社内の「機械学習」をテーマにした勉強会も、LTしたいって口が滑っちゃって言ったんですけど。そこでも話したいなと思ってますが、あれLTの応募少ないですよね?

―― tokuhirom
そうですね、あれは機械学習ガチ勢が最初にトークしたりするので軽めなやつが集まりにくい状態ですね(笑) 「ちょっと Google とか Amazon の API 触ってみました」みたいなノリでやるとすごいDISられそうで怖いっていうイメージありそうですね。すぎゃーんとかがアイドルの話でもするのかなと思ったら「その日は遠征してるから無理」って言ってましたね。
編集部注:すぎゃーんさんは Data Labs 所属のエンジニア。最近は TensorFlow によるアイドルの顔画像生成などで有名。年間200以上の現場に駆けつけるほど熱心にアイドルを応援していることでも有名。
後日おこなわれた社内勉強会で発表する加賀谷さん

―― 加賀谷
昔、授業で「ディープラーニングでAKB48の認識」ってやったことあるんですよ。くだらないことに対して技術を使って論文を書けっていう授業があって、その時は精度が20%くらいでしたね。全然ダメでした。他にも(検閲されました) 個人的にはそういう勉強も続けたいなと思っていて、配属のときも「 Data Labs に興味あります」とは言ったんですけど、興味がある程度で入れる場所ではなかったです。
編集部注:Data Labs は、LINEのサービスをデータを使って横断的にサポートする組織。大量なデータを扱うためのインフラの構築のみならず、機械学習や人工知能といった先進技術の開発も行っている部署。

―― tokuhirom
「絶対 Data Labs じゃないとイヤだ!」って言わないと配属されないんじゃないですかね、わからないけど(笑) 普段はどんなかんじで過ごしてるんですか?

―― 加賀谷
新卒社員は原則として1年間は定時があるので、エンジニアだと普段は10時に来て18時半まで働くかんじです。18時半で帰ることはそんなにないですけど、もうちょっと会社にいますね。ゲームプラットフォーム開発室だと朝遅い人はあまりいなくて、11時くらいにはほとんど全員いますね。

開発2センター ゲームプラットフォーム開発室は何をしているところ?

―― tokuhirom
加賀谷さんが所属している ゲームプラットフォーム開発室って、実際にやり取りしているゲーム開発会社さん以外に仕事の内容がなかなか伝わっていないところも多いと思っていて。実際どういうものを今やっているんですか?

―― 加賀谷
僕のチームで担当しているのは、今のLINEゲームのプラットフォームで利用されている SDK が Trident というバージョンなんですが、そのうちのいくつかのコンポーネントの運用や機能開発みたいなことをやっているのが1つ。いわゆるソーシャルグラフ的な機能や認証とかもやっています。認証はLINEだけではなく Google や Facebook の認証にも対応しています。
もう1つは、いま新しく作ろうとしているコアなゲーム寄りの機能をやろうとしているんですけど。例えば、ゲーム内チャットとかゲーム内掲示板みたいな機能を提供しようとサーバ側の担当として開発を進めています。

―― tokuhirom
チームはサーバサイドの人がメインなんですか?

―― 加賀谷
綺麗に分かれているんですが、私が所属している日本のプラットフォーム開発チームはメインでやっているサーバサイドエンジニアは3人しかいないので色々なコンポーネントについて1人が複数もっていたりします。他のチームでいうと、クライアントSDKを作っているチームもあって、日本は7〜8人くらい。あとはプラットフォームPMという、プラットフォーム側の技術コンサルティングみたいなことを外部のゲーム開発会社に対して行うのが2人います。あとは Hadoopエンジニアが2人いて、 HBase と Hadoop などミドルウェアの管理と運営をしています。
サーバ開発は韓国側にもメンバーがいるのでそこのチームと一緒にやっていることが多いですね。2月からはゲームクラウドチームというのが新たに出来て、独自の IaaS みたいなのをやっているようなイメージです。ゲームは全て Docker にしているんですが、その辺のコーディネーションとかを全部やっているチームです。

―― tokuhirom
プラットフォーム開発チームは3人しかサーバサイドがいないとなると、コードレビューとかはどうやっているんですか?

―― 加賀谷
エンジニア全員が関わっているものは3人でレビューをお互いにしています。あとは、部署のマネージャーがどのプロジェクトにもレビュアーとして入っているんですが、こっちから mention しなくてもいつのまにかマネージャーのコメントが入っていたりということはよくあります。

―― tokuhirom
こわいですね(笑)
何をしている様子かはわかりませんが執務エリアでの一枚

―― 加賀谷
そうですね(笑) あとは韓国側のメンバーからレビューを受けることもあります。沢山の人がレビューするようなかんじではないですね。たいてい1つのプルリクエストに対して1人か2人でレビューしていいて Merge も自分たちでやります。

―― tokuhirom
ゲームプラットフォーム開発室は技術的なスタックはどういうかんじですか?今は Java がメインですか。

―― 加賀谷
そうですね、クラウドチームは色々な言語を使っていると思うんですけど僕らは基本的に Java ですね。それにプラスしてテストは全部 Groovy でやっています。ここらへんは以前 Server Side Engineer Technical Talks で同僚が話していましたね。
編集部注:3ヶ月に一度くらいの頻度でLINEのサーバーサイドに関わるエンジニアが集まり、様々なトピックをトークし合う社内イベントを開催しています。

―― tokuhirom
テストが全て Groovy って結構珍しいですね。

―― 加賀谷
最近作り始めたものは大体 Spock っていうフレームワークを導入しています。

―― tokuhirom
Spock 使いやすいですか?

―― 加賀谷
僕は結構使いやすいと思っています。データドリブンなテストとか書きやすいです。

―― tokuhirom
たしかにデータドリブン書きやすいけど、IDE のサポートとか微妙になったりしませんか?

―― 加賀谷
なりますね(笑) とはいえ簡単に書けるというメリットが勝つかなと思います。モックとかスタブも Spock に付いているので細かい JSON 用のバリデーションライブラリとか以外は何もつける必要がないというのもいいですし、テストライブラリとしては1つで完結していて短く書けるかなと思います。 Groovy のプロパティ記法もいいですね。

―― tokuhirom
開発3センターでも、何度か使おうとして挫折していて。IDE のサポートが機能的に要件を満たせないじゃないかと言われて断念するみたいな人は結構いますね。フレームワークとかは何を使ってるんですか?

―― 加賀谷
Webフレームワークは基本的に Spring Boot です。他の開発センターも使っているらしいですよね。僕は便利すぎて生の Servlet とかをさわったことがないので Spring Boot って凄いなって思います。ちょっと深いこととか他のものに触る時に、いかに Spring Boot が簡単に wrap してくれているのかということに気づく毎日ですね。

―― tokuhirom
Spring Boot のソースコードも追ってみたりとかします?わりと中を見なくても使えるってかんじですか。

―― 加賀谷
Boot の機能はそうだと思いますね。core の部分については、 Spring にアノテーション貼るだけで関数を非同期に実行してくれる機能があると思うんですけど(@Asyncアノテーション)、うまく動いてないところがあったのでコードを見たり海外の Blog を見たりして「なんで動かないんだ」というのを探ったりはしましたね。基本的にドキュメント通りに作っているとそんなに問題がないのであまり Spring そのものの深いところに触れているかんじはしないんですけど、普段の業務では使えているかなと思います。

LINEの中で開発センター間の違いはある?

―― tokuhirom
社内の他のチームの人と話して、自分のチームが「他のセンターと違うな」と思うところってありますか?

―― 加賀谷
技術的にはだいたい違う気がしているんですけど(笑) ゲームプラットフォーム開発室ではNシリーズをよく使うんですけど、他のセンターのエンジニアと話しているとお互いにわからない部分が多いなと思うことはあります。内製ツールの技術的なギャップはあるような気はしています。
編集部注:LINE では大規模な開発をしているため、既存のツールでは社内の要求を完全に満たすものがないことが多いため内製することがあります。特に NAVER で開発されたものは N を prefix としており、これらを総称して『Nシリーズ』と呼ぶ場合があります。

あとは、多国籍というのは特徴的だなと思います。出張が比較的多いのもそうですかね。QAチームが中国の大連にいるので、出張で行くこともありますし。

―― tokuhirom
QAチームに会いに行くというのが他のセンターからだと珍しいかなと思いますね。開発3センターだと福岡でほとんどQAをやっていますけど、ほぼ行くことはないのでなんで行くのかな?っていう素朴な疑問があります。

―― 加賀谷
ゲームプラットフォームの会議は週に1度あるんですけど、それは企画チームと開発チームとQAチームみんなで集まって日本・韓国・中国の3拠点でテレビ会議なんですね。その会議の時に話すことはもちろんあるんですけど、すごくメタな「こういう方向性にしたい」とか「こういうプロダクトです」って紹介したりとか、コアな機能について説明することがテレビ会議だと難しい場合もあって、特に日本と中国でいうと、日本語が韓国語に翻訳されて韓国語が中国語に翻訳されるのでちょっと大変なんですね。

そういうのもあって、中国にいる通訳担当の方は日中韓いける方が多いので、QAチームが大連から日本に出張に来る時は通訳さんも一緒に来てもらいますし我々が行く時も同席してもらっているんです。テレビ会議だとそういう言語的な面もあってなかなか伝わらないこともあるので、直接方向性を共有したいとか技術的なある程度の説明をするときも対面で話すことがあります。あとは仲良くしましょうというのもあるんですけど。他の部署はQAチームのところに出張で行かないですか?

―― tokuhirom
あんまり聞かないですね。開発3センターだと、中にQA室みたいなチームがあるのでその人がリードになって福岡のメンバーの取りまとめをするっていうかんじになってますね。あとは、福岡なんで日本語が通じるってのがありますかね。

技術的な課題

―― tokuhirom
普段の業務をやっていて、技術的に困ったけど解決したというのは何かありますか?

―― 加賀谷
今新しい機能として、一定のタイムウィンドウの中でゲーム内のアイテムに対して複数の要素から重み付きスコアを計算して人気ランキングを作るようなものを作ろうとしていて、Time series database を導入しようということになったんですね。最初は OpenTSDB というデータベースを使おうと思っていたんです。うちの部署が一番よく使っているストレージが HBase で、 OpenTSDB はバックエンドが HBase だったので運用が多分楽だなと思ったのがその理由です。

すごく細かいんですけど、例えばタイムウィンドウを2時間に指定していて結果を更新するインターバルを5分に設定したとき、「午前2時のタイミングでは午前0時から2時までの間のスコアランキングが出ていて、2時5分になったら0時5分から2時5分までのスコアランキングを出したい」というように、5分ずつ結果を集計してキャッシュしてユーザーに届けたいんですが OpenTSDB の集計機能はタイムウィンドウが決まっちゃっていたんですね。例えば1時間だったら0時から1時、1時から2時といった形で epoch time から格子状に切った時間でしかアグリゲーションが出来なかったんです。それが発覚した時点で OpenTSDB のメンテナンスがそこまで活発ではない印象もあったのもあって、一旦 OpenTSDB の利用をやめることにしたんです。

最初はどれを選ぶべきかわからない状態でサーベイしていたんですが、他に候補として出ていたのが InfluxDB とか Prometheus とかどうかなっていうのがあったんですけど、InfluxDB はクラスタリングすると有料になるという点があったりエンタープライズ版じゃないと使いにくそうだというものもいくつかあったし、基本的に Time series database ってログを時系列のグラフで見たいっていうユースケースが多いと思うので、可視化などの機能が多く少し fat になっていて今回の目的には則さないかなというものが多かったんですね。そして結局はシンプルなんですけど Elasticsearch を使うことにしました。

Elasticsearch は他のチームでログ収集の目的でよく使っていますしTSDB的な使い方もしていて、あんまり新しいことは出来ないかもしれないけど技術的な蓄積もあるかなというところと、運用に関しては Hadoopチームが Elasticserch に関してはもう運用をやってくれていたんでやってみようということになりました。自由度も高いしやりたいことも出来るだろうということで。
この置き換えについては実は先週行ったばかりでして。

―― tokuhirom
めっちゃ最近の話じゃないですか(笑) Elasticsearch でいいんだったら Elasticsearch で十分ですもんね。

―― 加賀谷
そうなんです。結局サーベイしたんですけど、ヨーロッパの公的な機関のTSDB を OpenTSDB と InfluxDB と Elasticsearch でパフォーマンス比較したみた時にどれがよいかという資料を読んだんですけど、今のところバージョンが新しいのもあって Elasticsearch が勝ってたんですね。なんですけど、最初の時は「やっぱり新しいの使いたいよね」という気持ちがあったりしてやってみたんですけど、爆死でしたね。

とても便利な社内のストレージ管理ツール

―― tokuhirom
話を聞いていると、 HBase だと運用が楽っていうのがなんかすごいなと思って。私がいる部署なんかだと基本的に HBase は「メインでは」使わないというか MySQL を主に使っているので温度感が違うなあと。

―― 加賀谷
あんまり MySQL は使わないかんじになっていますね。先輩の長谷部さんという方が作った HBase と Redis を組み合わせた wrapperライブラリみたいなのがあってそれをちょこちょこ改修しながら使ってますね。Redis をメインに使って HBase をバックアップにするモードとか、 HBase をメインにして Redis をキャッシュに使うとか、HBase だけのモードとか色々切り替えられるようになっていて、あたかも1つのストレージであるかのように使えるっていうライブラリで。これがすごくよく出来ているので開発として使う側は問題がなくて、運用に関してはほぼ専門でやってくれるチームがありますし、監視ツールもすごくよいものがありますし。

ただちょっと問題なのは、プロダクトによっては、利用するバージョンが古いので、Java用のクライアントライブラリのバージョンも古くなってしまい、他の Java のライブラリとコンフリクトが多いことですかね。 Cloudera の管理ツールが優秀なので運用に関しては昔ほど大変ではないのではないかと僕は感じています。

―― tokuhirom
専門でやってくれている人がいればいいですよね。

―― 加賀谷
ちょっと属人的になっているかなというところはありますけど。

―― tokuhirom
HBase と Redis を組み合わせたライブラリっていうのはなんかオープンソースで公開されていたりするんですか?

―― 加賀谷
されてないと思いますが、例えば、この記事が出てニーズが高そうであればいずれされる可能性はあります!名前が Aegis っていうカッコイイ名前なんですけど便利なんですよ。

―― tokuhirom
随分とカッコイイ(笑)

―― 加賀谷
名付け親のセンスだと思いますが、自分たちのチームではそういう神話から出た名前が多いですね。 Trident もそうですし。

―― tokuhirom
Data Labs では OpenTSDB などを使ってるみたいですけどね。何かデータの集計に使ってるようです。

―― 加賀谷
1日毎にデータ集計とかであれば使いやすいと思うんですけどね、パフォーマンステストまでは終わっていたので。 OpenTSDB そのもののパフォーマンスは悪くなくて、バックエンドの HBase がボトルネックになりそうといった感じでした。 OpenTSDB 自体は Java なんですけど、そこの性能はとくに問題なさそうだったので。今回みたいな用途には合わなかっただけで悪いものではないと思います。

―― tokuhirom
最近なにか困ったこととか無いですか?

―― 加賀谷
チームに3人って少ないな、という問題はあります(笑) 僕が困っていると大体、隣の席の先輩や上司に聞くことになってしまうのでそのへんの負担が大きいんじゃないかなと。まぁでも困ってること…、そうですね。何か始めようとすると毎回始めてなことが多いので、勉強しなきゃなと思うことが悩みですね。楽しいと言えば楽しいですけど。

―― tokuhirom
すごく勉強熱心だということで今回のインタビューも推薦されましたが、実際そうですか?言いにくいでしょうけども。。

―― 加賀谷
難しいですね、頑張ろうとは思っています。社内で開催されるハッカソンなんかにも積極的参加しようという気持ちはありますし、勉強会も出たいなと思っています。

―― tokuhirom
今後やっていきたいみたいなことってあります?

―― 加賀谷
今ジェネラルに知識を持っているメンバーがチームに多いので、何か1つ得意なものを見つけたいなと思っています。今回、さっき出ていた OpenTSDB をプロダクション環境で使ってみることができれば、それが一つ達成されるんじゃないかなあと思っていたんですが、難しそうです(笑)アドベントカレンダーの記事で、同期の川田くんが書いた Elasticsearch を検索エンジンとして利用する際のポイント という Elasticsearch の記事は結構反響があったと思うんですけど、ああいうかんじで自社製品でないソフトウェアやそのコミュニティにもコントリビュート出来るようなところを今年は目指したいなと思っています。土台もまだまだ足りていないので勉強しながらなんですけど、なにか1つすごく詳しいものを見つけたいなと。それが何かっていうのは今考えているところです。

―― tokuhirom
ぼちぼち後輩も入ってくるんですかね?今年は開発2センターは新卒って入社予定あるんですか?

―― 加賀谷
ゲームプラットフォーム開発室に1人入ると聞いてます。僕達の場合は1個上の世代がすごく出来る人達ばかりなので、そのプレッシャーがずっとありますね。新卒社員には1人ずつメンターがついて指導してくれるのですが、僕のメンターである海津さんを始めとして、皆さんすぐ Developer Award 取っちゃうような人たちなので。
編集部注:LINE社内のエンジニアを対象にポジティブな姿勢やチームの雰囲気をよくしてくれるメンバーを表彰する「LINE Developer Award」を半年に一度実施しています。
働くエンジニアのロールモデルを表彰する「LINE Developer Award」を今年も開催しました : LINE HR Blog

スキルもあるし、声も大きいしという人たちが多いのでプレッシャーがあります。自分の同期には LINE BOT Awards に「リマインくん」で応募して友だち数1万人を超えた岩谷くんもいますし、新卒少ないですけどメンバーがみんな活躍しているので刺激になります。

Related Post