Skip to content

Latest commit

 

History

History
 
 

classroom

README.md

Smalruby Classroom

🆕 Smalruby 独自 — upstream に存在しない、Smalruby のために新規追加された機能 日本の学校での利用に特化したクラス管理・作品提出機能。upstream の Scratch には存在しない。

Smalruby Classroom は、日本の学校の授業で Smalruby を使うためのクラス管理・作品提出機能です。

先生が Google または Microsoft アカウントでログインしてクラス(学級)と課題(1 授業)を作り、生徒は参加コードと席番号で課題に参加します。生徒はプロジェクトをワンクリックで提出でき、先生はリアルタイムで一覧・確認・返却できます。

目次

ドキュメント 内容
システム構成 AWS / GCP / Azure サービス、API ルート、データモデル
ユーザーストーリー 先生・生徒それぞれの利用フロー
UI/UX 画面遷移、各フェーズの説明
費用見積もり AWS / GCP の想定費用
ソースコード 関連ファイル一覧
テスト data-testid 一覧、Playwright / 結合テスト
Microsoft 認証 MSAL.js 統合、サイレント再認証、Azure Portal 設定
運用手順書 「消えた課題を復旧してほしい」問い合わせ対応(アーカイブ復元の案内 / 期限切れ復元スクリプト)
みんなの課題 全国の先生と課題を共有・再利用する機能(別 feature ディレクトリ)

v2: クラス→課題モデル(Google Classroom 準拠)

先生の管理構造は クラス(学級)→ 課題(1授業) の 2 階層。ログイン後はクラス一覧が入口で、クラスをひらくと課題管理ボード(トピックごとのセクション・日付降順)が表示される。生徒のモデル(課題ごとの参加コード + 匿名席番号)は不変。

ログイン → クラス一覧 → 課題管理ボード → 課題詳細(出席・提出・返却・一括DL・課題配付)
        \→ 評価(クラス単位・学期末)
  • 既存データは初回のクラス一覧表示時に冪等 migration で v2 へ移行(詳細: architecture.md の「データモデル v2」)
  • Google Classroom 連携の紐づけ(courseId)はクラス(学級)単位で持ち、課題配信はその courseId を使う。ただしコースのインポートは課題を 1 件作る(Classrooms に書き込む。所属クラスは migration が後から割り当てる)

用語の正: クラス(学級)= ClassroomGroups / groupId、課題(1 授業)= Classrooms / classroomId。このディレクトリの文書はすべてこの表記に従う(生徒が参加コードで参加する単位は「課題」であって「クラス」ではない)。「組」「学級」「クラスルーム」といった揺れの扱いと、改名しない識別子(/admin/classrooms 等)の対応表は 管理 SPA の用語辞典 にまとめてある。

Smalruby メニューバーの「クラス」ボタン

クイックスタート

先生

  1. Smalruby を開く(https://smalruby.app)
  2. メニューバーの「クラス」をクリック
  3. 「先生」を選択 → Google または Microsoft でログイン
  4. 「クラスを作る」→ クラス名・人数を入力。最初の課題名は任意で、入力するとクラス(学級)と課題が同時に作られ、空欄ならクラスだけが作られる(課題はあとから課題ボードで追加する)
  5. (任意)課題詳細の「説明」タブで課題ページとスタータープロジェクトを設定する
  6. 課題ごとに生成された参加コードを生徒に伝える

生徒

  1. 先生から参加コードを受け取る
  2. Smalruby を開く(参加リンク or https://smalruby.app)
  3. 「生徒」→ 参加コード入力 → 席番号を選択
  4. 課題が設定されていれば、参加した瞬間に課題ページが表示され、「スターターから始める」でスタータープロジェクトを開ける
  5. プロジェクトを作成し「提出」ボタンで提出

強制退室通知と退室リクエスト (Issue #692)

  • 先生がメンバーを Remove すると、対象の生徒は次にクラスモーダルを開いたタイミングで「先生によってクラスから退室させられました」と通知され、自動で出席番号選択画面に戻ります。同じ課題の席を即座に選び直して再参加できます(UI 文言の「クラス」は #1135 で整理)。
  • 生徒は seat 選択画面で「使用中」の席をタップして、先生に退室を依頼できます。先生は課題詳細の座席バッジ + メンバー詳細パネルで「承認 (kick)」「却下」を選べます。
  • 生徒の課題への参加状態は localStorage に永続化されており、ブラウザ再起動・新タブ・classcode URL の再オープンでも保持されます (旧仕様: sessionStorage)。
  • 異なる classcode URL を開くと、古い席はサーバー側でも自動で leave されます。

Mesh v2 ドメインの自動連動

課題に参加中(生徒)または先生がクラス管理で課題を選択中の間、Mesh v2 のドメインはその課題の参加コードに自動で固定される。これにより同じ課題の先生・生徒が自動で同じ Mesh ドメインに集まる。詳細は docs/mesh-v2/README.md を参照。

生徒がクラスの流れ(「スターターから始める」「スタータープロジェクトを開く」「前回 / 今回の提出物から続ける」)で読み込んだ作品がメッシュのブロックを使っていて、まだ接続していなければ、メッシュの接続モーダルが自動で開く(「ホストになる / メッシュに参加する」の画面。ドメインは参加コードに固定済み)。詳細は docs/mesh-v2/README.md を参照。

課題に参加中の生徒は、メッシュの接続モーダルの先頭の「出席番号でつながる」から、いっしょにつながる人の出席番号を選ぶだけでグループを作れる(従来の「ホストになる / メッシュに参加する」は「従来の方法でつなぐ」の中にたたまれる)(ホストは選んだ中で一番小さい番号の人。欠席の番号は待たない)。1 グループの人数の上限は課題の「メッシュのグループの人数」(6 人まで / 制限なし)に従う。制限なしの課題で先生が「ホストになる」と、生徒の画面に[先生のグループに入る]が出る。詳細は docs/mesh-v2/README.md を参照。

前提条件

  • Google アカウントまたは Microsoft アカウント(先生のログインに必要)
  • モダンブラウザ(Chrome / Edge / Firefox / Safari)
  • インターネット接続

前提: API エンドポイント

クラス機能は CLASSROOM_API_ENDPOINT 環境変数が設定されている場合に有効です(メニューバーに「クラス」ボタンが表示されます)。