CodeZine(コードジン)

特集ページ一覧

クラウドをフル活用し金融業界の課題を解決、Finatextグループの次世代証券基盤とは【デブサミ2020夏】

【C-7】モダンなアーキテクチャでゼロから作る証券基盤

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2020/09/17 12:00

 2013年12月に設立されたFinatextホールディングスを中心とするFinatextグループは、BtoBforCモデルを軸に、多様なニーズに対応する金融サービスを開発・提供している。グループ会社のスマートプラスでは証券サービスの共通機能をクラウド化し、他システムとの接続部をAPI化した証券プラットフォーム「BaaS(Brokerage as a Service)」を開発し、事業会社の金融DXへの取り組みを支援している。その代表例がクレディセゾンとの協業によって開発されたつみたて投資サービス「セゾンポケット」だ。同社ではBaaSを使ってどのように証券サービスを開発しているのか。BaaSの特徴と共にその具体的な事例であるセゾンポケットの構成や特徴、開発する上で苦労したことなどについて、同サービスの開発に携わったFinatextの石橋淳志氏と大木卓哉氏が解説した。

株式会社Finatext リードエンジニア 石橋淳志氏
株式会社Finatext リードエンジニア 石橋淳志氏
株式会社Finatext エンジニア 大木卓哉氏
株式会社Finatext エンジニア 大木卓哉氏

証券プラットフォーム「BaaS」とは?

 「金融がもっと暮らしに寄り添う世の中にする」ことをビジョンに掲げ、2013年に設立されたFinatextホールディングス。現在はFinatext、ナウキャスト、スマートプラスをはじめとするグループ会社を擁し、BtoBforCモデルを軸に多様なニーズに対応する金融サービスを開発・提供している。

 Finatextグループが目指す金融サービス像は、「生活に寄り添う金融サービスを開発・提供することで、みんなの人生や生活に役立てていくこと」と石橋氏は説明する。同社は当初、証券会社や金融機関から取引サービスの企画を依頼され、提案してきたが、実現するには「基幹システムの変更や刷新が必要であり、多大な時間と費用がかかるからできない、と言われることが多かった」という。そこで開発したのが証券プラットフォーム「BaaS(Brokerage as a Service)」である。BaaSとは証券サービスの共通機能をクラウド化し、他システムとの接続部をAPI化したプラットフォーム。これまでの証券サービスは利用者のニーズやリテラシーにあわせた開発が難しく、極端に言えば初心者と上級者が同じサービスを使う必要があったが、BaaSを使えば、「取引するユーザーの熟練度にあったサービスが提供できるようになる」(石橋氏)という。

証券プラットフォーム「BaaS(Brokerage as a Service)」
証券プラットフォーム「BaaS(Brokerage as a Service)」

 BaaSを使って開発されたサービスもすでにいくつか登場している。スマートプラスが開発・運営している従来型手数料ゼロのスマホ投資サービス「STREAM」やクレディセゾンとの協業により開発した「セゾンポケット」はその代表例である。

 事業会社が新たに金融サービスを提供する背景として、事業の多角化や、クロスセルやクロスドメインでのデータ分析などコア事業とのシナジー、UXの向上といった経営上の期待がある。だが「金融事業を立ち上げるにはさまざまな課題がある」と石橋氏は指摘する。金融事業は免許制・登録制のものがほとんどで、会社組織を別にして人員体制を整えたり、マイナンバーを扱うことになるため、オフィスに物理的な壁や仕切りが必要になったり、またシステムコストは数十億円規模でかかるなど、「時間も費用も初期コストがかかる」(石橋氏)という。

 これらの課題をBaaSは解決してくれる。BaaSであれば、今年新たに誕生した金融サービス仲介業(改正法律は2021年の秋冬頃に施行予定)というライセンス一つで金融サービスがライトに始められる。またBaaSが口座開設や決済などの主な証券業務を引き受けることで、体制やオフィスの問題も回避できる。さらにWeb APIで口座開設や注文発注などを受け付けるため、初期のシステムコストを回避できるのだ。

 BaaSのシステム構成の第一の特徴は、複数のAmazon ECSクラスタによるマイクロサービスを採用していること。「口座開設系であれば個人情報を扱うのでセキュリティに対する要件、注文だと可用性やパフォーマンスというように、機能ごとに大きく異なる要件に対応するため」と石橋氏。またマイクロサービスであれば、金融市場が開いている平日9時~15時までは可用性を高め、市場が開いていない土日はスケールダウンをさせることで、コスト最適化を図ることもできる。とはいえ「トランザクションの境界は難しいので、機能ごとの要件を加味しつつ、サービスを切っている」と石橋氏は明かす。

 第二の特徴は発注系や価格系、バックオフィス系など、数多くの外部接続環境を持っていること。それに伴う多くのバッチ処理をクラウド上のイベントとして登録でき、さらにリモート環境からコマンド一つでどのようなバッチタスクがあるのか取得できるようになっているという。

 第三の特徴はFIX(TCP上の金融用プロトコル)に専用線接続(Direct Connect)を利用していることだ。

BaaSを使って開発した「セゾンポケット」

 スマートプラスがクレディセゾンと協業し、BaaSを活用して開発したセゾンポケットはシンプルなモノリス構造で実現した金融サービスである。

