Slide 1

Slide 1 text

Copyright © 2026 FOLIO Co., Ltd. All Rights Reserved. 証券システムを10年Scalaで作り続けるということ 関数型まつり 2026 / Ken Kaizu @krrrr38

Slide 2

Slide 2 text

2 本日の流れ • 自己紹介 • 株式会社FOLIO について • FOLIO と Scala – 開発の歴史 • 証券システムと各コンポーネントの特性 • Part 1: 口座開設・契約管理チームの Scala - 状態を取り扱う • Part 2: 証券口座管理チームの Scala - データ処理 • Part 3: Scala を使い続けるための組織と人 • まとめ 関数型言語の活用事例として本日話をしたいこと ・Scalaをどのように使っているのか ・Scalaを使い続けるための施策

Slide 3

Slide 3 text

3 自己紹介 • 海津 研 / Ken Kaizu • @krrrr38 • 株式会社FOLIO • 執行役員CTO • フィナンシャルテクノロジー本部 • 株式会社FOLIO ホールディングス • 情報戦略部 • 2018年1月より株式会社FOLIO • バックエンド・インフラがメイン

Slide 4

Slide 4 text

4 株式会社FOLIO 事業概要 ※当社の事業紹介を目的としたものであり、投資勧誘を意図するものではありません。画像はサンプルです。2026年4月時点の情報です。

Slide 5

Slide 5 text

5 会社紹介 - 総取扱資産残高・導入先 グループ内総取扱資産残高 4RAP導入先 ※「総取扱資産残高」とは、「FOLIOが直接お客さまに提供する投資一任運用サービスに関連してお預かりしている資産(ROBOPRO 等)」、「銀行・証券会社等の金融機関における、4RAPを活用した投資一任運用サービスの預り資産」、「FOLIOが投資助言業を行 っている金融商品の資産(ROBOPROファンド等)」の合計金額を指します。 ※ 2026年6月時点の情報です ※ 2026年4月時点の情報です

Slide 6

Slide 6 text

改めて、FOLIOでは \ 10年 / Scala を使い続けています

Slide 7

Slide 7 text

7 どこで Scala が使われている? 証券システム • 口座開設 • KYC(公的個人認証 etc) • 入出金 • 銀行との繋ぎ込み • 契約管理 • 投資一任契約管理 • 注文管理 • 執行管理 • … バックエンドシステムは ほぼ全てScala

Slide 8

Slide 8 text

8 Scala 採用の流れ 創業期 • オンライン証券会社を立ち上げる • 証券会社接続 FIX Protocol • 2015年時点ではJavaかC/C++がデファクト • 言語ネイティブな堅牢性を求めScalaを採用 • Scala2.11, sbt, twitter finagle, apache thrift, java8 • オンプレ環境 共通libraryによるマイクロサービス展開

Slide 9

Slide 9 text

9 Scala 採用の流れ B2Bビジネス立ち上げ • Scala2.12, akka-http, play framework • cats, fs2, scala future, akka-actor, refined • EKS, api-gateway, openapi, transfer family 中は堅牢に、外は枯れた技術を用いた安定したサービス提供

Slide 10

Slide 10 text

10 Scala 採用の流れ ~現在 • Scala2.13, Scala3、sbt2 ビジネスの成熟に合わせ、モダンな技術へ更新を図る

Slide 11

Slide 11 text

11 サービスに求められる責務とコンポーネント特性 ビジネスドメイン毎のアプリケーションチーム 口座開設チーム … 証券基盤チーム

Slide 12

Slide 12 text

12 サービスに求められる責務とコンポーネント特性 ビジネスドメイン毎のアプリケーションチーム 口座開設チーム … 金融に関わるユーザー・口座開設・申請・審査といった状態を取り扱う 証券基盤チーム

Slide 13

Slide 13 text

13 サービスに求められる責務とコンポーネント特性 ビジネスドメイン毎のアプリケーションチーム 口座開設チーム … 証券基盤チーム 全証券口座の大量データ処理を行う

Slide 14

Slide 14 text

いずれの要件に対しても Scala を活かすことが出来る

Slide 15

Slide 15 text

15 Part 1 — 口座開設チームの Scala 業務の流れ 1. 申込情報の登録 氏名・住所・本人確認資料… 2. 本人確認 ワ型KYC・eKYC・郵送KYC 3. 反社チェック・口座開設審査 4. 証券口座番号の払い出し 5. 取引可能化 「状態」が本質のドメイン。Scala の型システムで漏れなく表現する

Slide 16

Slide 16 text

16 状態を持つ集約を取り扱う 「状態」がドメインの本質 • Scalaの型システムを利用 • 例)審査待ちは承認可 • 直和型を使った表現 • 例)sealed trait • 直積型を使った表現 • 例)case class • 型によるエラー表現 • 例)承認は失敗しうる • → 返り値がEither

Slide 17

Slide 17 text

17 Repository / Usecase 操作 集約毎に一貫性を持たせる • Repositoryは集約を扱う • 操作の結果は型で表現 • Optionを返すなら空になりうる • Effect型はfor式で簡潔に記述 • flatMap / map の糖衣構文 いずれもScalaの言語標準機能で実現可能

Slide 18

Slide 18 text

18 Part 2 — 証券基盤チームの Scala 投資一任運用の1日のライフサイクル • 注文受注 • 注文をキューイング • 注文締め • 当日注文の確定処理 • システム注文の作成 • 執行・約定処理 • 市場発注・約定取込み • 残高・評価額算出 • 全口座の残高・損益・…を計算 毎日、全口座における金銭計算をズレなく処理する

Slide 19

Slide 19 text

19 fs2.Stream によるデータ処理 「データの流れ」を実装する • fs2.Streamを利用した実装 • メモリ処理を一定に保つ • 型でリソース開放を保証 • パイプラインは関数合成 「不変条件」の型表現 Refinement types / 篩型 • 業務ルールを型で表現する • 意図を型で伝える • 不正な値は処理させない

Slide 20

Slide 20 text

20 運用を支える開発ノウハウ • 副作用を正しく型で表現する • エラー有無は型で分かるように • トランザクション境界を見極める • 一貫性のあるデータの取り扱い • 分散トランザクションを避ける • API呼び出し・DBトランザクション • 綺麗に書けることを強制しない • 処理のわかりやすさ以外も考慮する • 障害時の深い調査も容易にする 型と無理の無い実装で防ぎ、リコンサイルで検証する

Slide 21

Slide 21 text

21 Part 3 — Scala を使い続けるための組織と人 未経験者を歓迎し、関数型の素養を育てる組織 採用 — Scala 経験者じゃなくても大丈夫 • 2025年度入社バックエンドエンジニア • Python / Go / Java 出身 • Scala経験者は少数派 • FOLIOが成し遂げたいことへの共感 • 「人生を豊かにすることに関わりたい」 • 「 証券システムに関わりたい」 • 「堅牢なシステムを作りたい」 • コーディング面接 • 12種類の言語実装を用意

Slide 22

Slide 22 text

22 オンボーディング • 言語機能を理解する • 未経験者向け scala_text • 社内書籍共有 • ドメインを理解する • ドメインマスター講座 • 社内技術を理解する • backend newbie • 社内技術で開発をする • 開発ガイドライン • AI Review・設計書

Slide 23

Slide 23 text

23 オンボーディング • 言語機能を理解する • 未経験者向け scala_text • 社内書籍共有 • ドメインを理解する • ドメインマスター講座 • 社内技術を理解する • backend newbie • 社内技術で開発をする • 開発ガイドライン • AI Review・設計書

Slide 24

Slide 24 text

24 オンボーディング • 言語機能を理解する • 未経験者向け scala_text • 社内書籍共有 • ドメインを理解する • ドメインマスター講座 • 社内技術を理解する • backend newbie • 社内技術で開発をする • 開発ガイドライン • AI Review・設計書

Slide 25

Slide 25 text

25 オンボーディング • 言語機能を理解する • 未経験者向け scala_text • 社内書籍共有 • ドメインを理解する • ドメインマスター講座 • 社内技術を理解する • backend newbie • 社内技術で開発をする • 開発ガイドライン • AI Review・設計書

Slide 26

Slide 26 text

26 オンボーディング • 言語機能を理解する • 未経験者向け scala_text • 社内書籍共有 • ドメインを理解する • ドメインマスター講座 • 社内技術を理解する • backend newbie • 社内技術で開発をする • 開発ガイドライン • AI Review・設計書

Slide 27

Slide 27 text

関数型言語を 活かせる組織になる

Slide 28

Slide 28 text

28 10 年を踏まえて やりたいこと・守りたいものは、ずっと同じ 変わったもの • チームごとに適正のあるアーキテクチャ • クラウドシステムの利活用 変わらないもの • Scala をコア開発に使う • 堅牢なシステムを型で守る思想 • 組織を成長させ続けるための開発 • ビジネスを伸ばすための技術活用

Slide 29

Slide 29 text

次の10年も、 証券システムのコア機能は Scala で守り続ける