LINE証券 / 銀行事業のサーバーサイドエンジニア

姚剣楠氏(以下、姚):LINEフィナンシャルの姚と申します。2018年の12月にLINEに入社しました。前職はメーカ系のSI、外資系コンサルティングの会社にいて、メガバンク向けの国際送金・決済などのシステム開発を担当していました。LINEに入社して以来、LINE証券のサーバーサイドの開発を担当しています。

私からは、今担当している仕事の内容について簡単に紹介したいと思います。

まず、LINE証券で使われている技術を紹介します。開発言語ですが、主にKotlinとJavaを使っています。新規サービスは、基本的にKotlinを使って開発をしています。アプリケーションのフレームワークは、ほぼSpring Bootを使っています。あとはMySQL、Redis、Elasticsearchなど、さまざまなストレージも利用しています。

LINE証券はマイクロサービスのアーキテクチャを採用しており、Nomad、Consulなどの製品でサービスを管理しています。後ほど、SREチームから詳細な説明があると思いますので、この部分は割愛します。この他、タスクの管理はJIRAでやって、ソースのレビューは基本GitHub、会話や会議はZoomやSlack、さまざまなツールを使っています。

このように日々の業務で多様な技術を携わるチャンスがいっぱいあると思います。

LINE証券のサーバーサイドの体制を紹介いたします。現在LINE証券のサーバーサイドのエンジニアは、だいたい25人前後います。担当している業務で4つの開発チームに分かれています。まず1番目のOTCチームはOTC取引(1株単位での取引)全般の業務、あとはキャンペーンサービス、Smart Newsの通知と、総合口座の管理。このあたりの業務を担当しています。

2番目のExchange/Fundチームは、取引業務での取引全般、ポートフォリオの管理、あとは投資信託の業務、信用口座管理あたりの業務を担当しています。自分は3番目のPrice-Masterチームに所属しています。このチームはリアルタイムで株の値段、気配、チャートのデータを提供するサービスと、あとは株のマスタ情報などを管理する2種類のサービスを提供しています。4番目は積み立て投資の業務を担当しているチームです。

スピード感を重視した開発スタイル

LINEはアジャイル型の開発のスタイルですので、非常にスピード感を重視しています。ふだんはだいたい週1のスプリントで開発を進めています。取引所取引(Exchange)のサービスは今年の5月に開始して、まもなく4ヶ月間を経過して一段落しているので、最近はだいたい半月に1回の定期リリースとなります。

また、金融サービスなので慎重にやらなければならない部分もあります。その意味では開発側で常にスピード感と安定性のトレードオフが存在しています。そしていかにこのバランスを取るのかが重要な課題だと思います。

そしてLINE証券のマイクロサービスについて簡単に紹介します。LINE証券は4つのチームでだいたい25個のサービスを開発しました。サービス間の通信は基本APIを利用しています。場合によってgRPCとかKafkaの非同期メッセージを使う部分もあります。外部のベンダーさんから金融系のデータを受信して使っている部分もあります。

株の値段・気配周りの情報はREFINITIV、これは昔のReutersという会社です。あとはニュース関連の部分はQUICKからもらいます。株のマスタ情報はみん株(みんなの株式)からデータを提供してもらっています。

価格生成まわりのアーキテクチャ紹介

それでは自分が担当している価格生成まわりのアーキテクチャを紹介します。このサービスは主に2つの特徴があります。1つ目はKafkaを中心にPub/Subシステムであること。2つ目はWebFluxを使って、すべてのIO処理はノンブロッキングI/Oであることです。WebFluxを使うことで、より少ないリソースで効率的に多くのリクエストを捌くことができます。

本日は時間の関係で詳細な説明はできないのですが、興味がある方はぜひ調べていただければと思います。

そのシステムの構成図を説明します。まずFeed-handlerというサービスからReutersへ数千銘柄の銘柄情報をサブスクライブ(sub)します。そしてだいたい秒間約8万件の更新メッセージを向こうから受信するようになります。受信した内容をKafka経由ですべてのPrice関連サービスに送信します。

あとは障害時のことを考慮してBlue/GreenのActive-Activeモードを取り寄せています。例えばGreenに障害が出たときはロードバランサ側の制御で、すべてのリクエストをBlueの側に振れるような設定になっています。

次に、Kafkaを採用した理由と効果を簡単に説明いたします。みなさんご存知の通り、Kafkaは分散型のストリーミングプラットフォームであり、スループットが高い、IOの処理速度が速い、高可用性の特徴を持っています。これはだいたい1日受信したメッセージと処理の速度の表です。

1日の取引でだいたい1億2,600万の更新データをもらって、その中の96.9パーセントのデータはだいたい50ミリ秒の中に処理できました。これはベータ環境の実績ですが、本番環境はもっといい結果が出せます。さっき話した50ミリ秒はReutersからメッセージを受信してから各Price-servicesの処理までの時間です。けっこういい結果を出せたかなと思います。

業務の流れと求めるエンジニア像

それでは1日の業務の流れを説明します。最近は、コロナの関係でみんなリモート勤務がメインになりました。勤務時間は基本10時から午後の6時半までです。裁量労働制なので出退社時間はみんな自由に決めます。今自分が担当しているプロダクトの朝会は10時半なので、自分はだいたい10時に業務を開始します。

