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

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

ミニ銀行ACADEMY SYSTEM LEARNING
教材メニュー
学習進捗0 / 134
あと134項目
ADVANCED · 発展COURSE 03 · BANKING SYSTEM

ReconciliationとIntegrity Check

制約で予防するだけでなく、保存済みデータを横断して異常を発見する仕組みを学びます。

08 / 08
BANKING SYSTEM · 銀行システム

台帳、振込、KYC、権限、監査、照合をMinibankの実装と結び付ける。

先に学ぶ内容 — Prerequisite: 基礎 / 銀行業務

学ぶこと — LEARNING GOALS

このページで学ぶこと

  • 予防と検出の違い
  • 照合対象
  • 正常・異常をどのように記録するか

体験06 · RECONCILIATION(照合)

小さな間違いは、どう見つかるか確かめよう

まずは予想をひと言。本文を読んだ後、管理者向けの検査画面と、その記録を確認します。

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

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

    銀行のシステムに小さな記録の食い違いがあったとき、誰かが気づく前に自動的に直ると思いますか?

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

    ヒント1を見る

    「間違いを起こさせない仕組み」と「起きた間違いを見つける仕組み」は、同じものでしょうか?

    ヒント2を見る

    見つかった食い違いは、誰かが確認するまでどうなっていると思いますか?

    もっと詳しく:この問いで使う専門用語
    • Constraint(制約)は、データベースが不正な状態を最初から作らせない仕組みです。
    • Reconciliation(照合)は、保存済みの記録を後から比べて食い違いを探すことです。
    • Integrity Check(整合性検査)は、照合の実行そのものです。
    • Issue(検出された問題)は、照合で見つかった食い違いの記録です。
まずはひと言だけで大丈夫です。

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

日常語で理解する — PLAIN LANGUAGE

まず、ここだけつかむ

1

照合は、保存済みのデータを複数の角度から再計算し、食い違いや孤立を見つける健康診断です。制約が事故を入口で止めるのに対し、照合は残ってしまった異常を発見します。

2

台帳残高とcached_balance、業務取引と仕訳、元仕訳と逆仕訳、顧客口座と台帳口座などを比較します。

3

検出しただけでは直りません。重大度、対象、検出時刻を保存し、通知・調査・安全な是正へつなげる運用が必要です。

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

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

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

01

予防と検出

やさしく言うと

制約や権限は不正状態を作らせない予防、reconciliationは既にある異常を探す検出です。

なぜ必要?

未知の不具合、過去version、運用者の強権限操作まで予防だけで完全には覆えません。

Minibankでは

DB constraintとRLS/RPCに加え、reconciliation.run_check()を用意しています。

02

source of truthとcache

やさしく言うと

正しいとみなす正式記録と、表示を速くする複製値です。

なぜ必要?

両者がずれた際、どちらを基準に調査・再構築するか決める必要があります。

Minibankでは

ledgerを正とし、bank_accounts.cached_balanceとの差を検出します。

03

orphan

やさしく言うと

親となる記録を失い、意味を説明できなくなった孤立データです。

なぜ必要?

仕訳はあるのに口座がない、逆仕訳元がない状態は会計履歴を壊します。

Minibankでは

外部キーに加え、検査でmissing ledger accountなどの異常を探します。

04

Integrity RunとIssue

やさしく言うと

Runは1回の検査実行、Issueはその中で見つかった個別問題です。

なぜ必要?

いつ何を検査し、何件見つけ、解決したかを運用で追跡できます。

Minibankでは

検査結果をrun単位とissue単位で保存し、管理画面から確認します。

発展 — ADVANCEDもっと詳しく確認する最初の学習では読まなくても問題ありません。仕組みをもっと深く理解したい場合に開いてください。

通常状態と異常状態

対象通常検出する異常例
残高ledger集計 = cached_balanceBALANCE_MISMATCH
仕訳2行以上、借方 = 貸方JOURNAL_LINES_INSUFFICIENT / JOURNAL_NOT_BALANCED
口座対応ledger accountがあるMISSING_LEDGER_ACCOUNT
業務記録transfer/operationとjournalが対応MISSING_TRANSFER / ORPHAN_TRANSFER / TYPE_MISMATCH
逆仕訳対象・金額・参照が一致し1回だけREVERSAL_* / DOUBLE_REVERSAL
管理active admin_managerが1人以上、actor分離NO_ACTIVE_ADMIN_MANAGER / ACTOR_COLLISION