セゾンポケットの構成図
セゾンポケットの構成図

 セゾンポケットがリリースされたのは2019年11月。その特徴は投資信託や株式(1株単位から)の積み立て投資ができること。また積立の原資にはセゾンカード、UCカードだけではなく永久不滅ポイントも利用でき、カードで積み立てすると永久不滅ポイントも貯まっていく。「クレジットカードを用いた株式積立は日本初、クレジットカードを用いた投資信託の積立も日本に数えるほどしかない。クレジットカード発行会社であるクレディセゾンと、BaaSで初期コストを低く抑えられるFinatextが協業したからこそ実現できた、画期的なサービスです」と大木氏は付け加える。

 セゾンポケットのメインサービスの積立はどんな仕組みで実現しているのか。

 まずセゾンポケットのサーバからBaaSに対して、すべての積み立てリクエストを投げる。次にBaaSで「顧客のクレジットカード・ポイントの決済」「決済した金額を顧客の証券口座へ入金」「顧客の口座残高を利用し、株式・投資信託を発注」という処理を行う。そしてセゾンポケットのサーバで、積み立て結果を取り込むのである。

 BaaSで行っている処理の流れは投資信託と株式で異なる。投資信託の場合はポイントの決済・クレジットカード決済が成功した時点で顧客から証券への受注金額が確定し、その後、証券から委託会社へ買付発注が行われる。一方株式の場合は、ポイントの決済をして、顧客勘定へ入金し、スマートプラスの自己勘定で市場へ買い付け発注をする。発注が終わるとユーザーのクレジットカードで残額を決済し、顧客勘定へ入金、スマートプラスの保有残(在庫)を顧客が買い付けするという流れになる。「顧客がクレジットカード決済に失敗した場合は、スマートプラスが在庫を抱えることになる」と大木氏は言う。

 なぜこのような流れになるのか。「投資信託に関しては金額単位で買い付けできるのでクレカ決済後に発注することが可能だが、株式は買付金額が寄付(よりつき)後に初めて確定するので、金額が決まっていない寄付前にクレジットカードの決済をすることはできない」と大木氏は説明する。

 買い付け発注前にクレジットカードで決済・入金し、余った分を口座残高に残すという方法が考えつくかもしれないが、「クレジットカードのショッピング枠の現金化に該当するのでできない」と大木氏。また買い付け発注の前に決済会社にカードの与信枠を確保し、後に実際の金額でカード決済を行うという方法も考えられるが、「指定されたカード決済システムの仕様上、与信枠は取り消せないため、さらに実際支払うであろう金額を上乗せした与信枠が必要になる」と大木氏は話す。

 またバッチ処理の仕組みについても解説。「セゾンポケットではさまざまなバッチ処理が動いている」と大木氏。BaaSとセゾンポケットの連携部分では、セゾンポケットからBaaSへ積立申請を連携するバッチとBaaSからセゾンポケットへ積立結果を連携するバッチの2種類。BaaS単体では、BaaSの中で各マイクロサービスに積立申請を連携するバッチやクレジットカードや永久不滅ポイントを決済し、入金するバッチ、株式を発注するバッチ、投信を発注するバッチなどがある。セゾンポケット単体でもセゾンポケットでユーザーに積立結果を通知するバッチがある。「このほかにも集計バッチ、また先に紹介したバッチの中で複数のバッチに分かれていたりしている」(大木氏)

 バッチ処理の設計でさまざまなことを意識しているが、その中で最も肝となるのが冪等(べきとう)性とトランザクション制御だ。冪等性とは、ある操作を複数回行っても、インプットが同じであれば結果は同じになるという概念である。バッチを冪等に作る理由として、どんなバッチにも必ず失敗する可能性があることと、問題を取り除いた後、再度手動でバッチを走らせることができることが挙げられる。

 冪等性の実装方法は大きく「すべての処理をやり直す」「未処理のもののみ実行する」の2種類ある。前者は厳密な意味での冪等性が担保されるが、再実行時に時間がかかってしまう(条件分岐は少ない)。一方後者の場合は、再実行時に残りの件数を実行するだけなので時間はかからないが、ステータスでハンドリングする分、条件分岐は増えてしまうというデメリットがある。

 セゾンポケットではこの2つの実装方法を両方採用した。例えばセゾンポケットからBaaSに対して積立リクエストを送るバッチと、セゾンポケットでBaaSから積立結果を取り込むバッチは全ての処理をやり直す方法を採用している。クレジットカードやポイントを支払うバッチや積立結果を、メールなどでユーザーに通知するバッチは未処理のもののみ実行するようにしている。「外部に作用を持ってしまうものは、未処理のもののみ実行する方法で実装せざるを得ない」と大木氏は説明する。

 その場合に気をつけなければならないのが、トランザクション制御である。ここで言うトランザクションとはある意味を持った一連の処理の塊のことで、また、トランザクション制御とはトランザクション内でデータの整合性が保たれることと定義するが、「これが結構難しい」と大木氏は投資信託の決済バッチを例に説明した。特にサービスをまたぐ上で、制御できないさまざまなエラーが起こるからだ。

 例えばネットワークエラーや相手方のハードウェアの故障などが起これば、永久不滅ポイント分の入金時、クレジットカード利用時、クレジットカード分の入金時、ステータス更新時などにエラーが発生することが想定される。

 このようなエラーに対応するため、「トランザクション制御は障害が起こることを前提に設計している」と大木氏。処理単位ごとに細かくデータベースをアップデートすることはもちろん、データベースのやり取りを失敗する場合に備えて、外部接続のやり取りはすべてログに吐き出しているという。実際に障害が起きた場合は、システムがエラーを察知して自動でバッチを止め、待機させているオンコールのエンジニアに通知が飛ぶようにしているという。

 最後に大木氏は「私たちと一緒に、次世代の金融システムをモダンな技術で開発してみませんか」と呼びかけ、セッションを締めた。

関連リンク

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • CodeZine編集部(コードジンヘンシュウブ)

    CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5