← 前へ: Phase 6.1 | 目次 | 次へ: README →
本課題では、これまでの研修で構築してきたWebアプリケーションを対象に、
- 技術的な構造の言語化
- 設計判断の説明
- 他者からのレビュー
- 客観的な評価
を行います。
ここでのゴールは、
「動くものを作った」状態から、「説明できる・評価できる」状態へ進むこと
です。
以下の3点を提出してください:
提出先は講師と決めた場所、または自分の演習用リポジトリです。独学で相互レビューの相手がいない場合は、下のルーブリックとレビュー観点を使って自己レビューし、代替したこと・確認の根拠・未確認の項目を記録してください。進め方はREADMEを参照してください。
コード・資料・録画を公開する前に、成果物を共有するときの注意に従い、個人情報や秘密情報が含まれていないことを確認してください。発表者名も公開版ではハンドルネームに置き換えられます。
以下の構成に従ってスライドを作成してください。
- アプリケーション名
- 自分の名前
- どんなアプリか
- 何ができるか(CRUD)
自分のPCのループバックだけで起動し、ダミーデータで実演してください。他者に見せる場合は画面共有または録画を使い、サーバの外部公開・公開トンネル・ポート転送は行いません。
- 実際の操作
- 一覧
- 作成
- 更新
- 削除
以下を図で示してください:
HTTP → Router → Controller → Model → DB
↓
View
1つのリクエストを例に説明:
- どこを通るか
- どこで何が起きるか
- Router
- Controller
- Model
- View
- 「なぜ分けるのか」を説明すること
- 自作ORMの構造
- BaseModelの役割
- save / find / where の仕組み
- どこでチェックしているか
- なぜModelに置いたか
- どこを共通化したか
- なぜそこまでにしたか
以下を説明:
- 同じ点
- 違う点
- なぜ違うのか
- 設計で悩んだ点
- 実装で詰まった点
- 一番重要な理解
- 認識が変わったこと
- 自作フレームワークの限界
- 追加したい機能
- 既知の脆弱性、未実装の防御、その影響(READMEの一覧を自分の実装と照合する)
- XSS・CSRF・SQLインジェクション・パストラバーサルへの対策と、検証した範囲/残る制約
- この研修で得たもの
- 今後どう活かすか
以下の観点で自己評価を行ってください。
- 深い理解がある
- 設計の意図を説明できる
- トレードオフを語れる
- 抽象化の判断が適切
- 基本的な理解がある
- 構造を説明できる
- 実装に一貫性がある
- 動作するものは作れている
- 一部説明が曖昧
- 理解が浅い
- 説明できない
- レイヤーが混ざっている
各項目を S / A / B / C で評価してください。
- HTTP / Router / Controller / Model / View の理解
- 責務分離
- 抽象化の適切さ
- 一貫性
- 可読性
- 他者に伝えられるか
- なぜその設計にしたか説明できるか
次の項目はS〜Cの評価にかかわらず必須です。満たさない場合は成果物の提出を完了とせず、修正して再確認してください。
- 本番利用せず、信頼できないネットワークやインターネットへ外部公開しない
- 実際の待受先がループバックに限定されていることを確認できる
- 秘密鍵を共有・コミットせず、
curl -kをローカルの自己署名証明書演習だけに限定している - XSS・CSRF・SQLインジェクションの必須テスト結果を示せる。ファイル配信/一覧があればパストラバーサルも検証済みである
- 既知の脆弱性を説明できる。リソース制限、タイムアウト、例外時のソケットcloseなど、未実装の防御とその影響を具体的に挙げられる
テストを通しても外部公開できる安全性を保証しないことを説明してください。
以下を必ず記述:
- 強み
- 弱み
- 改善したい点
他の受講者の発表をレビューしてください。
- レイヤーが分離されている
- アーキテクチャが明確
- 各レイヤーの役割を説明できている
- 責務が混ざっていない
- Modelの役割が理解されている
- DBとの関係が説明されている
- 適切に共通化されている
- 過剰設計ではない
- 話が論理的
- 初見でも理解できる
- 設計の理由が説明されている
- 別案との比較がある
- 正常に動作している
- ユースケースが明確
- 外部公開せず、ループバックとダミーデータでデモしている
- 必須の防御とテスト結果を説明できている
- 既知の脆弱性と未実装の防御を、実装に即して説明できている
- 「テスト成功・HTTPS対応だけでは本番利用できない」と理解している
以下を必ず記述:
- 具体的に
- 具体的に
- 理解を深めるための問い
この課題の最終的なゴールは、
「自分の作ったシステムを他人に説明し、評価し、改善できる状態」
です。
この課題で得るべきものは:
- 実装力ではなく説明力
- 正解ではなく判断力
- 個人作業ではなく相互理解
ここまでであなたは、
- フレームワークを使う側から
- フレームワークを理解する側へ
移行しています。
次に求められるのは、
「その理解を他者に伝えられるか」
です。
この課題は、そのための最終ステップです。