学習・技術検証用デモ — 本システムは実際の銀行サービスではありません。

公開情報をもとに構築した教育目的のシステムです。実在する個人情報・口座情報・機密情報・認証情報等を入力しないでください。

ミニ銀行ACADEMY SYSTEM LEARNING
教材メニュー
学習進捗0 / 134
あと134項目
INTERMEDIATE · 中級COURSE 02 · BANKING

本物の銀行システムで考えること

実銀行は、巨大な1つのアプリではありません。止められない業務、長い歴史、外部network、規制、何重もの帳簿と人の運用を結ぶ社会インフラです。

03 / 07
BANKING · 銀行業務

銀行ビジネスと主要商品を、利用者・銀行・会計の視点から理解する。

先に学ぶ内容 — Prerequisite: 基礎

学ぶこと — LEARNING GOALS

このページで学ぶこと

  • 実銀行を構成する主要なシステム群
  • 正確さと24時間運用を両立する考え方
  • Minibankにない本番銀行の責任

体験21 · REAL BANKING(本物の銀行システム)

アプリが正常なら、銀行システム全体も正常と言えるか確かめよう

まずは予想をひと言。本文を読んだ後、教材内の参照元でMinibankの実装範囲を確認します。

体験学習 · STEP 1 / 5
  1. 01
    まず予想する — PREDICT

    まずここだけ:思ったことをひと言書く

    スマートフォンの銀行アプリが正常に動いていれば、その銀行のシステム全体も正常に動いていると言えるでしょうか?

    正解でなくて大丈夫です。「〜だと思う」から始めてみましょう。

    ヒント1を見る

    画面に「振込完了」と出ることと、銀行間の最終的な決済が終わっていることは、同じ意味でしょうか?

    ヒント2を見る

    定期預金の利息だけが実装されていて、普通預金の利息は実装されていない、ということはあり得るでしょうか?

    もっと詳しく:この問いで使う専門用語
    • System of recordは、複数の記録が食い違ったときに正しいとする記録です。
    • ClearingとSettlementは、参加者間の支払い整理と最終的な資金移動を指します。
    • Operational resilienceは、障害が起きても重要業務を続け、復旧する力です。
まずはひと言だけで大丈夫です。

この後の本文を最後まで読んでから、実際に操作して確かめるステップへ進みます。

日常語で理解する — PLAIN LANGUAGE

まず、ここだけつかむ

1

普通預金利息と貸出利息は未実装ですが、定期預金満期の税引前単利計算・元利入金は実装済みです。稼働DB適用はUNKNOWNです。

2

本物の銀行は1つのappではなく、口座、決済、card、融資、会計、risk、監査、顧客対応など多数のsystemと人で動きます。

3

『受付』『承認』『顧客口座への記帳』『銀行間の最終決済』は別の時点です。画面の完了表示だけでは、どこまで終わったか分かりません。

4

事故をゼロにするだけでなく、障害・cyber攻撃・災害が起きても重要業務を許容範囲で続け、復旧後に整合性を証明します。

順番に理解する — DIFFICULT PARTS, STEP BY STEP

難しいポイントを、順番にほどく

専門用語を覚えることより、「なぜ必要か」「このシステムのどこで使うか」を理解することが目標です。

01

System of record

やさしく言うと

あるdataについて最終的に正しいと決めた記録です。

なぜ必要?

複数systemの数字が違った時、何を基準に直すか決めるためです。

Minibankでは

資金残高はLedgerを正とし、bank_accounts.balanceは照合対象のcacheです。

02

Business date

やさしく言うと

銀行業務上の処理日です。暦の日付と異なる場合があります。

なぜ必要?

夜間batch、締め、休日、予約、value dateを一貫して扱うためです。

Minibankでは

本格的なbusiness date・日次締めは実装していません。

03

ClearingとSettlement

やさしく言うと

clearingは参加者間の支払額を整理し、settlementは最終的に資金を移すことです。

