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

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

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

世界一流のエンジニアは、どう考えるか

一流とは、難しい技術をたくさん知る人ではありません。不確実な問題を分解し、事実を確かめ、失敗を小さくし、チームが安全に前進できる判断を積み重ねる人です。

04 / 06
FOUNDATION · 基礎

Minibank全体の地図、システム開発の基本、学び方の土台を作る。

先に学ぶ内容 — Prerequisite: なし

学ぶこと — LEARNING GOALS

このページで学ぶこと

  • 複雑な問題を解く思考の順番
  • 正解が1つでない時の判断方法
  • 失敗を個人責任で終わらせず仕組みに変える方法

体験20 · ENGINEERING MINDSET(一流の思考法)

経験豊富なエンジニアほど、すぐコードを書き始めるか確かめよう

まずは予想をひと言。本文を読んだ後、教材内の参照元で実際のバグ修正例を確認します。

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

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

    経験豊富なエンジニアほど、実装を始める前に多くのコードを書き始めるでしょうか?

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

    ヒント1を見る

    正常に動く例を1つ確かめることと、「壊れる例」を探すことは、同じくらい重要でしょうか?

    ヒント2を見る

    障害が起きたとき、最後に操作した人だけを原因にしてよいでしょうか?

    もっと詳しく:この問いで使う専門用語
    • 不変条件は、どの経路でも絶対に壊してはいけない約束です。
    • 反例は、説明や設計が正しくないと証明する1つの例です。
    • Feedback loopは、結果を測り学びを次の設計へ戻す循環です。
まずはひと言だけで大丈夫です。

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

日常語で理解する — PLAIN LANGUAGE

まず、ここだけつかむ

1

優れたengineerは、すぐ答える前に『誰の何の問題か』『絶対に守る条件は何か』を明確にします。

2

事実・仮説・未確認事項を分け、正常例だけでなく、主張を壊す反例、同時実行、失敗、再送を考えます。

3

失敗を隠さず、小さな変更・review・test・監視・振り返りで個人の経験をteamの仕組みへ変えます。

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

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

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

01

不変条件

やさしく言うと

どの経路でも絶対に壊してはいけない約束です。

なぜ必要?

画面や実装方法が変わっても、安全性の中心を保てます。

Minibankでは

借貸一致、posted Ledgerの追記専用、同じ依頼で資金移動1回などです。

02

反例

やさしく言うと

説明や設計が正しくないと証明する1つの例です。

なぜ必要?

成功例を増やすより、隠れた前提を早く見つけられます。

Minibankでは

同じ残高を2requestが同時利用するscenarioを試します。

03

Trade-off

やさしく言うと

選択の良い点と、代わりに失うものを両方示します。

なぜ必要?

唯一の正解がない設計で、判断理由と前提を共有できます。

Minibankでは

lockは整合性を守る一方、待ち時間・deadlock・throughputへ影響します。

04

Blast radius

やさしく言うと

失敗した時に影響する利用者・金額・時間の範囲です。

なぜ必要?

障害を完全に防げなくても、被害を局所化できます。

Minibankでは

小さなcommit、権限分離、取引上限、段階releaseの候補として考えます。

05

Feedback loop

やさしく言うと

結果を測り、学びを次の設計へ戻す循環です。

なぜ必要?

最初の設計だけで未来の全条件を予測できないからです。

Minibankでは

回帰test、照合、audit、incidentからconstraint・test・Docsを改善します。

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

最初に:『すごい人の勘』をまねしない

世界中の優れたengineering組織に完全に同じ方法はありません。共通するのは、権威や好みより利用者・制約・観測事実を重視し、仮説を小さく検証し、判断理由を他者が追える形にする姿勢です。

経験者の直感も、過去の大量の失敗とfeedbackから作られた圧縮された仮説です。大切なのは結論だけをコピーせず、『何を守るための判断か』『前提が変わったら結論も変わるか』を聞くことです。

問題を解く8つの問い

  1. 01誰が、何に困っているのか
  2. 02成功を何で測るのか
  3. 03絶対に壊してはいけない不変条件は何か
  4. 04システムの境界と責任者はどこか
  5. 05事実・仮説・未確認事項を分けたか
  6. 06正常時だけでなく、失敗・再送・同時実行ではどうなるか
  7. 07最小で安全な検証は何か
  8. 08導入後に観測し、戻し、学べるか

思考の道具箱

考え方やさしい意味Minibankの例
First principles前例をコピーせず、守る事実と制約まで戻る送金では『片側だけ確定しない』からtransaction境界を考える
Systems thinking部品単体でなく、つながりと遅れて出る影響を見るUI変更がAPI、DB権限、監査、運用へ与える影響を追う
Invariantどの経路・順番でも絶対に破れない条件を決める借方合計=貸方合計、同じ依頼で資金移動は1回
Counterexample正しい例より、主張を壊す1例を探す2つの送金を同時実行して残高不足制御を試す
Trade-off利点だけでなく、失うものと運用費も並べる強いlockは整合性を守るが待ち時間とdeadlock riskを増やす
Reversibility判断を戻せるかで、検証方法と承認を変えるUI文言は戻しやすいが、Ledger migrationは戻しにくい
Blast radius失敗した時に影響する人・金額・時間を小さくする段階release、上限、feature flag、権限分離を使う
Feedback loop結果を測り、次の判断へ戻すtest、監視、照合、incident reviewを設計へ戻す

