業界知識:技術的負債と銀行の信用
システムは完成した瞬間から古くなります。負債をゼロにするのではなく、信用を傷つける前に見つけ、測り、返す方法を学びます。
金融ITの技術選択、品質保証、安定稼働、業界の変化を設計判断へつなげる。
先に学ぶ内容 — Prerequisite: 銀行システム / ソフトウェア工学学ぶこと — LEARNING GOALS
このページで学ぶこと
- 技術的負債の正しい意味
- AI時代の理解負債・認知負債
- SLOとerror budgetによる運用判断
体験45 · INDUSTRY(技術的負債と信用)
技術的負債は、見つけたらすべて即座に解消すべきものか確かめよう
まずは予想をひと言。本文を読んだ後、教材内の参照元で実際の回帰testとmigration履歴を確認します。
- 01まず予想する — PREDICT
まずここだけ:思ったことをひと言書く
技術的負債は、見つけたら悪いものとして即座にすべて解消すべきだと思いますか?
正解でなくて大丈夫です。「〜だと思う」から始めてみましょう。
ヒント1を見る
負債をすべて即座に返そうとすると、他に何を犠牲にするでしょうか?
ヒント2を見る
『放置』と『理由を記録して意図的に保有する』は同じでしょうか?
もっと詳しく:この問いで使う専門用語
- 技術的負債は、今の速さと引き換えに将来の変更へ追加コストを残す状態です。
- 理解負債は、仕組みは動くがなぜその設計か人が説明できない状態です。
- SLOは、利用者にとって大切な安定性を測定可能な目標値にしたものです。
日常語で理解する — PLAIN LANGUAGE
まず、ここだけつかむ
技術的負債とは、急いだ実装や後から分かった設計不足によって、将来の変更・保守・障害対応へ追加コストがかかる状態です。すべてが悪ではありませんが、把握と返済判断が必要です。
AIが大量のコードを作れる時代には、『動くが誰も理由を説明できない』という理解負債や、複雑すぎて変更範囲を判断できない認知負債も増えます。
金融システムでは、負債を見た目の古さではなく、金額・権限・監査・安定稼働へ与えるriskで優先順位付けします。
順番に理解する — DIFFICULT PARTS, STEP BY STEP
難しいポイントを、順番にほどく
専門用語を覚えることより、「なぜ必要か」「このシステムのどこで使うか」を理解することが目標です。
技術的負債
今の速さと引き換えに、将来の変更へ追加コストを残す状態です。
負債を単なるコード品質の議論にせず、事業価値・risk・返済時期として話せます。
負荷試験、運用runbook、復旧訓練などの不足を、影響と期限付きで管理する対象にします。
理解負債
仕組みは動くが、なぜその設計なのか人が説明できない状態です。
理由を知らずに安全装置を削除すると、テストが通っても金融不変条件を壊す可能性があります。
なぜledgerが正か、なぜlock順序が必要かを教材・ADR・testで残します。
SLO
利用者にとって大切な安定性を、測定可能な目標値にしたものです。
『十分安定』を感覚ではなく数字で判断し、改善の優先順位を決められます。
振込成功率、応答時間、照合異常件数、復旧時間などを候補にします。現時点では正式SLOは未設定です。
Error Budget
SLO上、一定期間に許容できる失敗量です。
新機能と安定性を対立させず、失敗量が多いときは改善を優先する共通ルールになります。
将来SLOを設定した後、budget超過時にreleaseを止めるなどの運用方針へ接続できます。
ADR
重要な設計判断について、選んだ理由・捨てた案・前提を残す短い記録です。
数か月後に理由を忘れても、安全装置を誤って削除せず、前提が変わったか判断できます。
ledgerを正とする理由、private schema、lock順序などを意思決定として残す対象です。
Backpressure
処理先が満員のとき、入口側で依頼を待たせる・断る仕組みです。
無制限に受け続けると、DBだけでなく正常な照会まで巻き込んで全体停止するからです。
本番化する場合、DB接続・lock待ち・振込受付へ明示的な上限と応答方針が必要です。
Postmortem
障害後に時系列・影響・原因・再発防止を整理する振り返りです。
個人の注意不足で終わらせず、防御・検知・復旧の仕組みを改善できます。
incidentと監査・照合結果を結び、test・constraint・alert・runbookへ学びを戻します。
RTO / RPO
RTOは何時間で復旧するか、RPOはどの時点までのデータを戻せればよいかという目標です。
backupがあるだけでは、必要時間内に必要なデータまで戻せるか分からないためです。
学習用環境では正式目標未設定です。本番化では復元訓練と照合を含めて決める必要があります。
発展 — ADVANCEDもっと詳しく確認する最初の学習では読まなくても問題ありません。仕組みをもっと深く理解したい場合に開いてください。
技術的負債は、単なる汚いコードではない
技術的負債は、短期的な価値を先に得る代わりに、将来の変更・保守・障害対応で継続的な追加コストを払う状態を説明する比喩です。借金と同じように、元本だけでなく『利息』があります。
利息は、機能追加が遅くなる、変更のたびに障害が増える、担当者しか直せない、監査説明に時間がかかる、といった形で現れます。負債があること自体より、把握せず利息を払い続けることが危険です。
| 分類 | 意味 | 例 |
|---|---|---|
| 慎重・意図的 | 返済計画を持って短期判断する | 期限優先で一時的に手作業を残し、期限とownerを決める |
| 無謀・意図的 | 危険を知りながら対策なしで急ぐ | テストや監査を外して本番投入する |
| 慎重・非意図的 | 実装して学んだ結果、より良い設計に気づく | 利用増加後に口座lockの競合点が分かる |
| 無謀・非意図的 | 知識不足のまま問題を積み上げる | RLSと認可を同じものだと思い込む |
AI時代に増える、理解負債と認知負債
指定されたTechnical Debt Conference 2026の公開概要では、AIが解決手段になる一方で、『理解負債』『認知負債』を生む可能性がテーマとして挙げられています。カンファレンスは2026年9月開催予定のため、ここでは講演結果ではなく公開済みの問題提起を扱います。
| 負債 | やさしい説明 | 金融システムでの危険 |
|---|---|---|
| 理解負債 | コードは動くが、なぜこの設計か説明できない | lock順序や会計制約を理由不明で削除してしまう |
| 認知負債 | 頭に入れる情報と例外が多すぎて判断できない | 似たRPCや権限経路が増え、変更箇所を見落とす |
| 意図負債 | 当時の意思決定と前提が記録されていない | なぜledgerを正とするのか、後任が判断できない |
| 運用負債 | 監視・手順・訓練が実装に追いつかない | 障害は検知できても、誰も復旧できない |
業界では、負債を金額ではなくリスクで並べる
すべての負債を同時には返せません。金融システムでは『事故時の影響』『発生可能性』『検出しにくさ』『復旧しにくさ』『変更頻度』で優先順位を付けます。
| 優先度 | 判断基準 | Minibankでの例 |
|---|---|---|
| P0 | 資金・権限・監査を壊し得る | 二重送金、台帳改ざん、管理者権限昇格 |
| P1 | 大量取引や障害時に信用を失う | 負荷試験不足、lock待ち監視不足、復旧手順未検証 |
| P2 | 変更速度や理解を徐々に落とす | 重複ロジック、設計判断記録不足、複雑な命名 |
| 観察 | 利息が小さく変更頻度も低い | 隔離済みで触らない古い補助処理 |
SREの考え方:信用を測れる約束に変える
『安定している』という感覚だけでは運用判断ができません。業界では、利用者にとって重要な状態をSLIで測り、目標をSLOとして決めます。SLAは未達時の結果まで含む外部との合意です。
100%を無条件に目指すのではなく、許容できる失敗量をerror budgetとして定義します。budgetを消費しすぎたら新機能より安定性改善を優先するため、開発速度と信頼性を同じ数字で話せます。
| 用語 | 意味 | Minibankで測るなら |
|---|---|---|
| SLI | 実際の状態を表す指標 | 振込成功率、p95処理時間、台帳不整合件数、復旧時間 |
| SLO | 達成したい目標値 | 例:正常な振込の99.9%を一定時間内に確定 |
| Error Budget | 目標上許容する失敗量 | 超過時は機能追加を抑え、安定性改善を優先 |
| SLA | 未達時の結果を含む合意 | 学習用Minibankには未設定。本番サービスでは事業判断が必要 |
金融システムに現れる、7種類の負債
負債はソースコードだけに発生するものではありません。データ、権限、運用、組織、外部サービスにも発生します。1つの対策だけでは返せないため、種類を分けてownerを決めます。
| 種類 | 何が古く・危険になるか | 代表的な症状 |
|---|---|---|
| 設計負債 | 責務の境界や依存関係 | 1変更で多数の場所が壊れる |
| データ負債 | schema、品質、意味、履歴 | 同じ金額の定義がtableごとに違う |
| セキュリティ負債 | 権限、秘密情報、依存package | 不要なPUBLIC EXECUTEや長寿命の強権限 |
| テスト負債 | 失敗経路と回帰保証 | 正常系は通るがretry・concurrencyを試せない |
| 運用負債 | 監視、alert、runbook、訓練 | 異常は見えるが誰も対応できない |
| 知識負債 | 設計理由と業務知識 | 特定の担当者しか変更できない |
| 外部依存負債 | cloud、SaaS、vendor、契約 | 値上げ・障害・仕様変更時に代替できない |
負債の『利息』を、観測できる数字にする
負債は抽象的なままだと、機能開発に負け続けます。そこで『この負債のために、毎月どれだけ時間・障害・手作業・待ち時間が増えているか』を測ります。厳密な金額でなくても、傾向が見えれば意思決定に使えます。
| 観測するもの | 数字の例 | 何が分かるか |
|---|---|---|
| 変更の遅さ | lead time、review待ち、変更ファイル数 | 設計や理解の利息 |
| 変更の危険 | 変更失敗率、rollback率、incident件数 | テスト・結合の利息 |
| 運用の重さ | 手作業時間、夜間呼出し、同じalertの回数 | 自動化・runbook不足の利息 |
| 利用者影響 | 振込失敗率、p95/p99遅延、問い合わせ数 | 信用に直結する利息 |
| データrisk | 照合issue数、未解決期間、手動補正件数 | 会計・データ負債の利息 |
| 属人性 | 単独担当領域、引継ぎ日数、復旧可能者数 | 知識負債の利息 |
大量取引の業界知識:速さより、過負荷時の振る舞い
通常時に速いシステムでも、限界を超えると一気に遅くなるperformance cliffがあります。重要なのは最大件数だけでなく、限界へ近づいたときに待たせるのか、拒否するのか、後で処理するのかを事前に決めることです。
金融処理ではtimeout後に利用者が再送するため、過負荷がさらにretryを生み、障害を増幅するretry stormにも注意します。冪等性は二重計上を防ぎますが、無制限のretry負荷そのものを消すわけではありません。
| 仕組み | やさしい説明 | 守るもの |
|---|---|---|
| Capacity Planning | 何件まで安全に処理できるか予測する | 給料日・campaign時の余力 |
| Load Test | 段階的に件数を増やし限界を実測する | 処理能力と性能劣化点 |
| Backpressure | 下流が満員なら入口で待機・拒否する | DBと全体サービス |
| Rate Limit | 利用者や時間あたりの受付数を制限する | 攻撃・誤動作・公平性 |
| Queue | 今すぐ処理できない仕事を順番待ちさせる | 瞬間的な集中への耐性 |
| Circuit Breaker | 壊れた外部先への呼出しを一時停止する | 連鎖障害の防止 |
変更を安全にする業界の手順
大規模障害の多くは、壊れていた機械より『変更』をきっかけに表面化します。金融システムでは、正しい完成形だけでなく、旧versionから新versionへ移る途中も安全に保つ必要があります。
- 01ADR/RFCで目的・選択肢・risk・戻し方を記録
- 02先に現在動作を固定するcharacterization testを作る
- 03DB変更を後方互換にし、旧新両方が動く期間を設ける
- 04少量の利用者・trafficから段階的にrelease
- 05SLIと照合結果を見ながら拡大し、異常ならrollback
- 06移行完了後に古い経路・権限・feature flagを削除
障害対応は、犯人探しではなく学習装置
incident responseは、影響を止め、利用者へ伝え、復旧し、データを検証する一連の活動です。復旧後にはpostmortemを作り、『誰が失敗したか』ではなく『なぜその操作が事故につながり、なぜ防御・検知・復旧が十分でなかったか』を調べます。
人は必ず間違えるため、注意力だけに頼る対策は長続きしません。二人承認、権限分離、自動制約、安全な既定値、訓練可能なrunbookへ変えることが再発防止です。
| 段階 | 行うこと | 金融システム特有の確認 |
|---|---|---|
| 検知 | 影響と重大度を判断 | 残高・台帳・監査への影響有無 |
| 封じ込め | 新しい被害を止める | 送金停止、口座freeze、権限無効化 |
| 復旧 | 安全な状態へ戻す | 手動UPDATEではなく承認済みreversal等を利用 |
| 検証 | 正しく戻ったか確認 | reconciliationと顧客影響件数 |
| 説明 | 時系列・原因・対応を記録 | actor、金額、対象、訂正記録を保存 |
| 改善 | 仕組みを変え再発を防止 | test、constraint、alert、runbookへ反映 |
外部サービスとvendor lock-inも負債になる
Supabase、Vercel、認証provider、決済網など、外部サービスは開発を速くします。一方で、障害・値上げ・仕様変更・サービス終了・地域要件が自社だけでは制御できません。これは利用を避ける理由ではなく、依存を把握する理由です。
| 確認項目 | 非エンジニア向けの質問 |
|---|---|
| 代替可能性 | この会社が使えなくなったら、何日で代替できるか |
| データ可搬性 | 全データを完全な意味付きで取り出せるか |
| 障害境界 | 外部が止まったとき、残高照会と振込はどうなるか |
| 契約・費用 | 件数が10倍になったとき、費用と制限はどう変わるか |
| セキュリティ | 誰が強権限を持ち、鍵の漏洩をどう検知・交換するか |
| 法令・地域 | データの保存場所、委託先、監査資料を説明できるか |
経営と現場が、同じ言葉で判断する
『コードをきれいにしたい』だけでは投資判断ができません。現場は負債を、顧客影響・事故risk・開発速度・運用費・規制対応へ翻訳します。経営は、受け入れるriskと投資優先順位を明示します。
| 悪い伝え方 | 意思決定できる伝え方 |
|---|---|
| このコードは汚い | 振込変更に毎回3日余計にかかり、誤変更riskが高い |
| テストが足りない | 同時送金の事故をrelease前に検出できない |
| 監視を強化したい | lock待ちを障害の15分前に検知し、顧客影響を減らしたい |
| 全面刷新したい | P0領域を6分割し、互換性を保って段階移行する |
| 古いので危険 | support終了日以降、security修正を受けられない |
3つの事故シナリオで考える
| 状況 | 表面の問題 | 背後にある負債 | 先にできる対策 |
|---|---|---|---|
| 給料日に振込が急増 | DB接続とlock待ちが増加 | capacity・負荷試験・backpressure不足 | 段階負荷試験、limit、待ち時間alert、retry制御 |
| AI生成RPCを追加 | 正常系は動くが他人口座も指定可能 | 理解・認可test・review負債 | 脅威model、negative test、権限diff、設計理由記録 |
| DB障害から復旧 | backupはあるが復元に時間がかかる | runbook・訓練・RTO/RPO未定義 | 定期復元訓練、復旧目標、照合と業務再開基準 |
負債を返す、現実的な5段階
- 01負債台帳へ、症状・影響・owner・期限・根拠を登録
- 02利用者影響と金融不変条件からriskを評価
- 03先にcharacterization testと観測点を追加
- 04小さく分割し、互換性を保ちながら置き換える
- 05SLO・incident・変更時間が改善したかを測定
Minibankで今から持つべき負債台帳
この台帳はコードの悪口一覧ではありません。事業と技術が、どのriskを受け入れ、いつ見直すかを共有するための意思決定記録です。
| 項目 | 記録する内容 |
|---|---|
| 事実 | 何が未実装・暫定・複雑なのか |
| 影響 | 金額、顧客、権限、監査、稼働率のどれへ影響するか |
| 利息 | 変更や運用のたびに何分・何件・どのriskが増えるか |
| 安全策 | 現在のtest、alert、手順、feature flag、rollback方法 |
| 返済条件 | いつ、誰が、どの測定値をもって完了とするか |
| 意思決定 | なぜ今すぐ返さないのか、前提がいつ失効するか |
体験学習の続き · LEARNING LOOP
ここまで読めましたか?続けて確認してみましょう
技術的負債と理解負債の考え方を読んだところで、教材内の参照元で実際の回帰testとmigration履歴を確認し、自分の言葉で説明してみます。
- 02仕組みを確かめる — CONCEPT CHECK
画面操作なしで、仕組みを確かめる
この仕組みは、Mini Bankの画面には現れません。次のEvidenceとCode Trail、教材本文だけで理解を進めます。
- 03証拠を確認する — EVIDENCE
何を見たか、1つずつ確かめる
Evidence(判断の根拠となる記録)を確認したらチェックします。各項目の「何を見るか」を手がかりにしてください。
画面を開けない項目は、Source Trail(教材の参照元)と教材の説明で確認できます。失敗を実際に起こす必要はありません。
- 04コードの処理経路を追う — CODE TRAIL
コードを書く必要はありません
ここでは「説明されている仕組みが、実際のMini Bankのどこに実装されているか」を確認します。まずは日本語の役割説明を読み、入力した依頼がどこへ渡るかをつかみましょう。コードの全文を読む必要はありません。
まず回帰testが何を継続的に守っているかを見て、次にmigration履歴がどう意図を残しているかを見ます。
教材の参照元を確認する — Source Trail ↓返済前後の契約を守る回帰テスト。
scripts/regression/DB設計変更の意思と順序を残す履歴。
supabase/migrations/ - 05自分の言葉で説明する — EXPLAIN
LEVEL 1 — やさしい説明(まずここだけ)
なぜ技術的負債は『返すか、意図的に保有し続けるか』を判断すべきものであり、単純な善悪では語れないのでしょうか? 短い2文を目安に説明してください。
日常語だけで完了できます。専門用語の数や正誤を自動採点するものではありません。
ヒント1を見る
「利息」という比喩を使って書いてみましょう。
ヒント2を見る
負債を優先順位付けする基準を考えてみましょう。
もっと詳しく:LEVEL 2 — 専門用語を使った説明(任意)
技術的負債、理解負債、SLO、Error Budget、ADRの中から3つを使って、負債を管理可能にする方法を説明してみましょう。
挑戦する場合は、上の説明欄に追記できます。追加しなくても完了できます。
説明の確認ポイント — Checkpoint- 負債は放置ではなく意図的な判断の対象だと説明できる
- 利息を観測可能な数字に変える意義を説明できる
理解を確かめる — CHECK YOUR UNDERSTANDING
5問で理解チェック
答えを頭の中で考えてから、各項目を開いて確認してください。
Q1技術的負債は、見つけたらすべて即時に返すべきですか?
いいえ。利息、変更頻度、事故影響、検出・復旧可能性を評価し、事業判断として優先順位を付けます。
Q2AIが正しいコードを生成すれば理解負債はありませんか?
あります。出力が正しくても、人が設計理由・不変条件・失敗時挙動を説明できなければ安全に変更できません。
Q3安定稼働は100%を目標にすればよいですか?
単純ではありません。利用者が必要とするSLIと現実的なSLOを定め、error budgetで信頼性と変更速度を管理します。
Q4backupを毎日取得していれば、災害復旧対策は完成ですか?
完成ではありません。実際に復元し、RTO/RPO内で業務再開できるか、台帳と残高が整合するかを訓練で証明する必要があります。
Q5大量取引に耐えるには、DBを大きくすれば十分ですか?
十分ではありません。負荷試験、接続上限、backpressure、rate limit、retry制御、queue、監視を組み合わせ、限界時の振る舞いを設計します。
完全に暗記する必要はありません。大切な考え方を説明できそうなら押してください。
業界・外部の参照元 — INDUSTRY / EXTERNAL SOURCE
業界資料・参考文献
一般論と業界知識の根拠です。外部サイトを新しいタブで開きます。
- 技術的負債に向き合うConference 2026
技術的負債、理解負債、認知負債を扱う開催予定イベント
- Findy公式 開催発表
開催背景と、AI時代の技術的負債に関する公開概要
- Martin Fowler — Technical Debt Quadrant
慎重/無謀、意図的/非意図的という分類
- Google SRE — Service Level Objectives
SLI・SLO・SLAとerror budgetの基礎
- Google SRE — Data Integrity
backupの存在ではなく、復旧能力を実証する考え方
教材の参照元 — SOURCE TRAIL
根拠と関連教材
CURRENT IMPLEMENTATIONは確認したrepository内の実装です。HISTORICAL IMPLEMENTATIONは導入・修正の履歴で、後続migrationによる再定義があり得ます。RELATED LESSONは教材への案内で、実装の一次Sourceではありません。ASSUMPTIONは仮定、UNKNOWNは未確認を表します。
確認基点: d02eae8914f39cbf06bfe422dc39c71886f82b3e / 2026-09-11。稼働環境への適用確認: UNKNOWN。パス実在の自動検査と、記述した技術的事実の確認は別です。
- 現在の実装 — CURRENT IMPLEMENTATION
src/components/docs/ArchitectureMap.tsx大量取引・信用・現在の実装境界 - 現在の実装 — CURRENT IMPLEMENTATION
scripts/regression/返済前後の契約を守る回帰テスト - 過去の実装 — HISTORICAL IMPLEMENTATION
supabase/migrations/DB設計変更の意思と順序を残す履歴