LINE株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。 LINEヤフー Tech Blog

Blog


LINE新卒エンジニアのしごと〜8月のサーバサイドエンジニア編〜

こんにちは。2019年春に新卒としてLINE株式会社に入社した野川賢二郎です。
LINE NEWS、LINEマンガ、LINE LIVEなどのLINEの関連サービスの開発をする部署で、ライブ配信サービスであるLINE LIVEのサーバーサイド開発を行なっています。

この記事では、私がLINEに入社し研修を終えてから約3ヶ月間で取り組んできた仕事の一部をご紹介します。

LINE LIVEでのサーバーサイドエンジニアとしての仕事

この記事を読んでくださっている方々の中で、LINEのサーバーサイドエンジニアは普段どんな仕事をしているのか、といった疑問をお持ちの方もいると思います。
実際、私自身も入社前はLINEに入社してどういった業務をするのかの具体的なイメージがあまり湧きませんでした。

そこで、取り組んだ仕事の具体的な話を紹介する前に、おおまかに私たちが普段どのようなことをしているかを紹介したいと思います。

LINEに入社して分かったのは一口にサーバーサイドエンジニアといってもその仕事はサーバーサイドプログラムを書くだけでなく、非常に多岐に渡るということです。
3ヶ月で私が経験したものだけでも以下のようなものがあります。

新機能、新システム開発に関するもの

- 企画チームが行った企画への技術的観点からの提案
- 協業している開発メンバーへの仕事の依頼やレビュー依頼
- 新たなライブラリや技術を使用する場合、それらの調査や検証
- 設計
- コーディング (単体テストを含む)
- QAチームとのテストに関するコミュニケーション (重点的にテストをして欲しい箇所の伝達など)

既存システムの改修、改善に関するもの

- 新規開発の遅延に繋がるような、負債となっているコードの改善(リファクタリング)
- バグの調査、修正
- 日々のモニタリングに基づく問題、または問題となりうる箇所の改善

チーム全体の開発効率向上に関するもの (DevOps)

- サーバープロビジョニングやデプロイメント方法の改善
- モニタリングツール(Prometheus, Grafana)の設定やダッシュボードの作成、改善
- 通知の改善(いままでSlackに通知されていなかった情報の追加や、余計な通知の削除)

これらの仕事は、マネージャーに指示されて行われるだけでなく、チームメンバーが主体となって取り組む場合も非常に多いです。
私も、コードベース中に含まれる不要なコードの削除や、Springにおける推奨されないアノテーション記法の修正などをサッと修正してプルリクエストを出したりします。
この"チームメンバーが主体となって必要な仕事に取り組む"ということが、学生時代に私が抱いていた仕事のイメージと大きく異なり、新鮮に感じたことを記憶しています。

ここからは、私が入社してから取り組んできた仕事の中で、印象に残っている最初に取り組んだものと、現在取り組んでいるものについて紹介したいと思います。

入社してから最初の仕事

私の場合、配属二日目に実際の仕事に取り組み始めました。
(初日はマシンの環境構築をしたり、用意された新人用のドキュメントの読み漁ったり、マネージャーと今後何をやりたいかのミーティングを行いました。)

この仕事は企画チームが必要としている社内ツールを開発するというものです。

この社内ツールは簡単に説明すると以下のようなものです。
- LINE LIVE関係者が利用可能なファイルアップローダー
- 公開/非公開を設定でき、複数のファイルフォーマットに対応
- 公開されたファイルは社外からもダウンロード可能

まず、企画チームとのミーティングで具体的な要件のヒアリングを行い、要件を満たすような社内や外部のサービスが存在するか調査を行いました。
調査の結果、全ての要件を満たすようなサービスが存在しないことがわかったため、実際の開発に取り組み始めました。

この仕事はシンプルなWebアプリケーションの開発でしたが、開発の際に以下のような興味深い点がありました。

多様な社内ツール

この社内ツール開発するにあたり、多くの社内システムやツールのことを理解する必要がありました。
LINEには"はじめてシリーズ"と呼ばれる、開発者向けの内部ドキュメントが多く存在します。
これらは、特定のサービスの開発に新しくアサインされた人や、社内システムやツールをはじめて利用する人に対して作られたドキュメントで、"はじめてのLINE LIVE開発"や、"はじめてのPrometheusによるmonitoring"といったものがあります。
これらが多様なツールの理解に役立ちました。
LINEにはドキュメンテーションを非常に重視する文化があると感じています。そのため新米エンジニアでも分からないことの多くを検索によって解決することができます。

フロントエンドのコーディング