速さは、タイピング速度ではない

大きな変更を一度に作ると、reviewが難しく、失敗原因もrollback範囲も大きくなります。小さく独立した変更は、早くfeedbackを得て全体の手戻りを減らします。

ただし金融不変条件を途中版で壊してよいわけではありません。小さな変更それぞれが安全にdeploy可能で、test・監視・文書を含むことが前提です。

  • 設計の核心と最大riskを先にreviewする
  • 証拠が取れる最小実験を作る
  • 未知を隠さず、仮定と期限を記録する
  • 同じ事故を注意力ではなく制約・test・自動化で防ぐ
  • 自分しか分からない仕組みを成功と呼ばない

障害時ほど、思考の品質が出る

順番行うこと避けること
1 止血影響範囲を測り、拡大を止める原因不明のまま大きな変更を重ねる
2 事実時刻、変更、log、metric、取引状態を保存推測を事実として共有する
3 復旧安全な手順で重要業務を戻し、整合性を確認画面が開いただけで復旧完了とする
4 原因技術・process・組織の防御がなぜ抜けたか分析最後に操作した個人だけを原因にする
5 学習ownerと期限付きで制約・test・alert・runbookへ反映反省会だけで終える

実際のMinibankでは

引数を変えたexecute_transfer()で旧overloadが残った問題、終了したOTPをWHERE句で消した問題、生DB errorが画面へ漏れた問題は、いずれも『正常時に動く』だけでは見つけにくい例です。signature、状態空間、信頼境界まで広げて考える必要がありました。

Minibankのmigration、回帰test、E2E、Learning Docsは、実装だけでなく判断理由と失敗例を将来へ残すfeedback loopです。ただし一流という称号を証明するものではなく、継続的にcode healthと理解可能性を改善する練習材料です。

体験学習の続き · LEARNING LOOP

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

一流のエンジニアの思考法を読んだところで、教材内の参照元で実際のバグ修正例を確認し、自分の言葉で説明してみます。

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のどこに実装されているか」を確認します。まずは日本語の役割説明を読み、入力した依頼がどこへ渡るかをつかみましょう。コードの全文を読む必要はありません。

    実際に見つかった2つのバグ修正を順に見て、事実に基づく判断がどう行われたかを確かめましょう。

    function signatureの競合を修正した実例。事実に基づいて原因を特定した経緯を探します。

    supabase/migrations/20260823170002_drop_old_execute_transfer_overload.sql

    状態空間をWHERE句で失っていた問題の修正。反例から設計を見直した経緯を探します。

    supabase/migrations/20260823170003_fix_confirm_and_reissue_transfer_otp_bugs.sql
    教材の参照元を確認する — Source Trail ↓
  4. 05
    自分の言葉で説明する — EXPLAIN

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

    なぜ「正常に動く例」を増やすことよりも、「主張を壊す反例」を探すことが重視されるのでしょうか? 短い2文を目安に説明してください。

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

    ヒント1を見る

    「事実」と「仮説」という2つの言葉を使って書いてみましょう。

    ヒント2を見る

    実際に見つかったバグの例を1つ挙げてみましょう。

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

    不変条件、反例、Trade-off、Feedback loopの4つを使って、一流のエンジニアの判断の積み重ね方を説明してみましょう。

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

    説明の確認ポイント — Checkpoint
    • 正常系だけでは見つからない問題があると説明できる
    • 個人の教訓が仕組みへ変換される例を説明できる
予想5文字以上・証拠2項目・説明20文字以上で完了できます。

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

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

理解を確かめる — CHECK YOUR UNDERSTANDING

4問で理解チェック

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

Q1一流engineerは最初から正解を知っていますか?
答え

そうとは限りません。不確実性を明示し、小さな検証で安全に学ぶ方法を持っています。

Q2正常系testが通れば設計の主張は十分ですか?
答え

不十分です。失敗、同時実行、再送、境界値など、主張を壊す反例を探します。

Q3複雑な実装ほど高度ですか?
答え

違います。必要な複雑性かを問い、利用者価値を保ちながら単純化できる方が変更・review・運用に強くなります。

Q4障害原因は最後に操作した人ですか?
答え

個人の操作だけで終えず、なぜ防御・検知・復旧の仕組みが止められなかったかを分析します。

ここまで読めましたか?

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

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

業界資料・参考文献

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

教材の参照元 — SOURCE TRAIL

根拠と関連教材

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

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

  • 過去の実装 — HISTORICAL IMPLEMENTATIONsupabase/migrations/20260823170002_drop_old_execute_transfer_overload.sqlfunction signatureを事実として確認した修正例
  • 過去の実装 — HISTORICAL IMPLEMENTATIONsupabase/migrations/20260823170003_fix_confirm_and_reissue_transfer_otp_bugs.sql状態空間をWHERE句で失わない修正例
  • 過去の実装 — HISTORICAL IMPLEMENTATIONsupabase/migrations/20260823170004_sanitize_confirm_transfer_otp_failure_reason.sql内部errorと公開messageの境界
  • 現在の実装 — CURRENT IMPLEMENTATIONscripts/regression/仮説を再現可能な検査へ変える仕組み