Skip to content

feat(classroom): 全国の先生による課題共有ライブラリ「みんなの課題」 (EPIC) #1066

Description

@smalruby3-editor-bot

背景

先生が自身で作成した課題(説明ページ: テキスト + 画像、スタータープロジェクト)を、インターネットを通じて全国の先生に共有し、再利用できる仕組みを作る。

具体的な利用イメージ:

  • スモウルビー甲子園の入門課題、メッシュ(通信)の課題などを授業で実施した先生が、その課題を共有する
  • 学習指導案・研究発表資料などの補足資料は外部 URL(Google Drive / Google Documents へのリンクを想定)として課題に添付する
  • 他の先生は共有された課題を閲覧・絞り込みし、自分のクラスに取り込む(再利用)とスタータープロジェクトごと読み込まれ、そのまま授業を進められる

既存資産との関係

  • 課題モデルはそのまま使う: 課題の説明は現行どおり「画像 + テキストのページ」+ スタータープロジェクト(S3 {classroomId}/assignment/)。追加は補足資料用 URL のみ
  • 再利用の複製機構は既存: POST /classrooms/{id}/duplicate が説明・画像・スターターの S3 コピーを既に実装している(共有→取り込みはこの機構の共有ストア版)
  • 組み込みテンプレート機能(classroom-assignment-templates/)は未リリース・導線撤去済み。本 EPIC が求めるのはスモウルビーに組み込んだテンプレートではなく、全国の先生が作った課題を共有する仕組み(テンプレート lib は「pages + 推奨ルーブリック軸」というフォーマットの先行事例としてのみ参照)

要件

機能要件

# 要件
F1 先生が自分の課題を共有ライブラリに公開できる(説明ページ + スタータープロジェクト + 補足資料 URL)
F2 補足資料 URL を課題に添付できる。共有時に「どのような URL を期待しているか」(学習指導案などを配置した Google Drive / Google Documents 等の閲覧リンク)を明示し、無関係な URL の投稿を抑止する
F3 投稿者プロフィールを表示する(著作権が投稿者にあることを明確にするため)。ただし個人情報は最小限とする
F4 日本の学校に合わせた属性を持つ: 学校種(小/中/高 など)、学年、教科 など
F5 共有課題の全体閲覧と属性による絞り込みができる
F6 他の先生が共有課題を自分のクラスに取り込める(スタータープロジェクト込みの複製。取り込み後は自由に編集可能なスナップショット)
F7 投稿者は自分の共有課題を更新・取り下げできる
F8 不適切な投稿への対処手段がある(通報 or 運用者削除。方式はスパイクで決定)

非機能要件

# 要件
N1 全国の先生が利用するため、ある程度の数の投稿(数百〜数千件規模)に耐える閲覧・絞り込み
N2 共有課題は保存期限(TTL)の対象外(永続。クラス機能の 90 日 TTL と分離する)
N3 保持する個人情報は最小限(表示名 + 任意の所属程度。連絡先は持たない)
N4 公開 UGC としての安全性(利用規約・ライセンス整理、公開範囲の設計)

アーキテクチャ方針(初案 — スパイクで確定)

  • infra/smalruby-classroom の拡張として実装(課題フォーマット・先生認証・複製機構を共有するため)
  • 新 DynamoDB テーブル SharedAssignments{suffix}(TTL なし・永続)+ 絞り込み用インデックス
  • 新 S3 プレフィックス or 新バケット(既存バケットは全体に 365 日 lifecycle があるため、共有課題の実体は期限の当たらない場所に置く必要がある)
  • 投稿 = 課題のスナップショットを共有ストアにコピー / 取り込み = 共有ストアから自クラスに複製(既存 duplicate の応用)

Sub-issues

  • S0 [spike] 詳細設計(データモデル・API・UI フロー・属性タクソノミ・URL/プロフィール/ライセンス/モデレーション方針)→ 壁打ちで決定事項を確定し、実装 sub-issue を起票する
  • (S1 以降はスパイク完了後に起票)

スパイクで決める主な論点(Decision Log はスパイク完了時にここへ転記)

  1. 閲覧の公開範囲(ログイン不要の全公開 vs 先生ログイン必須)
  2. 補足資料 URL の制約方式(ガイダンス表示のみ / https 必須 / ドメイン許可リスト)
  3. ライセンス・利用規約(CC BY 等の既存ライセンス vs 独自規約)
  4. モデレーション方式(事後通報型 vs 事前承認型)と運用体制
  5. 属性タクソノミの具体(学校種 × 学年 × 教科 + 自由タグ?)
  6. プロフィールの項目(表示名・所属の扱い)
  7. ストレージ構成(新バケット vs プレフィックス分離)と配信方式
  8. 検索・絞り込みの実装方式(規模想定に対する GSI 設計)

🤖 この EPIC は Claude Code が起案しました。スパイク(S0)で詳細設計の壁打ちを行い、決定後に実装 sub-issue を展開します。

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions