このリポジトリは、GitHub Copilot を使って「既存コードの修正・リファクタリング」を体験するための教材です。
動くけど“直したくなるポイント”を わざと入れてあります。
⚠️ 注意(重要)
- この教材には 意図的に危険/不適切な実装(例:生SQLの組み立て) が含まれます。
- ローカルの授業環境でのみ使用してください。外部公開・実運用はしないでください。
- 授業では「なぜ危険か」「どう直すか」を必ずセットで扱ってください。
- 「攻撃のやり方」ではなく「危険な実装を発見し、安全に直す」が目的です。
python -m venv .venv
# Windows (PowerShell)
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python manage.py migrate
python manage.py loaddata memos/fixtures/sample.json
python manage.py runserverブラウザ: http://127.0.0.1:8000/
一覧画面で検索する際ユーザー入力を元に生SQL文字列を組み立てる実装が動きます。
- 例:
/?q=abc - 明らかな症状: 検索文字にシングルクォート
'や;が入るとが入ると 500 になったりします(教材用) - 修正課題: ORM へ置き換える / どうしても raw を使うなら安全な形にする
fixture に 大量のメモが入っています。
一覧で全部表示しようとするので、重い・長い・UXが悪い、が分かりやすいです。
- 修正課題:
Paginatorを使って 20件/ページなどにする
- views.py の巨大化 / コピペ
- Form を使っていない雑なバリデーション
- delete が POST 限定じゃない
- get() 直叩きで 404 にならない箇所
- 検索の“壊れやすさ”を直す(まずは
'で落ちるのを再現→修正) - ページネーション追加
- get_object_or_404 / delete のPOST限定
- Form導入でcreate/edit共通化
- テスト追加
BUG_CATALOG.md:バグ・改善ポイント一覧(難易度付き)TEACHING_PLAN.md:80分の進行案(先生用)WORKSHEET.md:学生用チェックリスト