エンジニアとして働くために、
LINEのインターンシップで確かめたこと

Lin Zhiyuan

この記事は、2022年サマーインターンシップ 技術職 就業型コースの募集時に掲載したものを一部修正して再掲載しています。サービス名称や所属は取材当時の内容です。

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

2020年4月に新卒として入社したLin Zhiyuanです。もともと大学院留学のために来日し、コンピューターサイエンスを専攻していました。現在は、LINEアプリのスタンプショップやウォレットタブ、LINEの関連コンテンツが購入できるWebサイト「LINE STORE」などの開発を担当する、Communication&Service Integration(CSI)室に所属しているサーバーサイドエンジニアです。

現在私が担当しているのはスタンプショップと着せかえショップに関わる機能です。具体的には、スタンプショップで行うキャンペーンのための機能開発や、新しい形のLINEスタンプをサポートするための仕組みの開発などがあります。最近では、LINEスタンプを購入すると無料でLINE着せかえをもらうことができる機能の開発を担当しました。

LINEのインターンシップに参加した経緯を教えてください。

就職先を検討する際、日本ならではのサービスを開発している会社に入りたいと考えていました。その候補の1つとして考えていたLINEがタイミングよくインターンシップを募集していたので、技術職の就業型コースに応募しました。

他の会社でのインターンシップも検討しましたが、その中でLINEのインターンシップの待遇がもっとも良かったので、LINEへの志望度が一番高かったです(笑)。選考の際の面接で日本人だけでなく韓国人の面接官もいて、私のような留学生にとってもフレンドリーというか当たり前に日本人以外が働いている会社だなという印象を持てたことや、エントリーシートが不要で応募する際の負担が小さかったことなども好印象でした。

インターンシップの選考にはコーディングテストがありました。ある日常的なお題にそってベストパターンを導き出すアルゴリズム開発の問題でした。ただ問題は難しく、私が開発したアルゴリズムでは、いくつかあるテストケースのうちの1つでベストな方法を計算することができなかったことを覚えています。自分では不合格になったと思っていたのですが、コーディングテストでは、課題の解決に至るまでの考え方を重視し、正しいアルゴリズムを開発することだけが選考観点ではなかったようで、結果的には面接に進むことができました。

面接では、コーディングテストで開発したアルゴリズムについて、何を意識したかや他に考えられる選択肢などの具体的で技術的な質問などがありました。最終的に合格することができて、インターンシップ生としてLINEの開発に参加することになりました。

インターンシップでは、どのような業務に取り組みましたか。

インターンシップで配属されたのは現在と同じCSI室です。もともとCSI室には、スタンプショップとLINE STOREのLINE公式アカウント経由でLINEスタンプやLINE着せかえ関連のプロモーションメッセージを定期的に配信しているアプリケーションがありました。

私のインターンシップ期間中のタスクは、LINE STORE上でユーザーが欲しいアイテムを保存することができる「欲しいものリスト」に一定数のLINEスタンプやLINE着せかえを登録しているユーザー向けに、リストのデータをもとにパーソナルライズされたメッセージを定期配信できるバッチジョブを作ることでした。

開発した内容を具体的に教えてください。

私が開発したバッチジョブの処理は主に以下の3つの部分、レコメンデーションサービス、メッセージコンポーザー、メッセージセンダーから構成されています。

対象は「欲しいものリスト」に一定数の商品を登録しているユーザーです。レコメンデーションサービスでは、「欲しいものリスト」DBを集計し、他の配信条件と合わせてフィルタリングすることにより対象ユーザーを抽出する事ができます。抽出された対象ユーザーにレコメンデーションデータを送信することになります。

次に、メッセージコンポーザによって送信するメッセージの内容を作ります。メッセージ送信には、LINE Developersで公開されているMessaging APIを利用しました。送信レイアウトはFlex Message Simulatorで確認しながら作成することができました。最後に、メッセージセンダーから対象ユーザーへメッセージを送信します。これが処理の一通りの流れになります。

これらを実装する中で特に注意した部分がいくつかあります。まず重視したのは、レコメンデーションサービスでのデータ抽出をどのように効率的に行うかです。LINE STOREのユーザー数は、LINEアプリのスタンプショップよりはるかに少ないのですが、それでも数百万規模のユーザーがいます。レコメンデーションサービスは、その中から配信対象者を選び出すので、分析データの量はとても大きな規模です。