朝会ではその日の仕事の予定、課題をチームメンバーと共有できる場です。チームによって朝会の時間が異なりますし、当然朝会をやらないチームもいます。もちろん昼休みの1時間も自由に取れます。また週に1回開発定例があります。この場でプロダクトの横断的な技術の課題を共有できます。

ふだんの業務の終了時間はだいたい午後5時から8時の間で、その日の仕事の進捗状況、あとは自分の持っているタスクの優先度次第で退社の時間が異なります。これは通常の業務です。

証券の業務なのでたまに緊急業務も発生します。例えば頻度はそんなに高くないですけど、今月はだいたい深夜2時が1回、朝6時と7時の間が2、3回ぐらい発生しました。次の取引所がオープンするまでに解決しなければならないケースが発生します。

サーバーサイドの採用もやっています。主体性があり、新しい技術への抵抗感がない方がLINEのお仕事に合うかなと思います。ぜひみなさんのご応募もお待ちしています。

LINE Payのサーバーサイドエンジニア

金泰敬氏(以下、金):変わりまして、LINE Payの金泰敬と申します。簡単に自己紹介から始めたいと思います。

2010年にネイバージャパンという会社に入社していて、そのときは検索サービスの開発エンジニアでした。次の年、東日本大震災があった年にLINE開発の初期メンバーとして参加して、それからVoIPとかスタンプショップとかLINEのiPadアプリ、直近ではLINT(LINE Improvement for Next Ten years)という、LINEの次の10年のアーキテクチャを設計するプロジェクトを一緒に行ったりしていました。

2019年にLINE Payの開発にジョインして、最近は特典クーポンとか、Visa LINE Payクレジットカードなど、さまざまなプロジェクトに関わっているという状況です。

クーポンから本人確認サービスまで

次はうちのチームが担当しているプロジェクトを紹介します。まずマイカードですね。TポイントカードやPontaカードといった既存のいろいろな店のポイントカードをLINEの中で管理できるサービスです。LINE スターバックス カードは、LINE Payの決済まで連動していて、LINE Payにチャージした残高でスターバックスのコーヒーが購入できるようになっています。

次はLINE クーポンです。このように、いろいろな店で提示し割引される店のクーポンシステムのサービスです。

次は特典クーポンです。先ほど説明したLINEクーポンとちょっと違うところは、LINE Payの決済と連動しているクーポンだということです。今年の5月に導入されたLINEポイントクラブのマイランクに応じて得られる特典として、1枚から10枚のクーポンが配られます。そのクーポンをLINE Payの決済時に利用することで、直接決済金額から割引されるシステムです。

次は銀行口座振替で、国内のいろいろな銀行と提携して自分の口座からLINE Payに残高チャージができる機能です。大きい銀行以外にもさまざまな地方の銀行とも連携しているので、けっこういろいろな銀行口座連携関連のサポートをしています。

次に大きいプロジェクトとしてはe-KYCです。e-KYCは簡単にいうとオンライン本人確認サービスで、身分証と顔写真でユーザーの本人確認を行うサービスです。顔認識とかOCRなどのAI技術も入っていて、KYCを行った人は送金ができるようになったり、自分の決済限度額の引き上げができるようになったりします。

技術スタックと応募ポジション

技術スタックについては、基本言語としてJavaとかKotlin、Spring BootやKafka、RedisやMySQLなど、一般的なオープンソースの技術を使っています。

社内のサポートが大きいArmeriaとかElasticとかPrometheus、Jenkinsなど社内のソフトが大きいフレームワークを利用していたり、コミュニケーションツールとしてはSlack、GitHub、JIRA、Confluence、Zoomなどを利用している状況です。

応募のポジションは、大きい枠として3つあって、決済システムの開発、アカウントや残高、送金・出金などの決済システムの開発。それに伴う銀行口座振替やVisa LINE Payクレジットカード関連の開発もそこに該当しますね。次がKYCシステムの開発で、金融サービスに本人確認機能を提供したり、外部への本人確認関連サービスを提供する開発です。

最後がマイカードやクーポンの開発で、今後はShopcardという、決済と連動したポイントカード機能なども提供する予定で、さきほど説明した特典クーポンの開発なども該当します。

応募要件について

採用については、応募要件のリンクにも書いてありますが、基本的なサーバー開発の経験をもっている人で、CSとかアルゴリズムの知識を持っている方。それから歓迎するスキルなどはネットワークの知識が深いとか、REST APIの設計ができる方は応募していただければと思います。

応募のメンバーとしてスキル以外のことを話すとしたら、まずオーナーシップを持っている。どういう話かというと自分でタスクを進めて、自分が担当しているタスクやプロジェクトに改善を考えて実行までできる方。次はコミュニケーションで、いろいろな国とチーム内・外をコミュニケーションすることが意外と多い状況で、コミュニケーションスキルがある方がいたらいいなと思っています。

次はGeekといって、これは今日のエンジニアの方だったらみんな持っていると思うんですけど、新しい技術が好きで、自分が使っているフレームワークとかを詳しく調べて内容まで把握する技術が好きな方の話ですね。最後がDetail、簡単にいうとコードを書くときに正常ケースでの機能の実装だけでなく、いろいろな例外ケースまで対応できるような堅いコード、robustなコードを書ける方がいればいいなと思っています。

先ほど話した内容の応募はリンクを参考にいただければと思います。ご清聴ありがとうございました。私の説明は以上です。