システム開発の全体像
『何を作るか』を決める前から、本番で安全に使い続け、最後に終了するまで。開発の一生を非エンジニア向けに1本の道として整理します。
Minibank全体の地図、システム開発の基本、学び方の土台を作る。
先に学ぶ内容 — Prerequisite: なし学ぶこと — LEARNING GOALS
このページで学ぶこと
- 要件定義から運用保守までの一連の流れ
- ウォーターフォールとアジャイルの違い
- RFP・図・環境・Docker・Git・診断・監視の役割
体験61 · DEVELOPMENT(開発の全体像)
プログラムが完成したら、そのシステム開発は終わりか確かめよう
まずは予想をひと言。本文を読んだ後、教材内の参照元で実際のtestとmigration履歴を確認します。
- 01まず予想する — PREDICT
まずここだけ:思ったことをひと言書く
プログラムが完成したら、そのシステム開発は終わりだと思いますか?
正解でなくて大丈夫です。「〜だと思う」から始めてみましょう。
ヒント1を見る
完成したプログラムは、その後も同じ状態のまま使われ続けるでしょうか?
ヒント2を見る
運用中に見つかる不具合や法改正は、どこへ戻っていくでしょうか?
もっと詳しく:この問いで使う専門用語
- 要件定義は、誰のどんな問題をシステムがどの条件で解決するかを合意する作業です。
- 設計は、役割の分け方・データの置き方・失敗時の戻し方を決める作業です。
- CI/CDは、変更を共有するたびに検査し、安全な手順で配布する仕組みです。
日常語で理解する — PLAIN LANGUAGE
まず、ここだけつかむ
システム開発は、プログラムを書く作業だけではありません。解決したい問題を決め、要件にし、設計し、作り、試し、本番へ出し、運用しながら改善する一連の活動です。
ウォーターフォールとアジャイルは、品質の高低ではなく仕事の進め方が違います。実際の企業では、契約や全体計画は段階型、画面や機能の改善は反復型という組合せも使われます。
Git、Docker、テスト、脆弱性診断、監視は別々の道具です。どれか1つを導入しても安全・安定が自動的に完成するわけではなく、目的と責任者を決めて組み合わせます。
順番に理解する — DIFFICULT PARTS, STEP BY STEP
難しいポイントを、順番にほどく
専門用語を覚えることより、「なぜ必要か」「このシステムのどこで使うか」を理解することが目標です。
要件定義
誰のどんな問題を、システムがどの条件で解決するかを合意する作業です。
曖昧な期待のまま作ると、完成後に『欲しかったものと違う』となります。
振込なら、対象利用者、上限、手数料、失敗時の挙動、応答時間、監査要件まで決めます。
設計
役割の分け方、データの置き方、処理の順序、失敗時の戻し方を決める作業です。
画面だけでなく、変更しやすさ、安全性、運用方法まで実装前に判断するためです。
Next.jsを受付、DB RPCを金融判断、Ledgerを正式記録とする責任分担が設計です。
ウォーターフォール
工程を大きな段階に分け、前段の合意を確認して次へ進む方法です。
契約・予算・規制・外部連携が固定的な案件では、成果物と承認点を明確にできます。
会計原則やDB不変条件を先に合意し、設計審査を通してから実装する部分に向きます。
アジャイル
小さく作って利用者へ見せ、学んだことを次の短い周期へ反映する考え方です。
最初には分からない使い勝手や優先順位を、実物から学べます。
顧客画面を小さく公開し、操作結果を見て次の改善をbacklogへ入れる進め方です。
CI/CD
変更を共有するたびに検査し、安全な手順で配布する仕組みです。
人の記憶だけに頼らず、build・test・security checkを毎回同じ条件で実行できます。
commitから型検査、回帰test、build、承認、本番反映、監視へつなげます。
発展 — ADVANCEDもっと詳しく確認する最初の学習では読まなくても問題ありません。仕組みをもっと深く理解したい場合に開いてください。
最初に:システム開発は、コードを書くことだけではない
システム開発は、困りごとを見つけ、解決条件を合意し、仕組みを設計し、実装と検証を行い、本番で価値を出し続ける活動です。完成品を納めた瞬間より、その後に安全・安定して使える期間の方が長いことも珍しくありません。
各工程は一度通って終わりではありません。運用で得た利用者の声、障害、法改正、利用量の変化を次の要件へ戻す循環です。
- 01企画・構想:なぜ必要か
- 02要件定義:何を満たすか
- 03設計:どう分け、どう動かすか
- 04実装:設計を動く形にする
- 05テスト:期待と危険を確かめる
- 06リリース:利用可能な場所へ届ける
- 07運用保守:見守り、直し、改善する
- 08刷新・廃止:安全に次へ移す
全工程を、1つの表でつかむ
| 工程 | 答える質問 | 主な成果物 | Minibankなら |
|---|---|---|---|
| 企画・構想 | なぜ投資するのか | 目的、成功指標、対象範囲、概算 | 安全な金融処理を学べる教材を作る |
| 要件定義 | 何を満たせば成功か | 業務・機能・非機能要件、受入条件 | 二重送金を防ぎ、借貸を一致させる |
| 設計 | どう実現し、失敗へ備えるか | architecture、画面、API、data、運用設計 | Next.js、Auth、RPC、Ledgerの責任を分ける |
| 実装 | 設計をどう動かすか | code、migration、設定、test code | 画面、Route Handler、DB functionを作る |
| テスト | 期待どおりで、壊せないか | 結果、証跡、defect、受入判定 | 認可、二重click、同時送金、rollbackを試す |
| リリース | どう安全に切り替えるか | 手順、承認、rollback plan、release note | 変更をbuildし、段階的に本番へ反映する |
| 運用保守 | 価値と安全をどう維持するか | 監視、runbook、incident、改善backlog | 失敗率、遅延、照合issue、auditを確認する |
| 刷新・廃止 | dataと利用者をどう次へ移すか | 移行・保管・削除・契約終了計画 | 取引履歴の保持と移行照合を行う |
要件定義:希望を、判断できる条件へ変える
『便利な振込を作る』は希望であり、そのままでは完成を判定できません。誰が、何を、どの条件ででき、失敗時にどうなり、どの速さ・安全性が必要かまで具体化します。
要件には、できることを表す機能要件と、速さ・安全性・稼働率・復旧・監査・保守性を表す非機能要件があります。対象外も書くことで、無限に範囲が広がるscope creepを防ぎます。
| 種類 | やさしい問い | 振込の例 |
|---|---|---|
| 業務要件 | 事業として何を実現するか | 顧客が自分の普通預金から別口座へ送れる |
| 利用者要件 | 利用者は何をしたいか | 送金先と金額を入力し、結果と履歴を確認できる |
| 機能要件 | システムは何をするか | 残高・口座状態を検査し、仕訳と監査を記録する |
| 非機能要件 | どの程度よく動くか | 同時実行でも二重計上せず、目標時間内に応答する |
| 受入条件 | 何を見れば完成と言えるか | 同じ受付番号の再送で残高が2回減らない |
| 対象外 | 今回は何を作らないか | 外部銀行への実送金や外貨は対象外 |
設計:作る前に、責任と失敗の扱いを決める
設計は図を描くこと自体ではなく、選択肢から方針を決め、その理由とtrade-offを残すことです。どこで本人確認するか、正式な残高は何か、途中失敗をどう戻すか、誰が運用するかを決めます。
| 設計の層 | 決めること | Minibankの例 |
|---|---|---|
| 全体architecture | system境界、責任、信頼境界、主要技術 | Browser、Next.js、Supabase、PostgreSQLを分担 |
| 基本・外部設計 | 画面、API、data model、利用者から見える振る舞い | 振込画面、HTTP response、口座状態 |
| 詳細・内部設計 | 関数、SQL、error、locking、処理順 | execute_transfer内のlock順とrollback |
| Security設計 | 脅威、認証、認可、秘密、audit | RLSとSECURITY DEFINERの二重確認 |
| 運用設計 | 監視、alert、backup、復旧、当番 | 台帳差異を誰へ通知し、どう止血するか |
図面の使い分け:1枚ですべてを説明しない
| 図 | 何が分かるか | 非エンジニアが見る点 |
|---|---|---|
| System Context図 | 利用者・外部system・対象systemの境界 | 誰と何がつながるか |
| Architecture図 | 大きな部品と責任・dataの流れ | 最終判断と正式記録はどこか |
| Sequence図 | 1件の処理を時間順に追う | 確認・失敗・返答の順番 |
| ER図 | dataの種類と関係 | 顧客、口座、取引がどう結び付くか |
| 状態遷移図 | 許可された状態と変化 | KYCや口座が不正な順番で変わらないか |
| 業務flow | 人とsystemを含む仕事の手順 | 手作業、承認、例外のowner |
シーケンス図:振込1件を時間順に読む
sequence図は、横に登場人物、縦に時間を置きます。上から下へ読み、矢印で依頼と返答を追います。正常時だけでなく、認証失敗、残高不足、DB失敗、timeout後の再送も分岐として描くと、責任の空白が見つかります。
- 矢印の出発点は責任を持ってrequestする側
- DBへ到達する前後で、入力・本人・権限を再確認する
- timeoutは失敗確定とは限らないため、再送時の冪等性を設計する
- 途中のどこで失敗しても片側だけ確定しないtransaction境界を示す
顧客 → 振込画面 : 送金先・金額を入力
振込画面 → Next.js API : token + idempotency key + 金額
Next.js API → Supabase Auth : tokenを検証
Next.js API → 選択backend → PostgreSQL RPC : request_transfer()で依頼保存、confirm_transfer_otp()でコード確認、内部execute_transfer()
PostgreSQL RPC → PostgreSQL RPC : 権限・状態・残高を確認し口座をlock
PostgreSQL RPC → Ledger : 借方と貸方を同じtransactionで記帳
Ledger → Audit : actorと結果を追記
PostgreSQL RPC → Next.js API : 成功または安全なerror
Next.js API → 振込画面 : 結果を表示実装:コードを書いた後に、完成へ近づける
実装では、設計をcode、DB migration、設定、test codeとして具体化します。ただ動くことは出発点です。小さな変更、peer review、型検査、静的解析、自動test、設計との照合を通して、他の人が安全に変更できる状態へ近づけます。
- 01小さな作業単位と完了条件を決める
- 02branchでcode・test・migrationを変更
- 03手元で型検査・lint・testを実行
- 04Pull Requestで意図・risk・戻し方をreview
- 05自動検査を通し、承認後にmerge
- 06release後の指標とerrorを確認
テスト:正解だけでなく、壊れ方を確かめる
| test | 守る範囲 | Minibankの例 |
|---|---|---|
| Unit | 小さな関数・規則 | 金額や入力のvalidation |
| Integration / DB | 複数部品とDB制約 | RPC、RLS、台帳の借貸一致 |
| API | 認証、入力、response契約 | 他人口座指定や不正tokenを拒否 |
| E2E | 画面から結果まで | ログイン、振込、履歴表示 |
| Concurrency | 同時request | 同じ残高を使う2件の送金 |
| Performance | 想定量・peak・限界 | 大量取引時の遅延、lock、DB接続 |
| Security | 攻撃経路 | 認可突破、権限昇格、依存部品の弱点 |
| Recovery | 障害後の復旧 | backupを復元し、台帳と残高を照合 |
| UAT | 実際の業務で使えるか | 管理者が審査・freeze・例外対応を完了 |
ウォーターフォール:段階と合意点を明確にする
ウォーターフォールは、要件・設計・実装・test・導入を大きな段階として計画し、成果物を確認して次へ進む方法です。変更禁止という意味ではありませんが、後工程の変更ほど影響確認と合意に費用がかかります。
規制、契約、予算、hardware、外部組織との接続など、先に確定すべき条件が多い案件で管理しやすい一方、利用者が実物を見る時期が遅いと、誤解の発見も遅れます。
| 強み | risk | 向きやすい状況 |
|---|---|---|
| 範囲・成果物・承認点を示しやすい | 初期の誤解を後で直す費用が大きい | 固定契約、規制対応、大規模移行 |
| 全体予算と日程を説明しやすい | 動くものへのfeedbackが遅い | 外部依存と順序制約が強い |
| 文書とtraceabilityを整えやすい | 文書完成が目的化することがある | 監査証跡が重い領域 |
アジャイル:小さく作り、早く学ぶ
アジャイルは、利用者に価値のある小さな単位を短い周期で作り、動くものへのfeedbackから優先順位や設計を更新する考え方です。ScrumやKanbanはその実践方法の例です。
計画や文書が不要という意味ではありません。重要な不変条件、architecture、security、法令、運用は先に扱い、変化する部分は小さな反復で学びます。
- 01Product goalと優先順位を決める
- 02Backlogから小さな価値を選ぶ
- 03設計・実装・testを短い周期で完了
- 04利用者と動く結果をreview
- 05改善点とriskをbacklogへ戻す
- 06次の周期で優先順位を更新
ウォーターフォールとアジャイルを比較する
現実の金融・enterprise開発では、全体予算、法令、data migration、release判定は段階的に管理し、各機能の画面や業務改善は反復して作るhybridも一般的です。名前より、変更をどう判断し品質をどう守るかが重要です。
| 観点 | ウォーターフォール | アジャイル |
|---|---|---|
| 計画 | 全体を段階的に詳しく計画 | 方向を定め、短い周期で更新 |
| 変更 | 正式な変更管理で影響・費用を合意 | backlogを並べ替え次周期へ反映 |
| 利用者feedback | 節目や受入工程で大きく得る | 短い周期で継続的に得る |
| 進捗 | 成果物と工程完了で確認 | 動く価値と学習結果で確認 |
| 予算・範囲 | 範囲を固定しやすい | 期間・teamを固定し範囲を調整しやすい |
| 主なrisk | 誤解の発見が遅れる | 全体整合や長期計画を失う |
RFP:同じ土俵で提案を依頼する
RFP(Request for Proposal)は、発注側が候補vendorへ提案を求める文書です。単なる見積依頼ではなく、背景・目的・範囲・条件・評価方法を共有し、各社の解決方法、体制、費用、riskを比較します。RFPだけで詳細要件がすべて完成するわけではありません。
| RFPの項目 | 書く内容 | 注意点 |
|---|---|---|
| 背景・目的 | 現状課題、成功指標、導入理由 | 製品名より解決したい問題を示す |
| 範囲 | 対象業務・利用者・拠点・対象外 | 境界と前提を曖昧にしない |
| 要件 | 機能、性能、可用性、security、audit | Mustと希望を分ける |
| data・連携 | 移行量、品質、外部system、interface | 既存dataの問題を隠さない |
| 実施条件 | 日程、体制、役割、契約、成果物 | 発注側の作業と意思決定者も書く |
| 運用・終了 | support、SLA、教育、data返却、exit | 導入後と解約時の費用まで比較 |
| 評価方法 | 価格、適合性、実績、体制、risk | 重みと失格条件を事前に決める |
ライブラリ、フレームワーク、runtimeを区別する
境界は製品の説明によって重なることもあります。大切なのは分類暗記ではなく、誰が実行順を決め、どのversionへ依存し、更新時に何をtestするかです。
| 言葉 | たとえ | 役割 | このproject |
|---|---|---|---|
| Language | 文章を書く言語 | codeの文法と意味 | TypeScript、SQL |
| Runtime | 文章を実行する場所 | codeを実際に動かす | Node.js、Browser、PostgreSQL |
| Library | 必要な時に使う道具箱 | 特定処理を提供 | React、Supabase JavaScript client、Zod |
| Framework | 建物の骨組みと進行規則 | 全体構造と実行の流れを提供 | Next.js |
| Package | 配布される部品の単位 | version付きで依存関係を管理 | package.jsonのdependencies |
| SDK | 外部service利用の一式 | API client、型、補助機能 | Supabase clientを含む開発道具 |
開発環境とインフラ環境:『手元で動く』を本番へ運ぶ
開発環境は、開発者がcodeを書き、実行し、testする場所です。インフラ環境は、利用者へserviceを届けるための計算資源、network、DB、domain、証明書、権限、秘密、監視などの土台です。
- 環境ごとにDB、credential、domain、外部連携先を分離する
- 秘密情報はGitへ入れず、secret管理から実行時に渡す
- Infrastructure as Codeでnetworkやservice設定をreview可能にする
- 本番変更は人の手順だけでなく、自動化・承認・監査を組み合わせる
| 環境 | 目的 | 守ること |
|---|---|---|
| Local | 個人の開発と素早い確認 | 本番data・秘密を置かない |
| Development | teamの結合確認 | 壊れても本番へ影響しない分離 |
| Test | 自動・手動test | 再現可能なdataと設定 |
| Staging | 本番に近い最終確認 | 本番との差を把握し、個人情報を避ける |
| Production | 実利用者へ価値を提供 | 最小権限、監視、backup、変更承認 |
Dockerとcontainer:持ち運べる実行単位
Dockerはcontainerを作成・配布・実行するための代表的なplatformです。Dockerfileというrecipeからimageを作り、そのimageからcontainerという実行中のinstanceを起動します。registryはimageを保管・配布する倉庫です。
containerは一般に仮想machineより軽量ですが、完全なmachineでも、自動的なsecurity境界でもありません。containerを消すと内部の書込みも失う可能性があるため、永続dataはvolumeや外部DBへ分離します。
| 用語 | やさしい説明 | 間違えやすい点 |
|---|---|---|
| Dockerfile | imageを作るrecipe | 秘密情報を書き込まない |
| Image | 変更しない実行template | 起動中の処理そのものではない |
| Container | imageから起動した実体 | 削除後のdata保存を保証しない |
| Registry | imageの保管・配布場所 | imageの署名・権限・脆弱性管理が必要 |
| Volume | container外でdataを保持する領域 | backupと同じではない |
| Compose | 複数containerの開発構成を定義 | 本番運用の全問題を解決しない |
CI/CD:変更を、同じ検査と手順で届ける
CI(Continuous Integration)は変更を頻繁に共有し、自動build・test・解析で統合問題を早く見つける活動です。CDは検査済み成果物を安全に配布できる状態へ保つContinuous Delivery、または本番まで自動反映するContinuous Deploymentを指します。どちらかは組織ごとに明示します。
- 01Gitへ小さな変更をpush
- 02依存関係を固定しbuild
- 03型・lint・unit・integration test
- 04SAST・SCA・secret・設定scan
- 05同一artifactをstagingへdeploy
- 06受入・承認・migration安全性を確認
- 07段階的にproductionへrelease
- 08SLI・error・照合を監視し必要ならrollback
脆弱性診断:攻撃者の入口を、複数の方法で探す
脆弱性診断は、1つのtool名ではありません。設計前のthreat modeling、source codeを調べるSAST、依存packageを調べるSCA、動作中のapplicationへrequestするDAST、設定・secret・container imageのscan、専門家によるpenetration testを組み合わせます。
自動scanには誤検知と見逃しがあります。結果は業務影響、攻撃条件、権限、data、修正期限で優先順位を付け、修正後に再testします。
| 方法 | 見る対象 | 見つけやすい問題 |
|---|---|---|
| Threat Modeling | 設計・data flow・権限 | 信頼境界、悪用scenario、対策漏れ |
| SAST | source code | 危険なAPI利用、入力処理の疑い |
| SCA | 外部package | 既知脆弱性、license、更新停止 |
| DAST | 動作中のWeb/API | 認証・入力・設定の挙動 |
| Configuration / IaC scan | cloud・DB・container設定 | 公開範囲、弱い権限、危険な既定値 |
| Penetration Test | system全体 | 複数の弱点を組み合わせた侵入 |
監視と可観測性:信用を、運用中の数字で守る
監視は、あらかじめ重要と分かっている状態を継続確認する活動です。可観測性は、未知の問題でもmetrics、logs、tracesなどから内部状態を調べられる性質です。dashboardを置くだけでは運用にならず、alertを受ける人、判断基準、runbook、連絡先、復旧権限が必要です。
| signal | 見るもの | 金融systemの例 |
|---|---|---|
| Metrics | 数値の時間変化 | 振込成功率、p95/p99遅延、DB接続、lock待ち |
| Logs | 個々の出来事 | request ID、error、actor、管理操作 |
| Traces | 1requestが通った経路 | Next.jsからAuth、RPC、DBまでの時間 |
| Business integrity | 業務と会計の正しさ | 台帳不均衡、残高差異、二重処理、audit欠落 |
| Alert | 行動が必要な異常 | SLO悪化、照合P0、管理者異常、backup失敗 |
バージョン管理とGit:変更の履歴を共同で扱う
version管理は、fileの変更を時間とともに記録し、過去の状態を比較・復元できるようにします。Gitではworking treeで編集し、stageで次の記録候補を選び、commitで意味のあるsnapshotとして残します。branchで作業を分け、Pull Requestでreviewし、mergeで共有します。
| 用語 | 役割 | 注意点 |
|---|---|---|
| Commit | 変更理由を持つsnapshot | 大きすぎるcommitはreviewしにくい |
| Branch | 本流と分けた作業線 | 長期間離れると統合が難しくなる |
| Pull Request | 差分・意図・riskをreviewする場 | 承認は自動testの代わりではない |
| Merge | 承認した変更を共有線へ統合 | 本番反映と同じ操作とは限らない |
| Tag / Release | 意味のあるversionへ名前を付ける | 配布物・migrationとの対応を残す |
| Migration | DB構造変更を順序付きで管理 | Git履歴が本番DBの現在値やbackupにはならない |
リリース、運用、保守:作った後が信用の本番
deployは新しいcodeを実行環境へ置く技術操作、releaseは利用者へ機能を有効化する業務判断です。段階releaseやfeature flagを使えば、配備してもまだ全員へ見せない運用ができます。
保守には不具合修正だけでなく、依存部品の更新、法改正、性能改善、権限棚卸し、backup復元訓練、文書とrunbook更新が含まれます。softwareとcloud serviceのsupport終了日も管理します。
- 01変更内容・影響・戻し方を確認
- 02同じartifactを環境間で昇格
- 03DB migrationの互換性とlockを確認
- 04限定範囲へrelease
- 05技術指標・業務指標・照合を監視
- 06問題なら停止・rollback・reversal等で影響を封じる
- 07postmortemから要件とbacklogを更新
Minibankへ当てはめる:あるものと、これから学ぶもの
| 領域 | 現在確認できる土台 | 本番systemなら追加検討 |
|---|---|---|
| 要件・設計 | requirements、architecture、ledger資料と学習教材 | 正式なowner、受入基準、規制・外部連携要件 |
| 実装 | Next.js、TypeScript、Supabase、PostgreSQL | 本番構成、変更承認、support policy |
| Test | DB/API回帰test、E2E | 継続CI、負荷・耐久・復旧・侵入test |
| 環境 | local開発とVercel/Supabaseを想定した構成 | dev/staging/prod完全分離、IaC、secret運用 |
| Container | Docker構成は現時点で未確認 | 必要性、image供給網、scan、更新責任 |
| 監視 | observability・照合の土台 | SLI/SLO、on-call、通知、capacity、復旧訓練 |
| Version管理 | Gitと順序付きDB migration | branch保護、署名、releaseとDB適用の追跡 |
非エンジニア向け:会議で確認する10の質問
- 誰のどの問題を解決し、成功を何で測りますか?
- 対象範囲と、今回作らないものは何ですか?
- 正常時だけでなく、失敗・再送・同時実行時はどうなりますか?
- 正式なdataはどこにあり、誰が変更できますか?
- この図はどの範囲を示し、何を省略していますか?
- 完成条件にはsecurity、性能、復旧、運用が含まれていますか?
- 開発・test・staging・本番のdataと秘密は分離されていますか?
- 変更は誰がreviewし、どの自動testを通り、どう戻せますか?
- 異常を誰が何分で知り、どの手順と権限で対応しますか?
- vendorや技術を終了・移行するとき、dataと業務を取り出せますか?
体験学習の続き · LEARNING LOOP
ここまで読めましたか?続けて確認してみましょう
要件定義から運用保守までの全体像を読んだところで、教材内の参照元で実際のtestとmigration履歴を確認し、自分の言葉で説明してみます。
- 02仕組みを確かめる — CONCEPT CHECK
画面操作なしで、仕組みを確かめる
この仕組みは、Mini Bankの画面には現れません。次のEvidenceとCode Trail、教材本文だけで理解を進めます。
- 03証拠を確認する — EVIDENCE
何を見たか、1つずつ確かめる
Evidence(判断の根拠となる記録)を確認したらチェックします。各項目の「何を見るか」を手がかりにしてください。
画面を開けない項目は、Source Trail(教材の参照元)と教材の説明で確認できます。失敗を実際に起こす必要はありません。
- 04コードの処理経路を追う — CODE TRAIL
コードを書く必要はありません
ここでは「説明されている仕組みが、実際のMini Bankのどこに実装されているか」を確認します。まずは日本語の役割説明を読み、入力した依頼がどこへ渡るかをつかみましょう。コードの全文を読む必要はありません。
まず実装後も動き続ける回帰testを見て、次に運用中も積み上がる設計変更の履歴を見ます。開発が完成後も続く活動であることを確かめましょう。
教材の参照元を確認する — Source Trail ↓実装後も残り続ける回帰test。
scripts/regression/運用しながら積み上がる設計判断の履歴。
supabase/migrations/ - 05自分の言葉で説明する — EXPLAIN
LEVEL 1 — やさしい説明(まずここだけ)
なぜプログラムが完成しても、それだけではシステム開発が終わったとは言えないのでしょうか? 短い2文を目安に説明してください。
日常語だけで完了できます。専門用語の数や正誤を自動採点するものではありません。
ヒント1を見る
「要件定義」から「運用保守」までの循環という言葉を使って書いてみましょう。
ヒント2を見る
実装が終わった後にも残っている作業を1つ挙げてみましょう。
もっと詳しく:LEVEL 2 — 専門用語を使った説明(任意)
要件定義、設計、CI/CDの3つを使って、開発が企画から運用保守までの循環であることを説明してみましょう。
挑戦する場合は、上の説明欄に追記できます。追加しなくても完了できます。
説明の確認ポイント — Checkpoint- 実装完了は開発の終わりではないと説明できる
- 運用中に得た学びが要件へ戻る循環だと説明できる
理解を確かめる — CHECK YOUR UNDERSTANDING
5問で理解チェック
答えを頭の中で考えてから、各項目を開いて確認してください。
Q1プログラムが完成すれば、システム開発は完了ですか?
いいえ。受入、release、監視、障害対応、保守、改善、最終的な廃止まで含めてライフサイクルです。
Q2アジャイルなら、要件・設計・文書は不要ですか?
不要ではありません。必要な判断と記録を、小さな周期で更新しながら進めます。無計画という意味ではありません。
Q3Docker imageとcontainerは同じものですか?
違います。imageは変更しない実行用template、containerはそのimageから起動した実体です。
Q4リリース前に脆弱性診断を1回すれば安全ですか?
いいえ。変更や依存部品の更新で新しい弱点が生まれるため、開発中の自動検査と定期・重要変更時の診断を継続します。
Q5Gitがあれば、DBのbackupは不要ですか?
いいえ。Gitは主にsource fileの変更履歴です。本番データのbackup、復元訓練、migration適用状態は別に管理します。
完全に暗記する必要はありません。大切な考え方を説明できそうなら押してください。
業界・外部の参照元 — INDUSTRY / EXTERNAL SOURCE
業界資料・参考文献
一般論と業界知識の根拠です。外部サイトを新しいタブで開きます。
- Manifesto for Agile Software Development
アジャイル開発の価値と原則を示す一次資料
- Docker Docs — Docker overview
image、container、registryの公式入門
- OWASP Developer Guide
SAST、DAST、SCAなど安全な開発活動の実務資料
- Git — About Version Control
変更履歴を記録し過去の版を扱うversion管理の公式解説
教材の参照元 — SOURCE TRAIL
根拠と関連教材
CURRENT IMPLEMENTATIONは確認したrepository内の実装です。HISTORICAL IMPLEMENTATIONは導入・修正の履歴で、後続migrationによる再定義があり得ます。RELATED LESSONは教材への案内で、実装の一次Sourceではありません。ASSUMPTIONは仮定、UNKNOWNは未確認を表します。
確認基点: d02eae8914f39cbf06bfe422dc39c71886f82b3e / 2026-09-11。稼働環境への適用確認: UNKNOWN。パス実在の自動検査と、記述した技術的事実の確認は別です。
- 未確認 — UNKNOWN
docs/requirements.md仕様資料。現行実装との一致は未確認。要件を記録する既存資料 - 未確認 — UNKNOWN
docs/architecture.md仕様資料。現行実装との一致は未確認。system全体設計の既存資料 - 未確認 — UNKNOWN
docs/api-spec.md仕様資料。現行実装との一致は未確認。APIという外部契約の既存資料 - 過去の実装 — HISTORICAL IMPLEMENTATION
supabase/migrations/DB変更を順番付きでversion管理する実例 - 現在の実装 — CURRENT IMPLEMENTATION
scripts/regression/DB・API回帰testの実例 - 現在の実装 — CURRENT IMPLEMENTATION
e2e/full-journey.spec.ts利用者視点のE2E test - 現在の実装 — CURRENT IMPLEMENTATION
package.jsonframework、library、実行commandの管理