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

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

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

中級者編:設計を説明する

中級者の目標は、コードを読めることだけではありません。業務要件をデータ・状態・権限・トランザクションへ翻訳し、その設計理由を他者へ説明できることです。

02 / 11
SOFTWARE ENGINEERING · ソフトウェア工学

境界、transaction、並行制御、脅威、テスト、障害対応をFailure Firstで学ぶ。

Prerequisite: FOUNDATION / BANKING SYSTEM

LEARNING GOALS

このページで学ぶこと

  • 入門から中級へ上がるための能力差
  • 設計レビューで使う5つの視点
  • Minibankを使った中級演習の進め方

PLAIN LANGUAGE

まず、ここだけつかむ

1

中級者は、動く仕組みを説明するだけでなく、なぜその境界・状態・制約にしたかを説明します。

2

要件をtableへ直訳せず、System of Record、状態遷移、不変条件、失敗時の結果へ分解します。

3

設計の主張は、migration・query・test・監視で確かめられる言葉にします。

DIFFICULT PARTS, STEP BY STEP

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

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

01

設計理由

やさしく言うと

構造を選んだ目的・制約・捨てた案です。

なぜ必要?

形だけをまねると、前提が違う変更で安全装置を壊すからです。

Minibankでは

Ledgerを正としcached_balanceを派生値にする理由を不変条件から説明します。

02

検証可能な要件

やさしく言うと

testやqueryで真偽を判断できる条件です。

なぜ必要?

『安全』『高速』のような曖昧語では完成を判定できません。

Minibankでは

同じrequest identityではjournalが1件だけ、とrecord数で検証します。

03

責任境界

やさしく言うと

どの層・componentが何を必ず守るかの分担です。

なぜ必要?

全員が誰かの確認を期待すると、実際には誰も守らない穴ができます。

Minibankでは

UIは入力支援、DBは認可・lock・会計不変条件を担当します。

入門者と中級者の違い

観点入門でできる中級でできる
業務振込の流れを説明する例外・取消・再送を含む状態遷移を定義する
データtableの役割を知る正となる記録、派生値、一意性、履歴を設計する
APIrequestとresponseを追うUI・API・DBの責任と信頼境界を分ける
会計借方と貸方を読む業務eventからrule・仕訳・照合まで追跡する
運用testが必要だと分かる監視・復旧・手作業・証拠をrelease前に設計する

中級者が設計前に答える5問

  1. 01何がSystem of Recordか
  2. 02許可される状態と遷移は何か
  3. 03絶対に破れない不変条件は何か
  4. 04同時実行・再送・途中失敗でどうなるか
  5. 05本番で異常をどう検知し復旧するか

推奨する学習順

順番教材成果物
1業務をデータモデルへ翻訳するaggregate・状態機械・不変条件表
2トランザクション境界を設計する成功・rollback・冪等性の処理図
3APIとDBの責任境界信頼境界と認可責任表
4運用できる設計へ仕上げるSLI・alert・runbook・release checklist
5既存の振込・会計・security教材を再読Minibankの実装を根拠にした設計レビュー

中級修了課題:振込変更をレビューする

『振込手数料を時間帯で変える』という変更を想定し、仕様だけでなく、保存すべき金額snapshot、Accounting Rule、idempotency fingerprint、同時実行、公開error、audit、照合、移行、rollbackまで挙げてください。

正解を暗記する課題ではありません。影響先を漏れなく地図へ置き、どの証拠で安全を確認するか説明できれば中級の入口に立っています。

  • 事実・仮定・未決定事項を分ける
  • 正常系だけでなく再送・競合・途中失敗を書く
  • DB制約で守るものと運用で検知するものを分ける
  • 利用者向けmessageと内部診断情報を分ける

実際のMinibankでは

transfer_requests、OTP、transfers、journal、cached_balance、auditが、1件の振込を異なる責任で表します。中級編ではtable名を覚えるのではなく、なぜ分かれ、どれがどの時点の事実を表すのかを読みます。

この教材の説明は実装を読む入口です。コードにない保証を推測せず、migration、RPC、service、回帰testを順番に照合してください。

CHECK YOUR UNDERSTANDING

3問で理解チェック

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

Q1中級者の成果はコード量ですか?
答え

いいえ。業務要件を状態・データ・権限・失敗へ分解し、設計理由と証拠を説明できることです。

Q2『二重処理しない』をどう検証可能にしますか?
答え

同じrequest identityを複数回・並行送信し、業務recordとjournalが1件だけであることを確認します。

Q3既存教材を読み終えたら中級修了ですか?
答え

読むだけではなく、変更課題に対して影響範囲・不変条件・test・運用を自分で作る必要があります。

ここまで読めましたか?

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

SOURCE TRAIL

根拠と関連教材

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

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

  • RELATED LESSON/docs/architecture関連教材の入口。既存の入門・業務・会計教材
  • HISTORICAL IMPLEMENTATIONsupabase/migrations/DB設計判断を順番に残すmigration
  • CURRENT IMPLEMENTATIONscripts/regression/設計上の契約を検証する回帰test