LINEの技術組織が取り組んでいる・今後取り組む未解決課題を深堀りするインタビューシリーズ「Unresolved Tech Issue」、今回のテーマは「モダンに実装された新機軸のHRサービスにおける急成長と安定稼働の両立」です。
2021年3月にリリースされたばかりの「LINEスキマニは、隙間時間とスキルを価値に変えるギグワーク(単発雇用)マッチングサービスです。新規サービスらしく、ReactやKotlin、Elasticsearch、Kubernetesなどモダンな技術を用いて構築・実装されています。
すばやく新機能開発などを実施して、サービスを可能な限り急成長させること。そして、システムを安定稼働させ、今後のサービス発展を支える土台を築くこと。LINEスキマニはこの2つの要素を両立させ、拡大するギグワーク市場を牽引する存在になることを目指しています。
LINEスキマニの技術的な詳細や今後の展望について、開発に携わる村瀬敬和と渡辺昌由、古賀靖典に聞きました。

LINEスキマニを支える技術スタック
──まずは技術スタックについて聞かせてください。LINEスキマニで採用しているプログラミング言語やフレームワーク、ミドルウェアは何でしょうか?
村瀬:LINEスキマニでは、以下の技術を採用しています。
<サーバーサイド>
プログラミング言語:Kotlin
フレームワーク:Spring Boot、MyBatis
インフラ: Kubernetes, Verda*
データストア:MySQL, Redis, Elasticsearch
CI/CD:Drone CI, Argo CD
<フロントエンド>
求職者向けアプリ:TypeScript, React, Redux, styled-components
企業向けアプリ(CMS):上記に加えて、Next.js, koromo
*…VerdaはLINEが管理・運用する社内向けプライベートクラウドです。
──どのような要件を達成するために、こうした技術を用いることに決めたのでしょうか?
村瀬:LINEのHR事業部では、既存サービスとして「LINEバイト」を開発・運用してきました。LINEスキマニではLINEバイトで採用されている技術をベースにしつつ、プロジェクト開始時に「何か技術的なチャレンジをしたい」という話がチーム内で持ち上がったため、サーバーサイドをすべてKotlinで開発しました。リリーススケジュールがかなりタイトに決まっているプロジェクトだったため、技術的な不確定要素を増やしすぎないように、新しい技術スタックを導入するのはサーバーサイドのみに留めました。
インフラ技術としてKubernetesを採用しているのも、「LINEバイト」のアーキテクチャを踏襲しています。サービスの成長に伴いアクセスの増大が見込まれるため、その時にインフラを拡張しやすく、デプロイしやすいようにKubernetesを用いました。

──データベースとしてMySQLやRedis、Elasticsearchを採用していますが、それぞれどのような意図でしょうか?
村瀬:永続的なデータの保存先としてMySQLを用いています。Redisはセッション情報やキャッシュなど揮発してもよいデータを格納する用途で、MySQLではパフォーマンスを出しづらいユースケースの場合にElasticsearchを活用しています。
──フロントエンド技術の採用理由についても教えてください。
求職者向けアプリでは複雑度の高い実装が予想されたため、開発効率を下げないよう、LINEのHR事業においてあまり導入実績のなかったNext.jsの採用を見送りました。一方、企業向け管理画面はサーバーサイド開発チームがメンテナンスを引き取る可能性があったため、ルーティングのルールを統一しやすく、サーバーサイドエンジニアでもコードを読み解きやすいNext.jsを採用しています。
状態管理のためにReact、Reduxを使用しています。状態管理の方法としては、APIのレスポンスをすべてReduxに格納し、コンポーネント間で状態を伝達する場合にReact Hooksを使うという役割分担をしています。そして、開発時の安全性や生産性を高める意図でTypeScriptを導入しています。
開発効率の向上とシステムの安定性が不可欠
──ギグワーク市場は拡大を続けており、各社が関連サービスに参入しています。業界を牽引する存在となるために、開発チームとして取り組むべきことは何だと考えていますか?
渡辺:ギグワーク市場はまだ法的にも未整備の部分が多く、かつサービス提供者や企画者なども市場のニーズを分析しきれていません。環境やニーズの変化に応じて、サービスを柔軟に改善し続ける姿勢が大切です。そのため、LINEスキマニの開発チームは、機能の企画からリリースまでのスピードを向上させることが求められています。
現在は2週間に一度のリリースサイクルですが、より改善速度を上げていきたいです。例えば、機能単位でのQAを終えたらその都度リリースするような形に、今後は変えていきたいと考えています。

