2020年4月に新卒として入社したLin Zhiyuanです。もともと大学院留学のために来日し、コンピューターサイエンスを専攻していました。サーバーサイドエンジニアとして「LINE」アプリのスタンプショップや「ウォレット」タブ、LINEの関連コンテンツが購入できるWebサイト「LINE STORE」などの開発を担当しています。
現在私が担当しているのはスタンプショップと着せかえショップに関わる機能です。具体的には、スタンプショップで行うキャンペーンのための機能開発や、新しい形のLINEスタンプをサポートするための仕組みの開発などがあります。最近では、LINEスタンプを購入すると無料でLINE着せかえをもらえる機能の開発を担当しました。
インターンシップで配属されたチームでは、スタンプショップと「LINE STORE」の「LINE公式アカウント」経由で、LINEスタンプやLINE着せかえ関連のプロモーションメッセージを定期的に配信しているアプリケーションの開発に携わっていました。
私のインターンシップ期間中のタスクは、「LINE STORE」上で欲しいアイテムを保存できる「欲しいものリスト」に一定数のLINEスタンプやLINE着せかえを登録しているユーザー向けに、リストのデータをもとにパーソナライズされたメッセージを定期配信できるバッチジョブをつくることでした。
私が開発したバッチジョブの処理は主に以下の3つの部分、レコメンデーションサービス、メッセージコンポーザ、メッセージセンダーから構成されています。
対象は「欲しいものリスト」に一定数の商品を登録しているユーザーです。レコメンデーションサービスでは、「欲しいものリスト」データベースを集計し、その他の配信条件と合わせてフィルタリングすることにより対象ユーザーを抽出できます。抽出された対象ユーザーにレコメンデーションデータを送信することになります。
次に、メッセージコンポーザによって送信するメッセージの内容をつくります。メッセージ送信には、「LINE Developers」で公開されている「Messaging API」を利用しました。送信レイアウトはFlex Message Simulatorで確認しながら作成しました。最後に、メッセージセンダーから対象ユーザーへメッセージを送信します。これが処理の一通りの流れになります。
これらを実装するなかで特に注意した部分がいくつかあります。まず重視したのは、レコメンデーションサービスでのデータ抽出をどのように効率的に行うかです。レコメンデーションサービスは、多くのユーザーのなかから配信対象者を選び出すので、分析データの量はとても大きな規模です。
データ抽出を効率的に行うためにMongoDBの機能を調査し、大量のデータをパイプライン化と並列化によって高機能処理を実現する、Aggregation機能が求める要件に適していることがわかりました。これを使うことで、高速に対象データを集計・抽出できるようになりました。
次にメッセージコンポーザです。既存のコードには既にデザインやレイアウトごとに複数のメッセージコンポーザが存在しており、新しくデザインやレイアウトを作成するごとに新しくメッセージコンポーザが必要になるような作りになっていました。今後の新しいレイアウトに対応するために、メッセージコンポーザを抽象化してレイアウト部分とメッセージを構成する部分とに適切に分離することを検討し、開発を進めました。結果的にコードも整理され、新しいレイアウトへの対応も容易にできる実装ができ、注意して良かったポイントだったと思います。
最後のメッセージセンダーでは、どのようにして最も高速に、かつ最大の効率でメッセージ送信するかが重要でした。「Messaging API」の担当チームとキャパシティについての確認や、並行処理数などのチューニングを行う必要がありました。また、メッセージ送信だけでなく、トラッキング用のパラメータ設定やモニタリングのためのPrometheusの設定など、リリース後の運用や改善を見据えた取り組みも必要でしたね。
その後Beta QAも無事に完了したのですが、いよいよ本番環境での最終テスト配信というところでエラーを起こして失敗してしまったんです。原因は、レコメンデーションサービスでの集計部分がタイムアウトになっていたことでした。テスト環境と本番環境ではデータの量が大きく異なったため、本番環境ではタイムアウトを起こしていました。既存のパラメータ調整では解決せず、Database Administrator関連のチームに依頼してMongoDBそのもののタイムアウト設定も変更しましたが、それでも解決されませんでした。結局MongoDBの公式サポートへ問い合わせた結果、新たに設定する必要があるパラメータがあることがわかり、解決にいたりました。
問題の原因をいろいろな観点で検証・特定する経験は大変でしたが、学びのある経験でした。ほかにも、RxJavaやArmeriaやPromgenなどの当時は公開ドキュメントが少ないJavaライブラリや社内ツールもあって、学ぶのに少し時間がかかりましたが、メンター社員やチームメンバーたちも時間を惜しまずどんなことも助けてくれたおかげで、過度な負担にならずに業務を進めることができました。
まず感じたのは、コードのクオリティに対する要求が高いことでした。私が中国にいたときに働いていたベンチャー企業では、エンジニアによるコードのレビューはあまり行われていませんでした。またレビューするときでも、基本的なフォーマットを間違えていることを指摘されるといった程度であり、チェックはそれほど厳しくありませんでした。
しかしLINEではエンジニア同士のレビューがしっかり行われていました。たとえばデータフローをこのように記述すればコードをもっと簡略化できるなど、質を向上させるために具体的な部分まで指摘されます。そういった面はすごく驚きましたし、良い意味で厳しい開発プロセスを知ることができたのは良かったと感じています。
オフィスの雰囲気が良かったことも印象的でした。組織階層での区別があまりなく、みんながフラットにコミュニケーションしていましたし、私たちインターンシップ生にもフレンドリーに接してくれました。先輩社員と一緒にお昼ご飯を食べてカジュアルにコミュニケーションするなど、上下関係はあまり感じませんでした。旧来の日本企業的な働き方の会社は個人的には合わない可能性が高いかなと思っていましたが、本当にフラットで働きやすそうだなと感じました。
インターンシップで働いている学生にはメンター社員がつきますが、その方に親身にサポートしてもらったことも強く印象に残っています。私のメンターは、同じ部署で働くロシア人のエンジニアの方でした。メンターがいることで、内製で開発した社内向けサービスの使い方など、わからないことをすぐに質問できて助かりました。また、私自身は日本語よりも英語の方が得意なのですが、私のメンターは日本語と英語のどちらでも問題なくコミュニケーションできたため、日本語でどのように言えばよいのかわからないことは英語で質問できたことも助かったことの1つです。
エンジニアとしてスキルアップできる職場だとも感じました。ちょうどインターンシップで入ったとき、社内でKotlinに関するワークショップが行われていました。Kotlinはプログラミング言語の1つで、いまでは広く使われていますが、当時は登場したばかりでメジャーではありませんでした。しかしLINEでは新しい技術にも注目し、社内で勉強会などを実施していたため、新しい技術の導入に積極的に取り組んでいる会社だと感じたことを覚えています。
社内の雰囲気が私に合うなと感じたことと、しっかりとした評価をしてもらえることを感じられたからです。実際にインターンシップに参加したことで、人間関係がフラットでカジュアルにコミュニケーションできることがわかりましたし、働いているなかでストレスを感じるようなこともありませんでした。この会社であれば長く働けそうだと思いました。
また、私はマネジメントの役割にならなくてもエンジニアとして評価されて、そして成長できる環境で働きたいと考えていました。そのためインターンシップ期間中もランチの席でエンジニアの待遇や評価について先輩社員に話を聞いたりもしました。マネージャーになることがキャリアにおいて絶対ではないことがわかったことも、入社することを決めた理由です。
もしインターンシップに参加していなければ、どこに入社するかもっと悩んでいたと思います。そのため、就職先を決める前にインターンシップに参加し、社内の雰囲気を理解できたことは本当に良かったです。自分のスキルをアピールできることも、インターンシップに参加するメリットの1つだと思います。ほかの企業に応募する際にもこの経験は実績としてとらえられると思いますし、仮に入社しなかったとしても、参加する意義は大きいのではないでしょうか。
エンジニアとして就職する場合、多くの企業でコーディングテストが行われます。そのため、応募する前にコーディングテストのシミュレーションを行っていた方が良いと思います。
実際にコードを書くことも大切です。私も大学院に通っていたときに、プライベートの時間で大量のコードを書いていました。私自身はほかの人が書いたコードを読むことも好きでした。たとえばオープンソースプロジェクトのコードを読み、どういった思想でつくられているのかなどを考えることは、良い勉強になると思います。
私のように日本以外の外国籍の方が日本企業に応募するのであれば、やはり日本語の勉強は大切だと個人的には思います。日本語を必須としないポジションや働くための手厚い支援がある企業もありますが、入社する際に一定の日本語力があればより働きやすいです。たとえば日本語で行われるプレゼンテーションを聞いて何らかの情報を得るなどといったケースです。入社後は社内に専属の通訳がいたり英語の資料が用意されたり、日本語がそれほど得意でなくても困ることはあまりありませんでしたが、それでも日本語が理解できるメリットはあると考えています。日本語の研修制度なども整っているので、入社後に日本語能力を上げる努力もできます。
入社後の社内でのコミュニケーションに関しても、会議の際には通訳の方にサポートしてもらえるほか、チャットでのコミュニケーションも翻訳ボットを使うことで困ることはありませんでした。こういったところも、入社して良かったと思う部分です。
日本の方にとってもいろいろな国籍や文化、価値観を持っている人と働くメリットは大きいと思います。特にエンジニアとして今後海外勤務などのさまざまな選択肢を視野に入れている方、働きながら英語力を向上したい方、いろいろな文化に触れるのが好きな方などには、おすすめです。
私も就職活動の際、ほかの企業にもエントリーしました。その際、いくつかの企業で不採用になりましたが、最終的には志望度が高いLINEに入社できました。
就職活動には相手先の企業との相性などもあり、不採用の通知を受けることもあると思います。それにめげることなく、本当に志望している企業に積極的にチャレンジしてください。