なぜ必要?

顧客画面の受付と外部機関間の決済完了を混同しないためです。

Minibankでは

外部銀行をまたがないため、銀行間clearing・settlementはありません。

04

Operational resilience

やさしく言うと

障害が起きても重要業務を許容範囲で続け、適応・復旧する力です。

なぜ必要?

防止策だけで全障害をなくすことはできないからです。

Minibankでは

正式な耐性度、multi-site DR、24時間operationsは未整備です。

05

Segregation of duties

やさしく言うと

1人で危険な操作を申請・承認・実行・隠蔽できないよう役割を分けます。

なぜ必要?

誤操作と内部不正の両方を抑えるためです。

Minibankでは

顧客と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 MINIBANKv15:版付きの金利と日次残高から、管理責任者が期間を指定して計算・支払う。自動の日次バッチではない
定期預金の満期利息IMPLEMENTED IN MINIBANKmature_time_depositで元本と利息を普通預金へ入金。税引前の単利。v15以降は契約時の価格を固定
貸出利息IMPLEMENTED IN MINIBANKv14:個人向けの学習用融資の日割利息、返済予定、未収利息から元本への充当。法人融資・繰上返済・貸倒引当なし
税・営業日・複雑な商品計算NOT IMPLEMENTED IN MINIBANK税控除、商品別day count/複利、営業日調整を実装済みとは扱わない

銀行システムは『都市』として見る

勘定系だけが銀行システムではありません。顧客接点、本人確認、融資、カード、決済、会計、risk、監査、data分析、監督報告、問い合わせ、障害対応が、多数のsystemと人を介してつながります。

すべてを同じdatabase・同じrelease周期へ詰め込むと、1か所の障害が銀行全体へ広がります。責任・data所有・障害範囲を分けつつ、どの記録が正かと照合方法を決めます。

領域主な仕事重要な問い
Channelmobile、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 partycloud、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の実装範囲を確認し、自分の言葉で説明してみます。

STEP 2〜5 / 5
  1. 02
    仕組みを確かめる — CONCEPT CHECK

    画面操作なしで、仕組みを確かめる

    この仕組みは、Mini Bankの画面には現れません。次のEvidenceとCode Trail、教材本文だけで理解を進めます。

  2. 03
    証拠を確認する — EVIDENCE

    何を見たか、1つずつ確かめる

    Evidence(判断の根拠となる記録)を確認したらチェックします。各項目の「何を見るか」を手がかりにしてください。

    画面を開けない項目は、Source Trail(教材の参照元)と教材の説明で確認できます。失敗を実際に起こす必要はありません。

  3. 04
    コードの処理経路を追う — CODE TRAIL

    コードを書く必要はありません

    ここでは「説明されている仕組みが、実際のMini Bankのどこに実装されているか」を確認します。まずは日本語の役割説明を読み、入力した依頼がどこへ渡るかをつかみましょう。コードの全文を読む必要はありません。

    まず実装済みの範囲を示すMigrationを見て、次にAPIの境界を見ます。Minibankがどこまでを対象にしているかを確かめましょう。

    定期預金満期の実装。何が実装済みで何が対象外かを探します。

    supabase/migrations/20260824170001_time_deposit_maturity.sql

    Minibankの顧客・管理API境界。外部銀行や決済網への接続が無いことを探します。

    src/app/api/v1/
    教材の参照元を確認する — Source Trail ↓
  4. 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が実銀行のどの部分を対象外としているか説明できる
予想5文字以上・証拠2項目・説明20文字以上で完了できます。

証拠の確認:0 / 2。LEVEL 2(専門用語での説明)は任意です。

入力はこのブラウザに保存されます。Academy教材の進捗とは別の学習メモです。

理解を確かめる — CHECK YOUR UNDERSTANDING

5問で理解チェック

答えを頭の中で考えてから、各項目を開いて確認してください。

Q1預金利息はすべて未実装ですか?
答え

