Skip to content

Latest commit

 

History

175 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📔 ふりかえりジャーナル

小学校の児童が日々の学びを記録し、先生が閲覧・返却・分析できるWebアプリです。

先生おひとりずつが、ご自分の Google アカウントで公開して使います。 共通の入口はありません。 入れかたの案内は reflection-journal.giga-school.com にあります。

結論:スプレッドシートにコンテナバインドした Google Apps Script です

配布用のスプレッドシートをコピーすると、そのファイルにこのスクリプトが束ねられた状態で付いてきます。 先生はコピーしてデプロイするだけで、クラス専用の URL ができます。

  • 1 ファイル = 1 クラスです。記録も画像も、そのスプレッドシートの中に入ります。
  • 中央のレジストリ・クラスコード・運営者のアカウントはありません。
  • 実行も保存も、公開した先生の Google アカウントの中で完結します。制作者はデータを見られません。
  • 先生に Google Cloud の設定をお願いすることはありません。

legacy/drive-native/ には、2026-08-23 まで本番だった「GitHub Pages + Google Drive REST API」版が 履歴資料として残っています。配信からは外してあり、現在の運用には使いません。

入れかた

手順A:スプレッドシートをコピーする(おすすめ)

  1. 配布用スプレッドシートのコピーリンク を開き、「コピーを作成」を選びます。 (同じリンクは案内ページにもあります。)
  2. できたファイルの「拡張機能」>「Apps Script」>「デプロイ」>「新しいデプロイ」>種類は「ウェブアプリ」。 実行するユーザー: 自分/アクセスできるユーザー: 同じ組織内の全員 承認をたずねられたら許可してください。
  3. 出てきた /exec の URL を児童に配ります。先生ご自身が同じ URL を開くと先生の画面が出ます。

初期設定はありません。 シートは最初に開いたときに自動で作られ、 デプロイしたご本人が、そのままこのクラスの先生になります。クラス名はスプレッドシートの 名前がそのまま使われ、アプリの画面で変えられます。そろっているかどうかは、 先生の画面の「準備の状態」で確かめられます。

手順B:ファイルを貼り付ける

学校のポリシーで外部ファイルのコピーが禁じられている場合はこちらです。入るものは同じです。

  1. 新しいスプレッドシートを作り、「拡張機能」>「Apps Script」を開きます。
  2. 既定の コード.gs を消し、このリポジトリの .gs5 本貼り付けます (Main.gs / Db.gs / Access.gs / MemberApi.gs / OwnerApi.gs)。 さらに正本の Gemini.gs も貼ります(Gemini を使わない場合も、参照があるので必要です)。
  3. 「+」>「HTML」で 5 つ作り、index / app / css / vendor / qr と名付けて、 同名の .html の中身を貼り付けます。
  4. 「プロジェクトの設定」>「appsscript.json マニフェスト ファイルをエディタで表示する」に チェックを入れ、このリポジトリの appsscript.json の中身に置き換えます。
  5. あとは手順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のふりがな

ふりがなはアプリが用意した児童向け固定文言に付きます。先生が入力したテーマやおへんじ、 児童自身が入力した文章へ自動でふりがなを生成する機能ではありません。

Google 権限

スコープ 用途
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・紹介記事の どこに影響するかを確かめてください。

操作・開発・テスト

npm ci
npm run verify

npm 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 の組織ポリシーを再現できません。次を実機で確認してください。

  1. 別のアカウント(できれば学校のアカウント)でコピーリンクを開き、コピーが作れるか。 学校のドメインが「外部ファイルのコピー」を禁じていると、ここで止まります。
  2. コピーしたファイルをデプロイし、URL を開くだけで _meta に自分のアドレスと fileId が入るか(押す作業は無い)。
  3. デプロイして URL を開き、先生の画面が出るか。
  4. 児童のアカウントで同じ URL を開き、参加申請ができるか。承認前は本体に入れないか。
  5. 承認後に提出でき、コピーしたそのファイルの「ジャーナルデータ」に行が増えるか。
  6. 先生が返却すると、児童の画面に届くか。
  7. スプレッドシートで「ジャーナルデータ」の列を 1 本入れ替えても提出が正しい列に入るか。 メニューの「シートを点検する」が並びの違いを「直さなくてよい」と言うか。

About

Google Apps ScriptとReactで作る、次世代「ふりかえりジャーナル」。児童の「心のバイタル」を可視化し、Gemini AIが先生の温かいフィードバックを支援する、教育ツールです。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages