Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
証券システムを10年Scalaで作り続けるということ - 関数型まつり2026
Search
krrrr38
July 10, 2026
Technology
1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
証券システムを10年Scalaで作り続けるということ - 関数型まつり2026
krrrr38
July 10, 2026
More Decks by krrrr38
See All by krrrr38
クラウド時代における一時権限取得
krrrr38
1
420
FOLIOにおけるAWS活用事例 - SBI Tech Day 2025
krrrr38
0
36
Scramble4 FOLIO栄枯盛衰今昔物語
krrrr38
0
670
Other Decks in Technology
See All in Technology
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
1
200
Digitization部 紹介資料
sansan33
PRO
2
7.7k
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.8k
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
450
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
350
修正PRを食べてレビュースキルが賢くなる:Claude Codeによる自己改善サイクル
yuyaumetsu
5
1.4k
攻撃と防御で学ぶAI時代のプロダクトセキュリティ演習
recruitengineers
PRO
6
2.2k
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
200
Goでデータパイプラインを作ろう
sansantech
PRO
0
360
Webアクセシビリティ入門 2026
recruitengineers
PRO
2
460
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
230
【CEDEC2026】グラフィックスエンジニアのためのニューラルシェーディング入門
cygames
PRO
0
120
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Deep Space Network (abreviated)
tonyrice
0
250
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
56k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Ethics towards AI in product and experience design
skipperchong
2
340
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
780
The Cost Of JavaScript in 2023
addyosmani
55
10k
Prompt Engineering for Job Search
mfonobong
0
400
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
200
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
200
Transcript
Copyright © 2026 FOLIO Co., Ltd. All Rights Reserved. 証券システムを10年Scalaで作り続けるということ
関数型まつり 2026 / Ken Kaizu @krrrr38
2 本日の流れ • 自己紹介 • 株式会社FOLIO について • FOLIO と
Scala – 開発の歴史 • 証券システムと各コンポーネントの特性 • Part 1: 口座開設・契約管理チームの Scala - 状態を取り扱う • Part 2: 証券口座管理チームの Scala - データ処理 • Part 3: Scala を使い続けるための組織と人 • まとめ 関数型言語の活用事例として本日話をしたいこと ・Scalaをどのように使っているのか ・Scalaを使い続けるための施策
3 自己紹介 • 海津 研 / Ken Kaizu • @krrrr38
• 株式会社FOLIO • 執行役員CTO • フィナンシャルテクノロジー本部 • 株式会社FOLIO ホールディングス • 情報戦略部 • 2018年1月より株式会社FOLIO • バックエンド・インフラがメイン
4 株式会社FOLIO 事業概要 ※当社の事業紹介を目的としたものであり、投資勧誘を意図するものではありません。画像はサンプルです。2026年4月時点の情報です。
5 会社紹介 - 総取扱資産残高・導入先 グループ内総取扱資産残高 4RAP導入先 ※「総取扱資産残高」とは、「FOLIOが直接お客さまに提供する投資一任運用サービスに関連してお預かりしている資産(ROBOPRO 等)」、「銀行・証券会社等の金融機関における、4RAPを活用した投資一任運用サービスの預り資産」、「FOLIOが投資助言業を行 っている金融商品の資産(ROBOPROファンド等)」の合計金額を指します。 ※
2026年6月時点の情報です ※ 2026年4月時点の情報です
改めて、FOLIOでは \ 10年 / Scala を使い続けています
7 どこで Scala が使われている? 証券システム • 口座開設 • KYC(公的個人認証 etc)
• 入出金 • 銀行との繋ぎ込み • 契約管理 • 投資一任契約管理 • 注文管理 • 執行管理 • … バックエンドシステムは ほぼ全てScala
8 Scala 採用の流れ 創業期 • オンライン証券会社を立ち上げる • 証券会社接続 FIX Protocol
• 2015年時点ではJavaかC/C++がデファクト • 言語ネイティブな堅牢性を求めScalaを採用 • Scala2.11, sbt, twitter finagle, apache thrift, java8 • オンプレ環境 共通libraryによるマイクロサービス展開
9 Scala 採用の流れ B2Bビジネス立ち上げ • Scala2.12, akka-http, play framework •
cats, fs2, scala future, akka-actor, refined • EKS, api-gateway, openapi, transfer family 中は堅牢に、外は枯れた技術を用いた安定したサービス提供
10 Scala 採用の流れ ~現在 • Scala2.13, Scala3、sbt2 ビジネスの成熟に合わせ、モダンな技術へ更新を図る
11 サービスに求められる責務とコンポーネント特性 ビジネスドメイン毎のアプリケーションチーム 口座開設チーム … 証券基盤チーム
12 サービスに求められる責務とコンポーネント特性 ビジネスドメイン毎のアプリケーションチーム 口座開設チーム … 金融に関わるユーザー・口座開設・申請・審査といった状態を取り扱う 証券基盤チーム
13 サービスに求められる責務とコンポーネント特性 ビジネスドメイン毎のアプリケーションチーム 口座開設チーム … 証券基盤チーム 全証券口座の大量データ処理を行う
いずれの要件に対しても Scala を活かすことが出来る
15 Part 1 — 口座開設チームの Scala 業務の流れ 1. 申込情報の登録 氏名・住所・本人確認資料…
2. 本人確認 ワ型KYC・eKYC・郵送KYC 3. 反社チェック・口座開設審査 4. 証券口座番号の払い出し 5. 取引可能化 「状態」が本質のドメイン。Scala の型システムで漏れなく表現する
16 状態を持つ集約を取り扱う 「状態」がドメインの本質 • Scalaの型システムを利用 • 例)審査待ちは承認可 • 直和型を使った表現 •
例)sealed trait • 直積型を使った表現 • 例)case class • 型によるエラー表現 • 例)承認は失敗しうる • → 返り値がEither
17 Repository / Usecase 操作 集約毎に一貫性を持たせる • Repositoryは集約を扱う • 操作の結果は型で表現
• Optionを返すなら空になりうる • Effect型はfor式で簡潔に記述 • flatMap / map の糖衣構文 いずれもScalaの言語標準機能で実現可能
18 Part 2 — 証券基盤チームの Scala 投資一任運用の1日のライフサイクル • 注文受注 •
注文をキューイング • 注文締め • 当日注文の確定処理 • システム注文の作成 • 執行・約定処理 • 市場発注・約定取込み • 残高・評価額算出 • 全口座の残高・損益・…を計算 毎日、全口座における金銭計算をズレなく処理する
19 fs2.Stream によるデータ処理 「データの流れ」を実装する • fs2.Streamを利用した実装 • メモリ処理を一定に保つ • 型でリソース開放を保証
• パイプラインは関数合成 「不変条件」の型表現 Refinement types / 篩型 • 業務ルールを型で表現する • 意図を型で伝える • 不正な値は処理させない
20 運用を支える開発ノウハウ • 副作用を正しく型で表現する • エラー有無は型で分かるように • トランザクション境界を見極める • 一貫性のあるデータの取り扱い
• 分散トランザクションを避ける • API呼び出し・DBトランザクション • 綺麗に書けることを強制しない • 処理のわかりやすさ以外も考慮する • 障害時の深い調査も容易にする 型と無理の無い実装で防ぎ、リコンサイルで検証する
21 Part 3 — Scala を使い続けるための組織と人 未経験者を歓迎し、関数型の素養を育てる組織 採用 — Scala
経験者じゃなくても大丈夫 • 2025年度入社バックエンドエンジニア • Python / Go / Java 出身 • Scala経験者は少数派 • FOLIOが成し遂げたいことへの共感 • 「人生を豊かにすることに関わりたい」 • 「 証券システムに関わりたい」 • 「堅牢なシステムを作りたい」 • コーディング面接 • 12種類の言語実装を用意
22 オンボーディング • 言語機能を理解する • 未経験者向け scala_text • 社内書籍共有 •
ドメインを理解する • ドメインマスター講座 • 社内技術を理解する • backend newbie • 社内技術で開発をする • 開発ガイドライン • AI Review・設計書
23 オンボーディング • 言語機能を理解する • 未経験者向け scala_text • 社内書籍共有 •
ドメインを理解する • ドメインマスター講座 • 社内技術を理解する • backend newbie • 社内技術で開発をする • 開発ガイドライン • AI Review・設計書
24 オンボーディング • 言語機能を理解する • 未経験者向け scala_text • 社内書籍共有 •
ドメインを理解する • ドメインマスター講座 • 社内技術を理解する • backend newbie • 社内技術で開発をする • 開発ガイドライン • AI Review・設計書
25 オンボーディング • 言語機能を理解する • 未経験者向け scala_text • 社内書籍共有 •
ドメインを理解する • ドメインマスター講座 • 社内技術を理解する • backend newbie • 社内技術で開発をする • 開発ガイドライン • AI Review・設計書
26 オンボーディング • 言語機能を理解する • 未経験者向け scala_text • 社内書籍共有 •
ドメインを理解する • ドメインマスター講座 • 社内技術を理解する • backend newbie • 社内技術で開発をする • 開発ガイドライン • AI Review・設計書
関数型言語を 活かせる組織になる
28 10 年を踏まえて やりたいこと・守りたいものは、ずっと同じ 変わったもの • チームごとに適正のあるアーキテクチャ • クラウドシステムの利活用 変わらないもの
• Scala をコア開発に使う • 堅牢なシステムを型で守る思想 • 組織を成長させ続けるための開発 • ビジネスを伸ばすための技術活用
次の10年も、 証券システムのコア機能は Scala で守り続ける