データ抽出を効率的に行うためにMongoDBの機能を調査し、大量のデータをパイプライン化と並列化によって高機能処理を実現するAggregation機能が求める要件に適していることがわかりました。これを使うことで、高速に対象データを集計・抽出することができるようになりました。

次にメッセージコンポーザです。既存のコードには既にデザインやレイアウトごとに複数のメッセージコンポーザが存在しており、新しくデザインやレイアウトを作成するごとに新しくメッセージコンポーザが必要になるような作りになっていました。今後の新しいレイアウトに対応するために、メッセージコンポーザを抽象化してレイアウト部分とメッセージを構成する部分とに適切に分離することを検討し、開発を進めました。結果的にコードも整理され、新しいレイアウトへの対応も容易にできる実装ができ、注意して良かったポイントだったと思います。

最後のメッセージセンダーでは、どのようにして最も高速に、かつ最大の効率でメッセージ送信するかが重要でした。Messaging APIの担当チームとキャパシティについて確認したり、並行処理数などのチューニングを行う必要がありました。また、メッセージ送信だけでなく、トラッキング用のパラメータ設定やモニタリングの為のPrometheusの設定など、リリース後の運用や改善を見据えた取り組みも必要でしたね。

その後Beta QAも無事に完了したのですが、いよいよ本番環境での最終テスト配信というところでエラーを起こして失敗してしまったんです。原因は、レコメンデーションサービスでの集計部分がタイムアウトになっていたことでした。テスト環境と本番環境ではデータの量が大きく異なったため、本番環境ではタイムアウトを起こしてしまっていました。既存のパラメータ調整では解決せず、Database Administrator関連のチームに依頼してMongoDBそのもののタイムアウト設定も変更しましたが、それでも解決されませんでした。結局MongoDBの公式サポートへ問い合わせた結果、新たに設定する必要があるパラメータがあることがわかり、解決することができました。

問題の原因をいろいろな観点で検証・特定する経験は大変でしたが、学びのある経験でした。他にも、RxJavaやArmeriaやPromgenなどの当時は公開ドキュメントが少ないJavaライブラリや社内ツールもあって、学ぶのに少し時間がかかりましたが、メンターさんやチームメンバーたちも時間を惜しまずどんなことも助けてくれたおかげで、過度な負担にならずに業務を進めることができました。

インターンシップ中に感じたこと、得た経験を教えてください。

まず感じたのは、コードのクオリティに対する要求が高いことでした。私が中国にいたときに働いていたベンチャー企業では、エンジニアによるコードのレビューはあまり行われていませんでした。またレビューするときでも、基本的なフォーマットを間違えていることを指摘されるといった程度であり、チェックはそれほど厳しくありませんでした。

しかしLINEではエンジニア同士のレビューがしっかり行われていました。たとえばデータフローをこのように記述すればコードをもっと簡略化できるなど、質を向上させるために具体的な部分まで指摘されます。そういった面はすごく驚きましたし、良い意味で厳しい開発プロセスを知ることができたのは良かったと感じています。

オフィスの雰囲気が良かったことも印象的でした。組織階層での区別があまりなく、みんながフラットにコミュニケーションしていましたし、私たちインターンシップ生にもフレンドリーに接してくれました。先輩の社員などと一緒にお昼ご飯を食べてカジュアルにコミュニケーションするなど、上下関係はあまり感じませんでした。旧来の日本企業的な働き方の会社は個人的には合わない可能性が高いかなと思っていたのですが、LINEは本当にフラットで働きやすそうだなと感じました。

インターンシップで働いている学生にはメンターが付くのですが、その方に親身にサポートしていただいたことも強く印象に残っています。私のメンターは、同じ部署で働くロシア人のエンジニアの方でした。メンターがいることで、内製で開発した社内向けサービスの使い方など、わからないことをすぐに質問することができて助かりました。また、私自身は日本語よりも英語の方が得意なのですが、そのメンターさんは日本語と英語のどちらでも問題なくコミュニケーションすることができたため、日本語でどのように言えばよいのかわからないことは英語で質問できたことも助かったことの1つです。