──開発効率を向上させるために工夫している点があれば教えてください。
古賀:フロントエンドではswagger-to-tsというライブラリを導入しています。これは、OpenAPI 2.0または3.0のスキーマ情報をTypeScriptのインターフェースに変換するものです。旧来の開発フローは、以下のような流れになっていました。
- サーバーサイドがAPIモックを開発
- APIモックを開発環境へデプロイ
- APIモックから型情報を取り込んでフロントエンド開発を開始
- サーバーサイドのコードを本実装し、フロントエンドと疎通
しかし、このフローには課題がありました。「LINEスキマニ」では複数バージョンの開発が並行して行われているため、自分だけではなく他のエンジニアたちも開発環境を使用しているケースが多いです。その場合、 APIモックからswagger-to-tsで型を取り込むために、本来不要な待ちの時間が発生していました。また、サーバサイドで特定のブランチにコミットを取り込んだり戻したりといった手間が発生し、負担が大きくなっていました。
Dockerを使い、この状況を改善できました。サーバーサイドのコードをフロントエンドエンジニアのローカル環境でビルド可能にすることで、APIモックのPull Requestレビューが通った時点で、フロントエンド開発を開始できるようになりました。これにより、開発速度が向上しました。日頃からこのように改善できるところを見つけ、取り組んでいくことで、開発効率を向上させています。
──開発効率の向上以外に目標はありますか?
渡辺:今後のさらなる求人数やユーザー数の増加を念頭に置き、大量トラフィックを処理できるアーキテクチャへと改善したいです。LINEスキマニはLINEバイトと比較すると、求人掲載から応募、勤務までのサイクルが短く、かつ利用頻度が高いという特徴があります。
LINEスキマニではユーザーが求人に応募し採用された後、LINEスキマニの機能によって勤務状況のチェックイン・チェックアウト処理をします。さらに給与振込に関連する処理もLINEスキマニが受け持ちます。逆にLINEバイト側はこうした処理を行っていません。
つまりサービスの特性上、ユーザーがアプリを利用する頻度もLINEバイトよりLINEスキマニのほうが高くなる可能性が大きいため、大量トラフィックを処理できるアーキテクチャの構築がより一層重要になります。
サービス改善のために取り組む3つの施策
──サービスの品質を向上させるために実施していることはありますか?
村瀬:私たちが取り組んでいることは大きく分けて3つあり、それぞれ順にご説明します。まず、求人から請求・給与支払いに至るまで、外部サービス連携の多い業務フローを一貫性のあるUXで実現しています。
LINEスキマニは数多くの外部サービスと連携をしています。もしUXを全く考慮せずにシステムを開発すると、頻繁に他サービスの画面へとリダイレクトすることになり、ユーザーは不快感を覚えてしまいます。
そこでLINEスキマニでは、eKYC(オンラインの本人確認)以外の外部サービス連携を、すべてサーバーサイドのAPI連携によって完結させています。これにより、ユーザーはLINEスキマニの画面上でほぼすべての処理を完結できるため、UXが向上します。
古賀:フロントエンドにおいても改善を続けています。LINEスキマニはリリーススケジュールに間に合わせることを優先して開発を進めたため、操作がわかりづらいところがまだいくつもあります。また、企業向けアプリはPCによる利用が主になると想定していたため最低限のレスポンシブ対応しかしていなかったのですが、リリース後にモニタリングすると実はスマホによる利用のほうが多いこともわかりました。先日、KARTEというツールを導入してアプリ訪問者の行動や特性を解析できるようにしたため、今後はこのツールを活用しながらUI改善を実施したいです。