私たちはサーバーサイドエンジニアですが、社内ツールの開発においては自らフロントエンドのコーディングも行うこともあります。
LINEではVue.jsが広く使われており、LINE LIVEで開発する社内ツールのフロントエンドのフレームワークとしても採用されています。
私の場合、フロントエンド開発の経験が浅く、Vue.jsに馴染みもなかったのでそれらを習得する必要がありました。(いまも勉強中です。)

海外チームとの協業

LINEにはファイルを保存するためのオブジェクトストレージを開発しているチームや動画配信プラットフォームを開発しているチームが韓国にあります。
今回の社内ツールでもファイルをサーバー上に保存する必要があるため、オブジェクトストレージチームに設定を依頼する必要がありました。
韓国チームとのやりとりには機械翻訳を利用することもできますが、効率的なコミュニケーションのために主に英語を使いました。
配属数日で英語を用いて仕事をすることになるのは、多国籍企業の特徴かもしれません。

開発をひとまず終えて出したプルリクエストには想像以上に多くのレビューコメントがつきました。
そこから修正、レビュー、修正、レビューを何度か繰り返し、
最終的には合計20件近くのレビューコメントを取り込み、ようやく初のプルリクエストがマージされました!

現在取り組んでいる仕事:ライブ配信カレンダーシステム

次に、いま現在取り組んでいる仕事の一つであるLINE LIVEの配信カレンダーの開発について紹介したいと思います。

いまのLINE LIVEが抱えている問題として、大規模なトラフィックが予想される配信の情報共有が非効率、というものがあります。
LINE LIVEでは、あらかじめ日時が決まっている配信において大規模なトラフィックが予想される場合、サービスの品質に影響が生じないように部署内で配信に関する情報共有を行います。
この情報を元にチームメンバーが負荷対策やモニタリングなどを行います。
現在、この情報共有を、社内全体で使われているWebカレンダーを使ったり、Wikiに登録したりすることによって行なっているのですが、
使い勝手が悪い上にSlackへの通知などの必要な機能を実現できないため、人手による情報共有が必要となっています。
そこでこの状況を改善するために大型配信のスケジュールを管理、通知を行うためのシステムの開発プロジェクトが始まりました。

システムの利用イメージは以下のようなものです。

このプロジェクトには私と、同じチームのサーバーサイドエンジニアである孟辰 (Meng Cheng)さんがアサインされ、私はバックエンドを、孟辰さんがフロントエンドを主に担当することになりました。

開発の方針として、LINE LIVE本体とは独立したアプリケーションとして開発したほうが効率が良いと考え、使用技術やライブラリも自分たちで選択を行なっています。
LINE LIVEでは、サーバーサイドの言語としてJavaが使われているのですが、このプロジェクトが小規模開発であることや社内ツールであることを考慮して、素早く開発を行うためにPythonを採用しました。

その他には、現時点で以下のような技術、ライブラリを活用しています。

また、利用者からのフィードバックをできるだけ早く反映することを想定し、効率的にデプロイができるようにしています。
Masterブランチにプルリクエストがマージされると、自動的にコンテナが再起動されるようになっています。
サービス本番環境でこのようなデプロイ方式を採用すると意図しないタイミングでのデプロイによって障害が生じる可能性がありますが、このシステムは社内ツールであるのに加えサービス本体とは切り離されているため開発サイクルを速くするためにこのようにしています。また、プルリクエストのマージには自動テストのパスとレビューを必須にしているためある程度の安全性も確保しています。

主要機能の開発はほとんど終えていますが、日々孟辰さんと議論をしながら改善を行なっています。

その他の活動

LINE Family Dayでのプログラミング教室

LINEではLINE Family Dayという、社員がオフィスに家族を招くイベントが年に1回あり、社員が自分の働く場所を家族に紹介するいい場となっています。


そこでは今年、社員の子供向けにプログラミング教室を開催するという取り組みがあり、私も以前からプログラミング教育に興味があったこともありプログラミング教室のチューターとして参加しました。

プログラミング教室の内容は、簡単なゲームを作りながらプログラミングを学ぶとといったもので、中には課題のプログラムをガシガシ書き換えて遊んでいる子もいて、プログラミングネイティブ世代の片鱗を感じました。
また、プログラミングの概念を知らない子供たちにプログラミングを教えるのは簡単なことではなく、いい経験になったと思います。

LINEのテニス部

LINEには様々な部活動があります。私はテニス部に所属しており、退勤後に、様々な部署、職種の人と楽しくテニスをしています。
ちなみに、部活動に対しては活動支援金が支給されるため、毎回自己負担なしでテニスができます。
太っ腹ですね!

最後に

この記事を読んで少しでもLINEでの仕事に興味を持っていただけたら幸いです。
皆さんといつか一緒に仕事ができる日を楽しみにしています。