本物の銀行システムで考えること
実銀行は、巨大な1つのアプリではありません。止められない業務、長い歴史、外部network、規制、何重もの帳簿と人の運用を結ぶ社会インフラです。
銀行ビジネスと主要商品を、利用者・銀行・会計の視点から理解する。
先に学ぶ内容 — Prerequisite: 基礎学ぶこと — LEARNING GOALS
このページで学ぶこと
- 実銀行を構成する主要なシステム群
- 正確さと24時間運用を両立する考え方
- Minibankにない本番銀行の責任
体験21 · REAL BANKING(本物の銀行システム)
アプリが正常なら、銀行システム全体も正常と言えるか確かめよう
まずは予想をひと言。本文を読んだ後、教材内の参照元でMinibankの実装範囲を確認します。
- 01まず予想する — PREDICT
まずここだけ:思ったことをひと言書く
スマートフォンの銀行アプリが正常に動いていれば、その銀行のシステム全体も正常に動いていると言えるでしょうか?
正解でなくて大丈夫です。「〜だと思う」から始めてみましょう。
ヒント1を見る
画面に「振込完了」と出ることと、銀行間の最終的な決済が終わっていることは、同じ意味でしょうか?
ヒント2を見る
定期預金の利息だけが実装されていて、普通預金の利息は実装されていない、ということはあり得るでしょうか?
もっと詳しく:この問いで使う専門用語
- System of recordは、複数の記録が食い違ったときに正しいとする記録です。
- ClearingとSettlementは、参加者間の支払い整理と最終的な資金移動を指します。
- Operational resilienceは、障害が起きても重要業務を続け、復旧する力です。
日常語で理解する — PLAIN LANGUAGE
まず、ここだけつかむ
普通預金利息と貸出利息は未実装ですが、定期預金満期の税引前単利計算・元利入金は実装済みです。稼働DB適用はUNKNOWNです。
本物の銀行は1つのappではなく、口座、決済、card、融資、会計、risk、監査、顧客対応など多数のsystemと人で動きます。
『受付』『承認』『顧客口座への記帳』『銀行間の最終決済』は別の時点です。画面の完了表示だけでは、どこまで終わったか分かりません。
事故をゼロにするだけでなく、障害・cyber攻撃・災害が起きても重要業務を許容範囲で続け、復旧後に整合性を証明します。
順番に理解する — DIFFICULT PARTS, STEP BY STEP
難しいポイントを、順番にほどく
専門用語を覚えることより、「なぜ必要か」「このシステムのどこで使うか」を理解することが目標です。
System of record
あるdataについて最終的に正しいと決めた記録です。
複数systemの数字が違った時、何を基準に直すか決めるためです。
資金残高はLedgerを正とし、bank_accounts.balanceは照合対象のcacheです。
Business date
銀行業務上の処理日です。暦の日付と異なる場合があります。
夜間batch、締め、休日、予約、value dateを一貫して扱うためです。
本格的なbusiness date・日次締めは実装していません。
ClearingとSettlement
clearingは参加者間の支払額を整理し、settlementは最終的に資金を移すことです。
顧客画面の受付と外部機関間の決済完了を混同しないためです。
外部銀行をまたがないため、銀行間clearing・settlementはありません。
Operational resilience
障害が起きても重要業務を許容範囲で続け、適応・復旧する力です。
防止策だけで全障害をなくすことはできないからです。
正式な耐性度、multi-site DR、24時間operationsは未整備です。
Segregation of duties
1人で危険な操作を申請・承認・実行・隠蔽できないよう役割を分けます。
誤操作と内部不正の両方を抑えるためです。
顧客とactive adminを分けますが、本番同等のmaker-checker全体はありません。
発展 — ADVANCEDもっと詳しく確認する最初の学習では読まなくても問題ありません。仕組みをもっと深く理解したい場合に開いてください。
利息は商品別に実装状況を区別する
定期満期の利息は、v15以降に開いた契約では、契約時に固定した年利(interest_rate_bps)と、開始日から満期日までのJST暦日数で、利息=floor(元本×年利bps×日数÷(10,000×365))と計算します。v15より前の契約は従来の式(日数=(maturity_date−opened_at)の秒数/86400、利息=floor(元本×interest_rate_bps/10000×期間日数/365))のままです。元本はTIME_DEPOSITS_PAYABLEの借方、正の利息はINTEREST_EXPENSEの借方、元利合計は普通預金負債の貸方です。端数切捨てで利息0なら利息行を作りません。これは満期処理のコードであり、自動batch稼働や本番適用の確認ではありません。
| 対象 | Implementation Status | 範囲 |
|---|---|---|
| 普通預金利息 | IMPLEMENTED IN MINIBANK | v15:版付きの金利と日次残高から、管理責任者が期間を指定して計算・支払う。自動の日次バッチではない |
| 定期預金の満期利息 | IMPLEMENTED IN MINIBANK | mature_time_depositで元本と利息を普通預金へ入金。税引前の単利。v15以降は契約時の価格を固定 |
| 貸出利息 | IMPLEMENTED IN MINIBANK | v14:個人向けの学習用融資の日割利息、返済予定、未収利息から元本への充当。法人融資・繰上返済・貸倒引当なし |
| 税・営業日・複雑な商品計算 | NOT IMPLEMENTED IN MINIBANK | 税控除、商品別day count/複利、営業日調整を実装済みとは扱わない |
銀行システムは『都市』として見る
勘定系だけが銀行システムではありません。顧客接点、本人確認、融資、カード、決済、会計、risk、監査、data分析、監督報告、問い合わせ、障害対応が、多数のsystemと人を介してつながります。
すべてを同じdatabase・同じrelease周期へ詰め込むと、1か所の障害が銀行全体へ広がります。責任・data所有・障害範囲を分けつつ、どの記録が正かと照合方法を決めます。
| 領域 | 主な仕事 | 重要な問い |
|---|---|---|
| Channel | mobile、Web、ATM、店舗、call center | 同じ顧客・取引を一貫して扱えるか |
| Core banking | 口座、残高、利息、商品、business date | 正式記録と締め処理は何か |
| Payments hub | 振込、口座振替、card、外部network接続 | 受付・決済・清算のどこまで完了したか |
| Customer / KYC / AML | 本人、関係者、制裁、取引monitoring | 継続的にrisk変化を検知できるか |
| Loans | 審査、契約、実行、返済、延滞、引当 | 判断根拠と債権状態を再現できるか |
| Finance / Risk | 総勘定元帳、ALM、資本、流動性、規制報告 | 業務明細から銀行全体の数字へ追跡できるか |
| Operations | 監視、照合、例外処理、顧客対応、BCP | 自動処理できない時に誰が安全に復旧するか |
取引の4つの時点を混ぜない
| 時点 | 意味 | 例 |
|---|---|---|
| 受付 | 依頼を受け、形式と本人を確認した | 振込予約やcard authorization request |
| 承認 | 現時点の条件で進めてよいと判断した | 残高を確保したが最終売上は未到着 |
| 記帳 | 顧客口座・内部Ledgerへ金額を反映した | 利用可能残高と帳簿残高が異なる場合もある |
| 清算・決済完了 | 参加機関間の債権債務を計算し、最終的な資金決済を終えた | 外部銀行・card networkをまたぐ資金移動 |
大量取引と締め処理
銀行では日中のonline処理に加え、利息、手数料、口座振替、明細、会計集計、規制報告など大量のbatch処理があります。暦の日付、銀行のbusiness date、value date、予約日、実際の決済日を区別します。
peak時に無制限にrequestを受けるのではなく、capacity、queue、backpressure、優先順位、timeout、retry、重複排除を設計します。締め処理が遅れた場合も、重要決済をどこまで継続するか決めます。
- 同じ取引をend-to-endで追えるcorrelation id
- 順番が入れ替わっても正しく状態を収束させる設計
- retryしてよい処理と人の確認が必要な処理の区別
- online・batch・外部network間の照合
- 限界容量と縮退運転を定期的にtest
正しく守るだけでなく、壊れても重要業務を続ける
実銀行は障害をゼロにする努力だけでなく、障害が起きる前提で重要業務、許容中断、代替手段、復旧順序を定めます。systemが復帰しても、欠落・重複・順序逆転がないか照合するまで業務復旧は終わりません。
| 考慮 | 具体例 |
|---|---|
| 可用性 | 複数拠点、冗長化、依存先障害、切替test |
| Cyber resilience | 防御、検知、封じ込め、復旧、侵害済みbackupへの備え |
| Data integrity | 不変backup、復元test、Ledger・業務・外部明細の照合 |
| Third party | cloud、network、vendor停止時の責任と代替 |
| Human operations | 職務分離、二者承認、runbook、緊急権限と事後監査 |
| Customer impact | 影響件数・金額・期間、告知、問い合わせ、補償判断 |
変更そのものが大きなrisk
長年動く銀行には、古いsystem、買収したsystem、外部仕様、手作業が共存します。古いから危険、最新だから安全とは限りません。変更範囲を理解できないこと、移行前後のdataが照合できないことが大きなriskです。
本番変更では、要件と規制のtraceability、設計審査、職務分離、段階release、parallel run、cutover、rollback、監視強化、顧客対応まで1つのchangeとして扱います。
実際のMinibankでは
MinibankはNext.js、Supabase Auth、PostgREST、PostgreSQLを使い、口座・KYC・内部振込・Ledger・Audit・Reconciliationを1つの学習systemで示します。DB transaction、row lock、idempotency、RLS、private schemaなど、本番でも重要な基本原則を小さく観察できます。
一方、外部決済network、複数通貨、普通預金利息・融資、card、口座振替、AML transaction monitoring、総勘定元帳、日次締め、規制報告、multi-region DR、24時間operations、call center連携は備えていません。Minibankのtest合格を本物の銀行への準備完了とは判断できません。
体験学習の続き · LEARNING LOOP
ここまで読めましたか?続けて確認してみましょう
本物の銀行システムの広がりを読んだところで、教材内の参照元でMinibankの実装範囲を確認し、自分の言葉で説明してみます。
- 02仕組みを確かめる — CONCEPT CHECK
画面操作なしで、仕組みを確かめる
この仕組みは、Mini Bankの画面には現れません。次のEvidenceとCode Trail、教材本文だけで理解を進めます。
- 03証拠を確認する — EVIDENCE
何を見たか、1つずつ確かめる
Evidence(判断の根拠となる記録)を確認したらチェックします。各項目の「何を見るか」を手がかりにしてください。
画面を開けない項目は、Source Trail(教材の参照元)と教材の説明で確認できます。失敗を実際に起こす必要はありません。
- 04コードの処理経路を追う — CODE TRAIL
コードを書く必要はありません
ここでは「説明されている仕組みが、実際のMini Bankのどこに実装されているか」を確認します。まずは日本語の役割説明を読み、入力した依頼がどこへ渡るかをつかみましょう。コードの全文を読む必要はありません。
まず実装済みの範囲を示すMigrationを見て、次にAPIの境界を見ます。Minibankがどこまでを対象にしているかを確かめましょう。
教材の参照元を確認する — Source Trail ↓定期預金満期の実装。何が実装済みで何が対象外かを探します。
supabase/migrations/20260824170001_time_deposit_maturity.sqlMinibankの顧客・管理API境界。外部銀行や決済網への接続が無いことを探します。
src/app/api/v1/ - 05自分の言葉で説明する — EXPLAIN
LEVEL 1 — やさしい説明(まずここだけ)
なぜ画面に「完了」と表示されることと、銀行間の決済が完全に終わっていることは、同じとは限らないのでしょうか? 短い2文を目安に説明してください。
日常語だけで完了できます。専門用語の数や正誤を自動採点するものではありません。
ヒント1を見る
「受付」「承認」「記帳」「決済」という言葉の中から2つを選んで書いてみましょう。
ヒント2を見る
Minibankが対象外としている部分を1つ挙げてみましょう。
もっと詳しく:LEVEL 2 — 専門用語を使った説明(任意)
System of record、Business date、ClearingとSettlement、Operational resilienceの4つを使って、実銀行とMinibankの違いを説明してみましょう。
挑戦する場合は、上の説明欄に追記できます。追加しなくても完了できます。
説明の確認ポイント — Checkpoint- 受付・承認・記帳・決済が別の時点であると説明できる
- Minibankが実銀行のどの部分を対象外としているか説明できる
理解を確かめる — CHECK YOUR UNDERSTANDING
5問で理解チェック
答えを頭の中で考えてから、各項目を開いて確認してください。
Q1預金利息はすべて未実装ですか?
いいえ。定期預金満期の単利計算・元利入金は実装されています。普通預金利息、貸出利息、税控除とは分けます。
Q2mobile appが正常なら銀行system全体も正常ですか?
限りません。外部決済、batch、会計、照合、管理業務など別のsystemが失敗している可能性があります。
Q3顧客画面に完了と出たら銀行間決済も必ず完了していますか?
取引方式によります。受付・承認・記帳・最終決済のどの状態を表示しているか確認します。
Q4backupがあればresilienceは完成ですか?
いいえ。復元、切替、重要業務の継続、復旧後の照合を実際にtestする必要があります。
Q5Minibankの280件の回帰testで実銀行の準備が証明されますか?
証明されません。実装済み範囲の契約を確認するもので、外部決済、負荷、DR、規制、運用などは別途必要です。
完全に暗記する必要はありません。大切な考え方を説明できそうなら押してください。
業界・外部の参照元 — INDUSTRY / EXTERNAL SOURCE
業界資料・参考文献
一般論と業界知識の根拠です。外部サイトを新しいタブで開きます。
- 金融庁 — 主要行等向け監督指針:オペレーショナル・レジリエンス
重要業務、耐性度、system risk、顧客影響を含む監督上の着眼点
- Basel Committee — Principles for operational resilience
governance、business continuity、third party、incident、ICT resilienceの国際原則
- 日本銀行 — 決済システムレポート
日本の決済systemと中央銀行のoversightを理解する資料
- 金融庁 — 金融分野におけるサイバーセキュリティ対策
金融機関のcybersecurityに関する公式資料とguideline
教材の参照元 — SOURCE TRAIL
根拠と関連教材
CURRENT IMPLEMENTATIONは確認したrepository内の実装です。HISTORICAL IMPLEMENTATIONは導入・修正の履歴で、後続migrationによる再定義があり得ます。RELATED LESSONは教材への案内で、実装の一次Sourceではありません。ASSUMPTIONは仮定、UNKNOWNは未確認を表します。
確認基点: d02eae8914f39cbf06bfe422dc39c71886f82b3e / 2026-09-11。稼働環境への適用確認: UNKNOWN。パス実在の自動検査と、記述した技術的事実の確認は別です。
- 現在の実装 — CURRENT IMPLEMENTATION — Primary Source
supabase/migrations/20260930110000_v15_pricing.sqlpublic.mature_time_deposit定期満期の最新定義。v15以降の契約は契約時の価格(版)の金利を使い、JST暦日数で単利・税引前・floorの利息を計算する。v15より前の契約は従来の式のまま。 - 現在の実装 — CURRENT IMPLEMENTATION
supabase/migrations/20260930110000_v15_pricing.sqlpricing.run_ordinary_interest / pricing.simple_interest普通預金の利息(管理責任者が期間ごとに実行)。日次の終値残高×その日に有効な金利を合計して1回だけ切り捨てる。 - 現在の実装 — CURRENT IMPLEMENTATION
supabase/migrations/20260930100000_v14_lending.sqllending.accrue_locked / lending.repay貸出利息(v14)。日割で計上し、返済のたびに未収利息から充当する。 - 過去の実装 — HISTORICAL IMPLEMENTATION
supabase/migrations/20260920115556_scalar_journal_posting_atomic_cache.sqlv15の直前の定期満期の定義。計算式は v15 より前の契約で現在も使われる。 - 過去の実装 — HISTORICAL IMPLEMENTATION
supabase/migrations/20260907113002_serialize_account_products.sql口座→商品の順のlockを導入した前々回の定義。 - 過去の実装 — HISTORICAL IMPLEMENTATION
supabase/migrations/20260824170001_time_deposit_maturity.sql満期利息の導入履歴。関数本体は後続migrationで再定義。 - 現在の実装 — CURRENT IMPLEMENTATION
src/app/api/v1/Minibankの顧客・管理API境界 - 過去の実装 — HISTORICAL IMPLEMENTATION
supabase/migrations/口座・Ledger・security・audit・照合のDB設計 - 現在の実装 — CURRENT IMPLEMENTATION
scripts/regression/実装済み契約を守る回帰検査 - 現在の実装 — CURRENT IMPLEMENTATION
e2e/full-journey.spec.ts現在の顧客・管理journeyの範囲