検査の流れ

  1. 01service_roleまたはactive adminがwrapperを呼ぶ
  2. 02reconciliation.run_check()がカテゴリ別に照合
  3. 03異常をintegrity_issuesへ追記
  4. 04件数と状態をintegrity_runsへ記録
  5. 05管理画面のread APIで履歴を確認

実際のMinibankでは

`full` のほか `balance`、`journal`、`financial_operations`、`reversal` を選べます。検査結果tableも通常運用ではappend-onlyです。既知のテストfixtureはmigration内で明示的に除外されています。

体験学習の続き · LEARNING LOOP

ここまで読めましたか?続けて確認してみましょう

予防と検出の違いを読んだところで、実際の検査画面とその記録を確認し、自分の言葉で説明してみます。

STEP 2〜5 / 5
  1. 02
    実際に観察する — OBSERVE

    同じ仕組みを、動く画面から観察する

    この仕組みは管理者向けの検査画面でのみ確認できます。管理者ログインがない場合は、この教材内の図・説明・Source Trail(教材の参照元)で代替学習し、次へ進めます。

    管理者ログインがない場合:教材の参照元で確認する ↓
  2. 03
    証拠を確認する — EVIDENCE

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

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

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

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

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

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

    基本の順序は、画面 → API Route(依頼を受ける窓口)→ TransferService(処理をつなぐサービス)→ DB / RPC(記録の保存場所と、その処理の呼び出し)です。まず最初の2つを見て、続くサービスは「もっと詳しく」で確認します。

    Migration(DB定義の変更履歴)。残高・仕訳・業務記録・逆仕訳を照合する定義を確認します。

    supabase/migrations/20260823120001_add_integrity_check_missing_gaps.sql

    管理者向けの検査結果画面。検査履歴と問題一覧をどう表示するかを探します。

    src/app/admin/(protected)/integrity/page.tsx
    教材の参照元を確認する — Source Trail ↓
  4. 05
    自分の言葉で説明する — EXPLAIN

    LEVEL 1 — やさしい説明(まずここだけ)

    制約(constraint)と照合(reconciliation)は、何を防ぎ、何を見つけるという役割の違いがあるでしょうか? 短い2文を目安に説明してください。

    日常語だけで完了できます。専門用語の数や正誤を自動採点するものではありません。

    ヒント1を見る

    「制約」と「照合」という2つの言葉を使って書いてみましょう。

    ヒント2を見る

    見つかった食い違いが、自動で直るべきか、人が確認すべきかを考えてみましょう。

    もっと詳しく:LEVEL 2 — 専門用語を使った説明(任意)

    Constraint、Reconciliation、Integrity Run、Issueの4つを使って、異常が発見されるまでの流れを説明してみましょう。

    挑戦する場合は、上の説明欄に追記できます。追加しなくても完了できます。

    説明の確認ポイント — Checkpoint
    • 制約と照合が別の役割であると説明できる
    • 検出された問題は自動で直るとは限らないと説明できる
予想5文字以上・証拠2項目・説明20文字以上で完了できます。

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

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

理解を確かめる — CHECK YOUR UNDERSTANDING

3問で理解チェック

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

Q1DB制約があれば照合は不要ですか?
答え

不要ではありません。未知の不具合や過去データ、強権限操作などで残った異常を検出する役割があります。

Q2残高cacheと台帳が違ったらどちらを基準にしますか?
答え

設計上のsource of truthである台帳を基準に原因を調査します。自動修正は承認と監査を伴うべきです。

Q3異常を画面表示するだけで十分ですか?
答え

十分ではありません。通知、担当、調査手順、重大度、是正と再検査まで運用設計が必要です。

ここまで読めましたか?

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

教材の参照元 — SOURCE TRAIL

根拠と関連教材

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

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

  • 過去の実装 — HISTORICAL IMPLEMENTATIONsupabase/migrations/20260821110001_create_reconciliation_schema_and_tables.sqlrunとissueの記録
  • 過去の実装 — HISTORICAL IMPLEMENTATIONsupabase/migrations/20260823120001_add_integrity_check_missing_gaps.sqlreconciliation.run_check()残高・仕訳・業務記録・逆仕訳の検査
  • 過去の実装 — HISTORICAL IMPLEMENTATIONsupabase/migrations/20260823160001_enforce_actor_separation.sqlACTOR_COLLISION検出
  • 現在の実装 — CURRENT IMPLEMENTATIONsrc/app/admin/(protected)/integrity/page.tsx管理画面の検査履歴