──取り組んでいることの2つ目を教えてください。
村瀬:私たちは将来的に、企業と求職者の評価データを分析することで、両者の高精度なマッチングを実現したいと考えています。現在、求職者が自分の好みに合った求人情報を探す際には、アプリ内で検索をする、またはLINEスキマニのLINE公式アカウントからの一斉配信の求人情報を受け取るなどの方法が主です。
これからLINEスキマニのサービスの中でデータや各種ノウハウが蓄積されれば、機械学習などを用いて分析することにより、おすすめの求人を求職者に提示するなどの施策が可能になります。類似した施策をLINEバイトでも行っており、有効な成果があがっています。
LINEバイトでは、求人情報のレコメンドのために1日に数十万件のメッセージを配信しています。LINEスキマニはサービスの性質上、より鮮度の高い求人情報を扱うことが必要ですから、LINEバイトよりもさらに配信頻度は高くなるでしょう。膨大な量のメッセージを捌くため、Apache Kafkaを導入することなども構想しています。
──3つ目は何でしょうか?
村瀬:高可用性とリソース効率を両立するためのオーケストレーションの構築です。私たちはKubernetesやGitHub、Drone CI、Argo CDなどを用いてアーキテクチャを構築しています。各エンジニアがサーバーオーケストレーションの仕組みを自主的に改善しており、大部分はインフラの管理・運用を自動化・効率化できています*。
*…一部のオペレーションに関しては、システム監査の対応を行う必要があることから、人間の手作業で行っています。
また、サーバーのデプロイ状況や発生したエラーの情報などをSlackに通知し、インフラの状況をリアルタイムでわかるようにしています。Slackでの投稿を起点として、詳細を調べる必要がある場合にはログを見たり、モニタリングツールを使ったりしています。
今後さらにサービスが成長したら、負荷状況に合わせてサーバーをスケールさせる仕組みも導入したいです。また、先ほどリリース頻度を上げたいという話をしましたが、そのためのリリースプロセスの改善やテストの自動化なども予定しています。

LINEスキマニをギグワーク市場においてNo.1のサービスに
──インタビューを総括して、エンジニアがLINEスキマニの技術的課題の解決やアーキテクチャ改善に取り組む意義を教えてください。
村瀬:サービスを具現化してユーザーに届け、社会を変えていくことがエンジニアリングの醍醐味です。その過程で、技術的な課題を解決したり、アーキテクチャを改善したりといった行為は大きな意義を持ちます。コストパフォーマンスやUX、信頼性の向上などを図ることで、より良いサービスへと育てていけるからです。エンジニアとして、LINEスキマニを通してギグワーク市場の発展に貢献したいです。
渡辺:LINEスキマニは今まさに成長過程にあり、1を10にするフェーズといえます。データ量やトラフィック数が増えるにつれて、今後は各種の課題も生じてくるでしょう。そうした課題を事前に察知して、改善していくことはとても重要です。企業や求職者から信頼されるプラットフォームを提供することで、世の中に価値提供できたら嬉しいです。
古賀:LINEスキマニは、ギグワーク市場においてNo.1のサービスになることを目標に開発が進められています。そして、そのポテンシャルを持っていると私たちは信じています。ギグワーク市場は変化が激しいため、サービスも継続的に進化していくことが必要です。継続的なアーキテクチャや開発体制の改善によって、高速に開発を進められるような基盤を構築するのが大切だと思います。
採用情報
LINE株式会社では一緒に働くエンジニアを募集しています!
今回のインタビューと関連する募集ポジションはこちらです、ご応募お待ちしております。