Skip to content

8monji/bad-memo-app

Repository files navigation

Copilot Refactoring Lab: Django Memo App(明らかなバグ/不具合入り v2)

このリポジトリは、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/


v2で“わざと”入れてある明らかな不具合

1) 検索モード

一覧画面で検索する際ユーザー入力を元に生SQL文字列を組み立てる実装が動きます。

  • 例:/?q=abc
  • 明らかな症状: 検索文字にシングルクォート ' や;が入るとが入ると 500 になったりします(教材用)
  • 修正課題: ORM へ置き換える / どうしても raw を使うなら安全な形にする

2) ページネーション無し(一覧が重い)

fixture に 大量のメモが入っています。
一覧で全部表示しようとするので、重い・長い・UXが悪い、が分かりやすいです。

  • 修正課題: Paginator を使って 20件/ページなどにする

そのほかの怪しいところ

  • views.py の巨大化 / コピペ
  • Form を使っていない雑なバリデーション
  • delete が POST 限定じゃない
  • get() 直叩きで 404 にならない箇所

授業でのおすすめの直す順番(超要約)

  1. 検索の“壊れやすさ”を直す(まずは ' で落ちるのを再現→修正)
  2. ページネーション追加
  3. get_object_or_404 / delete のPOST限定
  4. Form導入でcreate/edit共通化
  5. テスト追加

授業用ドキュメント

  • BUG_CATALOG.md:バグ・改善ポイント一覧(難易度付き)
  • TEACHING_PLAN.md:80分の進行案(先生用)
  • WORKSHEET.md:学生用チェックリスト

About

不具合があるメモアプリです。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published