いいえ。定期預金満期の単利計算・元利入金は実装されています。普通預金利息、貸出利息、税控除とは分けます。

Q2mobile appが正常なら銀行system全体も正常ですか?
答え

限りません。外部決済、batch、会計、照合、管理業務など別のsystemが失敗している可能性があります。

Q3顧客画面に完了と出たら銀行間決済も必ず完了していますか?
答え

取引方式によります。受付・承認・記帳・最終決済のどの状態を表示しているか確認します。

Q4backupがあればresilienceは完成ですか?
答え

いいえ。復元、切替、重要業務の継続、復旧後の照合を実際にtestする必要があります。

Q5Minibankの280件の回帰testで実銀行の準備が証明されますか?
答え

証明されません。実装済み範囲の契約を確認するもので、外部決済、負荷、DR、規制、運用などは別途必要です。

ここまで読めましたか?

完全に暗記する必要はありません。大切な考え方を説明できそうなら押してください。

業界・外部の参照元 — INDUSTRY / EXTERNAL SOURCE

業界資料・参考文献

一般論と業界知識の根拠です。外部サイトを新しいタブで開きます。

教材の参照元 — SOURCE TRAIL

根拠と関連教材

CURRENT IMPLEMENTATIONは確認したrepository内の実装です。HISTORICAL IMPLEMENTATIONは導入・修正の履歴で、後続migrationによる再定義があり得ます。RELATED LESSONは教材への案内で、実装の一次Sourceではありません。ASSUMPTIONは仮定、UNKNOWNは未確認を表します。

確認基点: d02eae8914f39cbf06bfe422dc39c71886f82b3e / 2026-09-11。稼働環境への適用確認: UNKNOWN。パス実在の自動検査と、記述した技術的事実の確認は別です。

  • 現在の実装 — CURRENT IMPLEMENTATION — Primary Sourcesupabase/migrations/20260930110000_v15_pricing.sqlpublic.mature_time_deposit定期満期の最新定義。v15以降の契約は契約時の価格(版)の金利を使い、JST暦日数で単利・税引前・floorの利息を計算する。v15より前の契約は従来の式のまま。
  • 現在の実装 — CURRENT IMPLEMENTATIONsupabase/migrations/20260930110000_v15_pricing.sqlpricing.run_ordinary_interest / pricing.simple_interest普通預金の利息(管理責任者が期間ごとに実行)。日次の終値残高×その日に有効な金利を合計して1回だけ切り捨てる。
  • 現在の実装 — CURRENT IMPLEMENTATIONsupabase/migrations/20260930100000_v14_lending.sqllending.accrue_locked / lending.repay貸出利息(v14)。日割で計上し、返済のたびに未収利息から充当する。
  • 過去の実装 — HISTORICAL IMPLEMENTATIONsupabase/migrations/20260920115556_scalar_journal_posting_atomic_cache.sqlv15の直前の定期満期の定義。計算式は v15 より前の契約で現在も使われる。
  • 過去の実装 — HISTORICAL IMPLEMENTATIONsupabase/migrations/20260907113002_serialize_account_products.sql口座→商品の順のlockを導入した前々回の定義。
  • 過去の実装 — HISTORICAL IMPLEMENTATIONsupabase/migrations/20260824170001_time_deposit_maturity.sql満期利息の導入履歴。関数本体は後続migrationで再定義。
  • 現在の実装 — CURRENT IMPLEMENTATIONsrc/app/api/v1/Minibankの顧客・管理API境界
  • 過去の実装 — HISTORICAL IMPLEMENTATIONsupabase/migrations/口座・Ledger・security・audit・照合のDB設計
  • 現在の実装 — CURRENT IMPLEMENTATIONscripts/regression/実装済み契約を守る回帰検査
  • 現在の実装 — CURRENT IMPLEMENTATIONe2e/full-journey.spec.ts現在の顧客・管理journeyの範囲