はじめに
こんにちは。2020年春に新卒として入社した平賀郁子です。
現在LINE NEWS、LINE LIVE、LINEバイトなどLINEの関連サービスを開発する部署で、ライブ配信サービスであるLINE LIVEのサーバサイド開発を行っています。
学生時代は情報科学科で流体力学のシミュレーションを用いた研究をしていました。研究の他に、アルバイトとしてiOSアプリを開発をしていましたが、それが楽しくてアプリに関わるエンジニアとして就職先を探しました。
数ある会社の中でも、自分の知り合いを含む多くの人が使用するような大きなサービスの開発に関わりたいという思いからLINEを志望し入社しました。
内定後iOSアプリエンジニアとして1年ほど内定者アルバイトをしていましたが、再利用できる箇所が多いので抽象的なコードが沢山あることや長期的に運用・保守していくためにしっかりとアプリアーキテクチャに沿ってコーディングされていることなどが大きなアプリならではのことでとても勉強になりました。
そして配属後、気になっていたサーバサイドの仕事のチャレンジさせていただけることになりました。
この記事では、配属されてから約3ヶ月で取り組んできたことについて紹介できればと思います。
最初の仕事
配属されて一番最初に取り組んだ仕事はiOSアプリのユニバーサルリンクが不適切な場面で効いてしまうのを修正するというものです。
UniversalLinksとはiOSで特定のURLを開いたときにアプリが起動する仕組みで、例えばweb上でLINEログインをしようとするとLINEアプリが起動するのはこの仕組みを利用しています。

この機能を有効にするには以下の2つが必要です。
- どのURLにアクセスするとアプリが起動するかを記述した設定ファイルをドメインの指定パス上に置く
- アプリ側で叩かれたURLによってアプリ上のどのページを開くかなどのハンドリングをする
今回はこの設定ファイルをAppleのドキュメントを読みながら修正しました。
修正自体は数行でしたが、開発の流れやプロジェクトのメンバーとのコミュニケーションの方法など多くのことを学ぶことができました。
主な開発の流れ
今回のようなプロジェクトの機能に関わる開発の流れは以下のようになります。
- 企画担当者が開発してほしい機能の要件などをチケットとして発行し、細かい仕様をWikiページにまとめます
- チケットをチーム内で分担します
- Wikiページの仕様通りに開発をします
- チームメンバーによるコードレビューと自動テスト通過後、適するバージョンのブランチにマージし、開発環境にデプロイします
- QA担当によってその機能がきちんと実装されているかテストされます。バグが見つかった場合には3.〜5.をを繰り返します
このような大規模な開発に関わったことがなかったので、コードレビューと自動テストだけではなくテスト専門のQA担当者が色々なケースを実際にアプリを使用して試してくれるという堅牢な仕組みに感動しました。
今回は機能開発でしたが、サーバサイドエンジニアの仕事は他にもあります。リファクタリング、開発支援ツールの作成、ログの調査などです。
このような業務は開発側から自発的に行うことが多く、色々な方面からサービスを良くしていくような体制があります。
コミュニケーション
プロジェクト内では他のサーバサイドエンジニアはもちろん、クライアントエンジニア、フロントエンドエンジニア、企画担当、QA担当など様々な人とコミュニケーションする必要があります。
またLINE LIVEはLINEアプリ内から視聴できることもあり、LINEアプリの開発者や配信基盤を開発している韓国チームとコミュニケーションすることもあります。どの人がどこまで内容を把握していて、どうやったら伝わるかを考えながらコミュニケーションを取るのは想像以上に難しいです。週に会議が3つあり、プロジェクトのことや他のプロジェクトのことについて知ることができます。サーバサイドの会議では、取り組んでいるタスクについて進捗などを報告します。
開発会議では企画担当、QA担当、クライアントエンジニア、サーバサイドエンジニアが参加し、売り上げやリリースの予定、プロジェクトの方向性や目標なども話します。最後はチームが所属する室の会議で他のチームのプロジェクトの進行状況を共有します。どの会議も職種、年齢、国籍、立場に関わらずフラットにみんなが発言し、意見を言えるような社風だと感じます。
今取り組んでいる仕事
今取り組んでいる仕事はエンタテイメントに関わる方の公式アカウント作成ツールの実装です。
LINEアプリではタイムライン内にディスカバーなどの新機能が追加されインフルエンサーが活躍できるようになりました。そこでエンタテイメントに関わる方に参加していただくために、多数のLINEのオフィシャルアカウントを作ることになりました。
はじめは毎月何十人ものオフィシャルアカウントを管理画面から手動で作成していましたが、数が多いため単純作業の時間が長くなってしまいました。その問題を解決するために、アカウント名やジャンルなどの作成するアカウントの情報が書かれたファイルをアップロードすることでオフィシャルアカウントを作ることができるwebアプリを開発することになりました。
社員が誰でもこのツールを使ってオフィシャルアカウントを作成できてしまっては困るので、限られた社員だけが使用できるように社内ログインシステムを利用します。
これはLINE LIVE本体の開発ではなくサービスを利用するのを手助けするようなツールで、サーバサイドエンジニアの仕事は本当に多岐に渡るなと実感しました。
1つのサービスの開発のみをしていると視野が狭くなってしまいますが、他のサービスにも関わることで見えてくるものもありました。LINE LIVEは開発参加時点で既にサーバの環境などが整っていましたが、自分で1からサービスを作ることで社内でのサーバ構築方法などを学ぶことができました。
また多くの社内ツールを使うことになったため、社内ツールの使い方を調べたり詳しい人に質問するのも勉強になりました。
実装
社内でよく使われているものを一通り触って勉強しようという理由で以下のような技術を使うことにしました。

言語はKotlinでフレームワークはSpringBoot、フロントはファイルをアップロードして送信できればいいので簡単にテンプレートエンジンとしてThymeleafを使用します。アップロードされたファイルの内容を変換し、社内のオフィシャルアカウント管理ツールのAPIを叩きます。
このサービスを使用できる社員を限定するため、社員用のSSO認証をNginxのモジュールとして導入します。CDツールはjenkinsをし、下の図のようにGitHubのdevelopブランチへのpushイベントをトリガーに社内のプライベートmvnリポジトリへ実行ファイルをあげます。
そして、PMCという社内で作成しているデプロイシステムを利用して実行ファイルをサーバへデプロイします。

社内ツールの利用
LINEでは多くの社内ツールを開発しています。このwebアプリケーションを実装するだけでも複数の社内ツールを使うことになります。
例えば先ほど出てきたPMCというデプロイシステムや、サーバのセットアップにAnsibleを実行するためのツールがあります。はじめは多くの社内ツールがあるため開発する中で聞き慣れない単語が多くありましたが、それぞれしっかりとしたドキュメントが用意されています。わからないことがあるときは開発者に直接メッセージで質問をすることもできます。
また、複雑なツールに関してはドキュメントとは別に簡単にどのように使うのかがWikiページにハンズオンのような形で残っていることもあります。開発する上でこれらのWikiページにとても助けられたので私もコードを書くだけではなく、自分が実装したものや分からなくて調べたことなどは積極的にWikiページにまとめるというとことを心がけています。
おわりに
コロナウイルスの影響で配属されてからは一度もオフィスへ出社していません。
私は配属前までiOSアプリを主に開発していたためサーバサイドの開発経験が浅く、在宅で開発を進めなければならないことを不安に思っていましたが、オンラインであっても些細なことを質問しやすい環境でとても働きやすいです。
この記事を読んでくださっている皆さんがLINEの仕事に少しでも興味を持っていただければ嬉しいです。