エンジニアとしてスキルアップできる職場だとも感じました。ちょうどインターンシップで入ったとき、社内でKotlinに関するワークショップが行われていました。Kotlinはプログラミング言語の1つで、今では広く使われていますが、当時は登場したばかりでメジャーではありませんでした。しかしLINEでは新しい技術にも注目し、社内で勉強会などを実施していたため、新しい技術の導入に積極的に取り組んでいる会社だなと感じたことを覚えています。

驚いたのは、担当しているプロジェクト以外のソースコードも見られたことです。たとえば個人情報や機密情報を含むなどの理由で権限が管理されていて、見ることができないソースコードもありましたが、社内のエンジニアが見られるプロジェクトはインターンシップ生でもアクセスすることができました。インターンシップに参加する前は、権限も裁量も最小限なのだろうと予想していたのですが、実際には正社員と同等の権限と裁量で仕事に取り組むことができて良い経験になりました。

社員として入社することを決めたポイントはありますか。

社内の雰囲気が私に合うなと感じたことと、しっかりとした評価をしてもらえることを感じられたからです。実際にインターンシップに参加したことで、人間関係がフラットでカジュアルにコミュニケーションできることがわかりましたし、働いている中でストレスを感じるようなこともありませんでした。LINEであれば長く働くことができそうだと思いました。

また、私はマネジメントの役割にならなくてもエンジニアとして評価されて、そして成長することができる環境で働きたいと考えていました。なのでインターンシップで働いているときに、ランチの席でエンジニアの待遇や評価について先輩社員に話を聞いたりもしました。LINEでは、マネージャーになることがキャリアにおいて絶対ではないことがわかったことも、入社することを決めた理由です。

もしインターンシップに参加していなければ、どこに入社するかでもっと悩んでいたと思います。そのため、就職先を決める前にインターンシップに参加し、社内の雰囲気などについて理解できたことは本当に良かったです。自分のスキルをアピールできることも、インターンシップに参加するメリットの1つだと思います。他の企業に応募する際にもLINEでの経験は実績として捉えられると思います。仮にLINEに入社しなかったとしても、参加する意義は大きいのではないでしょうか。

LINEやLINEのインターンシップに限らず、就職活動におけるアドバイスはありますか。

エンジニアとして就職する場合、多くの企業でコーディングテストが行われます。そのため、応募する前にコーディングテストのシミュレーションを行っていた方が良いと思います。

実際にコードを書くことも大切です。私も大学院に通っていたときに、プライベートの時間で大量のコードを書いていました。私自身は他の人が書いたコードを読むことも好きでした。たとえばオープンソースプロジェクトのコードを読み、どういった思想で作られているのかなどを考えることは、良い勉強になると思います。

私のように日本以外の外国籍の方が日本企業に応募するのであれば、やはり日本語の勉強は大切だと個人的には思います。LINEには、私の部署のように日本語を必須としないポジションや働くための手厚い支援もありますが、入社する際に一定の日本語力があればより働きやすいです。たとえば日本語で行われるプレゼンテーションを聞いて何らかの情報を得るなどといったケースです。LINEは社内に専属の通訳がいたり英語の資料が用意されたり、日本語がそれほど得意でなくても困ることはあまりありませんが、それでも日本語が理解できるメリットはあると考えています。日本語の研修制度なども整っているので、入社後に日本語能力を上げる努力もできます。

LINEは日本の方以外も積極的に採用しているため、受け入れる体制が整っていると感じています。社内でのコミュニケーションに関しても、たとえば会議の際には通訳の方にサポートしてもらえるほか、チャットでのコミュニケーションも翻訳ボットを使うことで困ることはありません。こういったところも、LINEを選んで良かったと思う部分です。

日本の方にとっても、色んな国籍や文化や価値観を持っている人と働くメリットは大きいと思います。特にエンジニアとして海外勤務などの今後様々な選択肢を視野に入れている方、働きながら英語力を向上したい方、色んな文化に触れるのが好きな方などには、おすすめです。あとは早起きが苦手な方も(笑)。LINEは働く時間が比較的自由なので、自分のペースを守って働くことができるのも良いですね。

最後に

私も就職活動の際、LINE以外の企業にもエントリーしました。その際、いくつかの企業で不採用になりましたが、最終的には志望度が高いLINEに入社することができました。

就職活動には相手先の企業との相性などもあるため、不採用の通知を受けることもあると思います。それにめげることなく、本当に志望している企業に積極的にチャレンジしてください。