アプリ1つにつき、Google スプレッドシートを1つ用意する。 (ハブ / 九九 / 長さ で計3つ)
名簿の正本になるので、ハブから作る。
拡張機能 > Apps Script を開く| Apps Script 上の名前 | 中身 |
|---|---|
コード.gs(既定) |
apps/hub/Code.gs |
links(HTML) |
apps/hub/links.html |
teacher(HTML) |
apps/hub/teacher.html |
Analysis(.gs) |
apps/hub/Analysis.gs(単元横断分析) |
analysis(HTML) |
apps/hub/analysis.html(単元横断分析) |
Archive(.gs) |
apps/hub/Archive.gs(過年度:名簿の年度保存・個人情報の消去) |
regroup(HTML) |
apps/hub/regroup.html(資料:くり上がり/くり下がり解説。?page=regroup で開く) |
HTML は ファイル > + > HTML で追加。拡張子は入力しない(links とだけ)。
setup を1回実行して承認するroster シートに児童を入力する| 学年 | 組 | 番号 | 氏名 | |
|---|---|---|---|---|
| taro@example-school.ed.jp | 3 | 2 | 1 | 山田 太郎 |
学年・組の表記ゆれ(「2」と「2組」の混在)は別クラス扱いになるので統一する。
記録・分析の対象になるのは、email と氏名の両方が入っている児童だけ。 名簿にない児童(転入直後など)や氏名が空の行の児童もアプリは開け、 「おためし」として全モードを使えるが、記録は一切されない。
単元ごとに 1〜4 を繰り返す。
拡張機能 > Apps Script に5ファイルを貼る| Apps Script 上の名前 | 中身 |
|---|---|
Core(.gs) |
common/Core.gs |
Unit(.gs) |
apps/grade<学年>/<単元>/Unit.gs |
index(HTML) |
common/index.html |
teacher(HTML) |
common/teacher.html |
coop_shared(HTML) |
common/coop_shared.html(協力プレイの共有部品。index・teacher に挿入される) |
setup を1回実行して承認するroster シートの A1 に次を入れ、ハブの名簿を参照させる=IMPORTRANGE("ハブのスプレッドシートURL","roster!A:E")
初回だけ「アクセスを許可」を押す。以後、学年やクラスの変更は ハブを直すだけで全アプリに反映される。
?page=teacher)の「公開モード」タブで、公開するモードにチェックを入れる6 を忘れると児童の画面にモードが1つも出ない。 初期状態は全モードがオフで、
学年による自動の解禁は無い(docs/ARCHITECTURE.md「モードの公開」)。
デプロイ > 新しいデプロイ > 種類:ウェブアプリ
この組み合わせのときだけ、児童のメールアドレスが取得でき、 かつ児童はスプレッドシートへの権限を持たない(=成績を書き換えられない)。
/exec?page=teacher を付ける。
教師のアカウント(@edu.nishi.or.jp)で児童画面を開くと、画面下に「せんせい用の ページ →」が出るので、
URL を覚えていなくてもそこから移れる(児童のアカウントには出ない)。
教師画面の上には「スプレッドシートを開く」「児童の画面を見る」がある@edu.nishi.or.jp のアカウントは、名簿になくても教師として扱う(児童は @kyoiku.edu.nishi.or.jp)。
別ドメインの教師を足すときだけ、教師画面の「この画面を開ける教師」に1件ずつ書く。
ログインできれば誰でも使える。名簿にないアカウントは「おためし」として 全モードを遊べるが、記録・分析(log / summary / weak_child など)の対象にはならない。 記録されるのは、名簿に email と氏名の両方が登録されている児童だけ。
ハブの教師画面(?page=teacher)を開き、単元アプリの児童用 URL を追加する。
リンクの「出る学年タブ」で、そのリンクがどの学年タブに出るかを決める
(選ばないと全学年タブに出る)。
児童の画面は学年タブで切り替える。名簿にある児童が見られるのは 自分の学年のタブに加えて、教師画面の「見せるタブ」で選んだ学年のタブ (例:3年生に4年タブを見せる=3年生の行で「4年」を選ぶ)。 名簿にない児童(おためし)は全タブを見られる。
リンクの「置き場」を 右下の「資料」 にすると、タイルには出ず、児童画面の右下の「資料」ボタンの中に並ぶ。
公開/非公開と学年タブはタイルと同じに効く。資料の URL は /exec で終わらなくてよい(他サイトでもよい)。
「+ ハブの資料…」からは、ハブ自身が配るページ(くり上がり/くり下がり解説)を1押しで足せる。
資料が1件も出ない児童には「資料」ボタン自体が出ない。
links シートには10列目 place(空=タイル、doc=資料)が増える。古いシートは「保存して反映」を1回押すと見出しが付く(押すまでは全部タイル扱い)。
児童にはハブの URL だけを配ればよい。
要件と基準の根拠は docs/ANALYSIS_REQUIREMENTS.md。ハブの スプレッドシートの所有者だけ が使う前提で作ってある。
setup を所有者のアカウントで実行する(夜間集計 nightlyAnalysis のトリガーが毎日1時台にできる)meta シートができる。型の名前をハブへ渡すため)config シートの an_analysts に書いた人だけ
(a@edu.nishi.or.jp:3-1|3-2, b@edu.nishi.or.jp:*)。教師ドメインなら誰でも、にはしていないconfig シートの an_min_trials などで変えられるが、データを見てから変えない(変える時は理由と日付を docs に残す)an_facts / an_support)も見える。共有しないClassroom か Chromebook のブックマークにハブの URL を登録し、 全画面(□キー)で使わせる。
setup の再実行は不要。シートの新設は次に誰かが開いた時点で自動的に行われる。
モードの公開をフラグ単位からモード単位に変えた版に上げるときは、class_config の
設定が一度リセットされる。 列名が allow_<フラグ> から mode_<番号> に変わるため、
古い列は読まれない。貼り替えたあと、教師画面でクラスごとに公開するモードを入れ直す。
ファイルを貼り替えるのではなく、スプレッドシートごと作り直したときは、 古い入口を必ず閉じる。
ゴミ箱に入れただけでは、古い URL が開けなくなるとは限らない。 デプロイはスプレッドシートではなくスクリプトプロジェクトに紐づいており、 ゴミ箱の中のファイルも完全削除までは残る。 児童の閲覧履歴とブックマークからは、今までどおり開ける可能性がある。 古い写しと新しい写しは画面が同じなので、開けてしまえば児童も教師も見分けられない。 「たぶん開けないはず」を前提にせず、下の手順で入口そのものを潰す。
このとき起きること:
手順:
/exec に差し替える/** 旧版の入口。新しいページへ案内するだけ */
var NEW_URL = 'ここに新しい /exec の URL';
function doGet() {
return HtmlService.createHtmlOutput(
'<div style="font-family:system-ui,sans-serif;text-align:center;' +
'padding:3rem 1.2rem;line-height:2.2">' +
'<p style="font-size:1.3rem;font-weight:800">この ページは ふるく なりました。</p>' +
'<p><a target="_top" style="font-size:1.2rem;font-weight:800" href="' + NEW_URL + '">' +
'あたらしい ページを ひらく</a></p></div>'
).addMetaTag('viewport', 'width=device-width, initial-scale=1');
}
古い写しを完全に削除するのは、記録を新しい写しへ移し終えてから。
削除すると log と summary も消える。
教師画面の見出しには、いま操作している写しの名前と、児童に配る URL が出る。 公開しても反映されないときは、まずそこが児童の開いている URL と同じか確かめる。
「色づかい:グループ」で使うグループは、単元のスプレッドシートの 「グループ分け」シートに置かれる(教師画面の「グループを編集…」で一度「保存」すると作られる)。 以前の版の 「組分け」シートがあれば、最初に開いた時に名前と見出しを「グループ分け」に付け替えて、そのまま使う(中身は消えない)。
| 時刻 | 内容 |
|---|---|
| 毎日 23時台 | weak_child / weak_class を自動集計 |
| 毎日 1時台 | daily シートの前日分を掃除 |
| 毎日 1時台(ハブ) | 単元横断分析:各単元の log の新しい行だけを an_facts に足し込む |
| 毎日 2時台(単元・ハブ) | 4/1 だけ:roster を値のまま roster_前年度 に写す。単元は roster を空にして IMPORTRANGE の式を戻す。ハブは roster を消さない |
集計は log を全走査するので、児童が使わない時間帯に回している。
授業直後にすぐ見たいときだけ、教師画面「分析」タブの「シートを今すぐ集計」を押す。
roster_前年度 ができる(ハブ・各単元)。ハブの setup を一度実行してトリガーを作っておくroster_年度 は削除されるar_work_年度 が残っているので、同じ番号で続きから進む。終わると消える)版の履歴には書き換える前の値が残る。 完全に消すには、消去のあとで各スプレッドシート(ハブ・各単元)について:
ファイル > コピーを作成 で写しを作る(写しには版の履歴が引き継がれない)ほかに残るもの:手立ての内容・メモに手で書いた氏名(an_support・an_decisions)、グループ分け シート。必要なら手で消す。
| 症状 | 対処 |
|---|---|
| 「おためしモード:きろくされません」と出る | その児童が roster に無いか、氏名が空。roster の email と氏名を確認(反映は最大5分) |
| 「ログイン情報を取得できません」 | 実行=自分/アクセス=ドメイン内 を再確認 |
| 「現在、ファイルを開くことができません」 | スプレッドシートの URL に ?page=teacher を付けている。/exec の URL を使う |
| ハイスコアが更新されない | 次回起動時に自動で送り直される |
| 順位が誰にも出ない | roster の学年・組の表記ゆれを確認 |
| 児童画面が「まだ もんだいが ひらいて いません」 | そのクラスで公開中のモードが0件。教師画面「公開モード」タブでチェックを入れて保存(初期状態は全オフ)。保存後、開いたままの端末にも15秒ほどで出る |
| 児童画面が「よみこみ中…」から進まない | 通信が返っていない。ネットワークか /exec の URL を確認する(公開モード0件は上の別文言になる) |
| 一部の児童だけ動く/公開が効く児童と効かない児童がいる | 古い写しと新しい写しが混在している。教師画面の見出しに出る URL と、児童が開いている URL を突き合わせる(上の「作り直した版に移すとき」) |
| 「サーバーが こんでいます」 | 同時実行が上限に達している。時間を置くと自動で取り直す。頻発するならクラスを2つに分けて開始をずらす |
| IMPORTRANGE が空 | 単元側の roster セルで「アクセスを許可」を押す |
名簿に自分だけを入れて、担任アカウントで1回通す。
Session.getActiveUser().getEmail() はドメイン設定によって空を返す事例がある。
ここが通らないと設計全体が成立しないので、40人に配る前に確かめる。