🆕 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 ディレクトリ) |
先生の管理構造は クラス(学級)→ 課題(1授業) の 2 階層。ログイン後はクラス一覧が入口で、クラスをひらくと課題管理ボード(トピックごとのセクション・日付降順)が表示される。生徒のモデル(課題ごとの参加コード + 匿名席番号)は不変。
ログイン → クラス一覧 → 課題管理ボード → 課題詳細(出席・提出・返却・一括DL・課題配付)
\→ 評価(クラス単位・学期末)
- 既存データは初回のクラス一覧表示時に冪等 migration で v2 へ移行(詳細: architecture.md の「データモデル v2」)
- Google Classroom 連携の紐づけ(courseId)はクラス(学級)単位で持ち、課題配信はその courseId を使う。ただしコースのインポートは課題を 1 件作る(
Classroomsに書き込む。所属クラスは migration が後から割り当てる)
用語の正: クラス(学級)= ClassroomGroups / groupId、課題(1 授業)= Classrooms / classroomId。このディレクトリの文書はすべてこの表記に従う(生徒が参加コードで参加する単位は「課題」であって「クラス」ではない)。「組」「学級」「クラスルーム」といった揺れの扱いと、改名しない識別子(/admin/classrooms 等)の対応表は 管理 SPA の用語辞典 にまとめてある。
- Smalruby を開く(
https://smalruby.app) - メニューバーの「クラス」をクリック
- 「先生」を選択 → Google または Microsoft でログイン
- 「クラスを作る」→ クラス名・人数を入力。最初の課題名は任意で、入力するとクラス(学級)と課題が同時に作られ、空欄ならクラスだけが作られる(課題はあとから課題ボードで追加する)
- (任意)課題詳細の「説明」タブで課題ページとスタータープロジェクトを設定する
- 課題ごとに生成された参加コードを生徒に伝える
- 先生から参加コードを受け取る
- Smalruby を開く(参加リンク or
https://smalruby.app) - 「生徒」→ 参加コード入力 → 席番号を選択
- 課題が設定されていれば、参加した瞬間に課題ページが表示され、「スターターから始める」でスタータープロジェクトを開ける
- プロジェクトを作成し「提出」ボタンで提出
- 先生がメンバーを Remove すると、対象の生徒は次にクラスモーダルを開いたタイミングで「先生によってクラスから退室させられました」と通知され、自動で出席番号選択画面に戻ります。同じ課題の席を即座に選び直して再参加できます(UI 文言の「クラス」は #1135 で整理)。
- 生徒は seat 選択画面で「使用中」の席をタップして、先生に退室を依頼できます。先生は課題詳細の座席バッジ + メンバー詳細パネルで「承認 (kick)」「却下」を選べます。
- 生徒の課題への参加状態は localStorage に永続化されており、ブラウザ再起動・新タブ・classcode URL の再オープンでも保持されます (旧仕様: sessionStorage)。
- 異なる classcode URL を開くと、古い席はサーバー側でも自動で leave されます。
課題に参加中(生徒)または先生がクラス管理で課題を選択中の間、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)
- インターネット接続
クラス機能は CLASSROOM_API_ENDPOINT 環境変数が設定されている場合に有効です(メニューバーに「クラス」ボタンが表示されます)。
