小学校の児童が日々の学びを記録し、先生が閲覧・返却・分析できるWebアプリです。
先生おひとりずつが、ご自分の Google アカウントで公開して使います。 共通の入口はありません。 入れかたの案内は reflection-journal.giga-school.com にあります。
配布用のスプレッドシートをコピーすると、そのファイルにこのスクリプトが束ねられた状態で付いてきます。 先生はコピーしてデプロイするだけで、クラス専用の URL ができます。
- 1 ファイル = 1 クラスです。記録も画像も、そのスプレッドシートの中に入ります。
- 中央のレジストリ・クラスコード・運営者のアカウントはありません。
- 実行も保存も、公開した先生の Google アカウントの中で完結します。制作者はデータを見られません。
- 先生に Google Cloud の設定をお願いすることはありません。
legacy/drive-native/ には、2026-08-23 まで本番だった「GitHub Pages + Google Drive REST API」版が
履歴資料として残っています。配信からは外してあり、現在の運用には使いません。
- 配布用スプレッドシートのコピーリンク を開き、「コピーを作成」を選びます。 (同じリンクは案内ページにもあります。)
- できたファイルの「拡張機能」>「Apps Script」>「デプロイ」>「新しいデプロイ」>種類は「ウェブアプリ」。 実行するユーザー: 自分/アクセスできるユーザー: 同じ組織内の全員 承認をたずねられたら許可してください。
- 出てきた
/execの URL を児童に配ります。先生ご自身が同じ URL を開くと先生の画面が出ます。
初期設定はありません。 シートは最初に開いたときに自動で作られ、 デプロイしたご本人が、そのままこのクラスの先生になります。クラス名はスプレッドシートの 名前がそのまま使われ、アプリの画面で変えられます。そろっているかどうかは、 先生の画面の「準備の状態」で確かめられます。
学校のポリシーで外部ファイルのコピーが禁じられている場合はこちらです。入るものは同じです。
- 新しいスプレッドシートを作り、「拡張機能」>「Apps Script」を開きます。
- 既定の
コード.gsを消し、このリポジトリの.gsを 5 本貼り付けます (Main.gs/Db.gs/Access.gs/MemberApi.gs/OwnerApi.gs)。 さらに正本のGemini.gsも貼ります(Gemini を使わない場合も、参照があるので必要です)。 - 「+」>「HTML」で 5 つ作り、
index/app/css/vendor/qrと名付けて、 同名の.htmlの中身を貼り付けます。 - 「プロジェクトの設定」>「
appsscript.jsonマニフェスト ファイルをエディタで表示する」に チェックを入れ、このリポジトリのappsscript.jsonの中身に置き換えます。 - あとは手順A の 2 以降と同じです。
⚠️ アクセスできるユーザーに「全員(匿名ユーザーを含む)」を選ばないでください。 この設定だとSession.getActiveUser()が空になり、アプリは誰が書いたのかを確かめられません。 学習の記録を名前つきで残すアプリなので、その状態では画面を出さずに止めます。
ウェブアプリからは、誰も先生になれません。 先生の登録は、スプレッドシートを開ける人 (=ファイルの持ち主)がメニューから 1 回行います。児童にはスプレッドシート自体を渡さないので、 この経路には入れません。
「未設定のときは最初に開いた人を先生にする」形にすると、先生が開く前に URL を配った学級で 最初の児童が恒久的に先生になります。取り消しがきかない事故なので、初回でも通しません。
記録はスプレッドシートの中にあります。先生が誤字を直しにシートを開くのは想定内の操作なので、 その途中で列が 1 本挿さることも起こりうるものとして扱います。
- 列は「見出しの名前」で引きます。 並べ替えても動きますし、メモ用の列を右に足しても構いません。
- 見出しの名前を変える・列を消すと、その列の読み書きだけが止まります。 どこがどうずれているかを名指しで出します。
- スプレッドシートのメニュー、または先生の画面の「クラス設定」から点検・修整できます。
| 見つかるもの | 自動で直すか |
|---|---|
| シートが無い | 直す(見出しだけのシートを作る。消えた中身は戻らない) |
| 見出し行が空 | 直す |
| 列が足りない | 直す(右端に足す。既にある列は動かさない。名簿の「状態」には active を入れる) |
| 見出しが固定されていない | 直す |
| 見出しの名前が変わっている疑い | 直さない(足すと元の列が読まれないまま空の列ができる) |
| 同じ見出しが 2 つある | 直さない(どちらが本物かは中身を見ないと決められない) |
| 列の並びが違う | 直さない(見出しの名前で引いているので害が無い) |
| 知らない列がある | 直さない(先生が足したメモ列かもしれないので消さない) |
| シート | 中身 |
|---|---|
| 児童名簿 | 役割(担任/児童)・氏名・メールアドレス・状態(active/pending) |
| ジャーナルデータ | 1 行 1 提出。本文・気持ち・画像ID・先生のコメント・範囲コメント・状態 |
| テーマ設定 | 日付を決めて配るテーマ |
| 設定 | クラスの設定(Gemini の API キー、曜日別テーマ、参加の受付) |
| 画像データ | 添付画像。1 セル 50,000 文字の上限があるので切って複数行に入れる |
| _meta | このファイルの先生・クラス名・スキーマ版の控え |
- 当日テーマと曜日別テーマの配信
- 提出率、検索、未返却/返却済みの絞り込み、本文・画像の確認
- クイックスタンプ、返却取り消し、本文範囲へのコメント、全体コメント、一括返却
- Geminiによる単件/一括コメント下書きと範囲提案(任意・先生の確認必須)
- 今日の提出数、記述量/気持ちの変化検知、14日間の気持ちヒートマップ
- 参加申請の承認/除外、1人/一括の事前名簿登録
- 児童用URLとQRコード、招待文の発行
- CSV出力、印刷/PDF保存
- シートの点検・修整
- 配られた URL を開くだけで参加(学校の Google アカウントでログイン)
- 画面サイズに応じて書く領域を優先するノート画面と[広く書く]表示
- 未提出下書き、YWT/KPT/5W1Hなどの型、書き出し、カテゴリ別ヒント
- テーマ、本文、気持ち、画像の提出と完了演出
- カレンダー、過去の記録、新着返却、全体/本文範囲のおへんじの閲覧
- 1か月以上前の自分の文章へのメッセージ
- 児童向け固定UIのふりがな
ふりがなはアプリが用意した児童向け固定文言に付きます。先生が入力したテーマやおへんじ、 児童自身が入力した文章へ自動でふりがなを生成する機能ではありません。
| スコープ | 用途 |
|---|---|
spreadsheets.currentonly |
このスクリプトが束ねられている 1 ファイルだけの読み書き |
script.container.ui |
スプレッドシートのメニューを出す |
script.external_request |
Gemini への通信(使うときだけ) |
userinfo.email |
誰が開いているかの確認 |
ドライブ全体を読む権限は要求しません。 保護者説明で「子どものドライブ全部を読めます」と 言わざるを得なくなる形は避けています。
| データ | 置き場所 | 共有先 |
|---|---|---|
| 名簿・提出・返却・テーマ・設定・画像 | 先生がコピーしたスプレッドシート | 共有しない(児童はシートの権限を持たない) |
| 未提出下書き・既読状態 | 児童の端末のブラウザ | 共有しない |
児童の端末に保存するキーには、メールアドレスではなくそこから作った匿名の識別子を使います。
- 1 ファイル = 1 クラスです。2 クラス受け持つ先生はコピーを 2 つ作ってください(URL も 2 本)。
- 学校の Google アカウントを児童が持っていない場合は使えません(誰が書いたかを確かめられないため)。
- 画面は自動では更新されません。最新の状態はボタンで読み直します。
- オフラインでは使えません。
- 心のバイタルの変化検知は診断ではありません。必ず対面の様子と合わせて使います。
- Gemini支援は任意です。児童本文の外部送信について学校の承認を得たことを画面で明示した場合だけ 利用でき、生成内容は先生が確認してから返却します。児童へ直接は届きません。
配るリンクはこれです。
https://docs.google.com/spreadsheets/d/15yVHzXFrPQudGZu9nLt5zXJRtAEwJrdgW-3pub-KJWU/copy
作り方と、差し替える場所は docs/copy-distribution.md にあります。
| ファイル | 役割 |
|---|---|
Main.gs |
設定・スプレッドシートの取得・メニュー・doGet |
Db.gs |
シートの定義と I/O、点検(inspectSheets_)と修整(repairSheets_) |
Access.gs |
本人確認・名簿照合・役割・行の持ち主 |
MemberApi.gs |
児童の画面から呼ぶ API |
OwnerApi.gs |
先生の画面から呼ぶ API |
Gemini.gs |
正本のコピー(GIGAyama.github.io/standards/gas/Gemini.gs)。手で直さない |
index.html |
GAS の外枠(原本) |
src/app.jsx |
画面の原本 |
tools/extra.css / tailwind.config.js |
見た目の原本 |
app.html / css.html / vendor.html / qr.html |
生成物。手で編集しない(npm run build) |
docs/ |
導入案内のページ(GitHub Pages が配信) |
legacy/drive-native/ |
退役した Drive ネイティブ版。配信していない |
マージ=反映ではありません。 このリポジトリには 2 つの経路があります。
| 変えたもの | 届き方 |
|---|---|
docs/ |
main にマージ → GitHub Pages(docs/CNAME = reflection-journal.giga-school.com) |
.gs / *.html / appsscript.json |
自動では届きません。 配布用テンプレートを更新し、先生方に入れ直してもらう必要があります |
すでに公開済みの学級は、コピーした時点のコードで動き続けます。直しを届けたいときは
docs/copy-distribution.md の手順でテンプレートを更新し、案内ページ・README・紹介記事の
どこに影響するかを確かめてください。
- 利用者向けの詳しい手順: 操作マニュアル
- 配布用テンプレートの作り方: docs/copy-distribution.md
- 学校本番配備: セキュリティ・配備チェックリスト
- 退役した版の設計: legacy/drive-native/DRIVE_NATIVE_ARCHITECTURE.md
npm ci
npm run verifynpm run verify は、生成物が原本と一致しているか、Service Worker の版、QR生成、
.gs の認可とシートの点検・修整(node --test、偽の SpreadsheetApp で実走)、
品質ゲート(GIGA Standard v5 Part I + GAS 向けの G1〜G8)を通します。
GitHub Actions ではこれに加え、node scripts/selftest-check.mjs で
検査をわざと壊して落ちることを確かめ、Playwright/Chromium で案内ページと
退役版のUIを見ます。
CI では Google Workspace の組織ポリシーを再現できません。次を実機で確認してください。
- 別のアカウント(できれば学校のアカウント)でコピーリンクを開き、コピーが作れるか。 学校のドメインが「外部ファイルのコピー」を禁じていると、ここで止まります。
- コピーしたファイルをデプロイし、URL を開くだけで
_metaに自分のアドレスとfileIdが入るか(押す作業は無い)。 - デプロイして URL を開き、先生の画面が出るか。
- 児童のアカウントで同じ URL を開き、参加申請ができるか。承認前は本体に入れないか。
- 承認後に提出でき、コピーしたそのファイルの「ジャーナルデータ」に行が増えるか。
- 先生が返却すると、児童の画面に届くか。
- スプレッドシートで「ジャーナルデータ」の列を 1 本入れ替えても提出が正しい列に入るか。 メニューの「シートを点検する」が並びの違いを「直さなくてよい」と言うか。