授業記録から保護者へ毎月送る学習報告の下書きを生徒ごとに作り、退塾の兆しを教室長へ知らせる
講師が授業ごとに残す記録から、保護者へ毎月送る学習報告の下書きを生徒ごとに作ります。点数と出欠は記録から機械で転記し、AIが書くのは講師のメモの範囲の所見だけです。欠席の増加や宿題の未提出の連続は、教室長へ一覧で知らせます。
- 利用ツール
- ChatGPT/Claude/Gemini/Google Apps Script/Make/Power Automate
- 対象業界
- 教育
- 対象部門
- カスタマーサポート/営業
- 対象業務
- 書類作成/要約
- 主な課題
- 営業フォローが追いつかない/属人化している/書類作成に時間がかかる
- AIで行う処理
- 生成
- 主な効果
- 品質標準化/属人化解消/工数削減/機会損失防止
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 月末になると、講師が担当生徒の一覧を開く
- 授業記録のシートで、生徒ごとに当月の行を絞り込む
- 出席した回数、欠席した回数、振替の有無を数える
- 宿題の提出状況を数え、未提出の回を確かめる
- 小テストの点を並べ、前月の点と見比べる
- 一言所見の欄を読み返し、報告に書くことを選ぶ
- 報告のひな形に、進度・点数・所見を書き込む
- 教室長が全員分を読み、表現を直して承認する
- 講師または事務が、保護者連絡アプリで送る
- 自動毎月1日の早朝、Apps Script が前月分の授業記録を読み込む
- 【計算】 生徒ごとに、出席・欠席・振替の回数、宿題の提出率、未提出の連続回数、小テストの点と前月比を数える
- 自動生徒の氏名や学校名を外し、仮の番号に置き換える
- 自動講師の所見メモと進度を、OpenAI API へ生徒1名ずつ渡す
- 【AI】 メモの範囲で所見の文章を組み立て、各文に根拠のメモの日付を付けて返す
- 【検査】 返ってきた文に、渡していない数字や日付が混ざっていないかを確かめる
- 自動数字の欄は記録から転記し、AIの所見と合わせて下書きのシートに並べる
- 【計算】 欠席増・宿題未提出の連続に当たる生徒を、教室長向けの一覧に載せる
- 人担当講師が下書きを読み、手直しして「確認済み」にする
- 人教室長が承認し、講師または事務が保護者連絡アプリで送る
各工程の詳しい説明を読む
- 月末になると、講師が担当生徒の一覧を開く
- 授業記録のシートで、生徒ごとに当月の行を絞り込む
- 出席した回数、欠席した回数、振替の有無を数える
- 宿題の提出状況を数え、未提出の回を確かめる
- 小テストの点を並べ、前月の点と見比べる
- 一言所見の欄を読み返し、報告に書くことを選ぶ
- 報告のひな形に、進度・点数・所見を書き込む
- 教室長が全員分を読み、表現を直して承認する
- 講師または事務が、保護者連絡アプリで送る
問題は5つあります。
(a)月末の数日に400件が集中する。 報告づくりは授業の合間にしかできません。授業の準備を削るか、残業で書くかのどちらかになります。 1名の講師が60名を担当していれば、それだけで12時間です。
(b)書きぶりが講師によって違う。 ある講師は3行、ある講師は10行書きます。同じ教室に兄弟が通っていると、保護者は2通を読み比べます。 丁寧さの差は、そのまま教室への評価の差になります。
(c)所見が盛られる。 何を書けばよいか迷うと、講師は「よく頑張っています」でまとめます。記録にない褒め言葉が続くと、点数が下がった月に説明がつかなくなります。
(d)転記の誤りが起きる。 小テストの点を目で拾って書き写すため、隣の行の点を写すことがあります。教室長の確認でも、数字までは照合しきれません。
(e)退塾の兆しが報告づくりの中で埋もれる。 欠席が増えている生徒に講師が気づいても、報告を書き終えることが優先されます。教室長に伝わるのは、保護者から退塾の連絡が来た後です。
- 【自動】 毎月1日の早朝、Apps Script が前月分の授業記録を読み込む
- 【計算】 生徒ごとに、出席・欠席・振替の回数、宿題の提出率、未提出の連続回数、小テストの点と前月比を数える
- 【自動】 生徒の氏名や学校名を外し、仮の番号に置き換える
- 【自動】 講師の所見メモと進度を、OpenAI API へ生徒1名ずつ渡す
- 【AI】 メモの範囲で所見の文章を組み立て、各文に根拠のメモの日付を付けて返す
- 【検査】 返ってきた文に、渡していない数字や日付が混ざっていないかを確かめる
- 【自動】 数字の欄は記録から転記し、AIの所見と合わせて下書きのシートに並べる
- 【計算】 欠席増・宿題未提出の連続に当たる生徒を、教室長向けの一覧に載せる
- 【人】 担当講師が下書きを読み、手直しして「確認済み」にする
- 【人】 教室長が承認し、講師または事務が保護者連絡アプリで送る
自動化されるのは「数える」「転記する」「所見の文章を組み立てる」「兆しを拾う」の4つです。残るのは、下書きが本当にその生徒のことを書いているかを確かめることと、送ることです。
送信は自動にしません。 保護者へ届く文章は、塾と家庭のあいだの約束です。講師が一度も読まずに届いた報告は、内容が正しくても講師の言葉ではありません。 講師が1行でも自分の言葉を足せるように、下書きの末尾に空欄を残します。
退塾の兆しの一覧は、保護者への報告とは別の場所に置きます。 報告の下書きに「要注意」と書かれていると、コピーした拍子に保護者へ届く恐れがあります。
02今回想定するシステム構成
授業記録シート(授業ごと:日付 / 生徒番号 / 出欠 / 進度 / 宿題 / 小テスト / 一言所見) 生徒台帳シート(生徒番号 / 学年 / コース / 担当講師 / 教室) │ ▼【トリガー】毎月1日 5時台(Apps Script の時間主導型トリガー) Google Apps Script │ ├──▶ 【計算】出欠・宿題・小テストを生徒ごとに集計(AIは通さない) │ ├──▶ 【計算】退塾の兆しの規則に当たる生徒を抽出(AIは通さない) │ ├──▶ 氏名・学校名を外し、仮の番号に置き換える │ ├──▶ UrlFetchApp で OpenAI API へ1名ずつ送る │ │ │ └──▶ 所見の文章(各文に根拠のメモの日付)を JSON で返す │ ├──▶ 【検査】渡していない数字・日付・固有名詞が混ざっていないか │ └──▶ 下書きシート(講師別)と、要フォロー一覧(教室長向け)に書き込む │ ▼ 講師が確認・手直し ──【人】 │ ▼ 教室長が承認し、保護者連絡アプリで送る ──【人】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | OpenAI API(ChatGPT) | Claude API、Gemini API |
| 連携 | Google Apps Script | Power Automate、Make |
| 授業記録 | Google スプレッドシート | Excel、塾向けの管理システム |
| 送付 | 既存の保護者連絡アプリ | メール |
塾向けの管理システムを使っているなら、先にその機能を確かめてください。 授業記録と保護者連絡が一体になった製品には、報告のひな形を持つものがあります。自前で組む価値があるのは、「所見をメモの範囲に収める」と「兆しを規則で拾う」の2点です。
つなぎ役は Apps Script です。 授業記録がスプレッドシートにあるなら、同じ場所でスクリプトを動かせます。外部のAPIを呼ぶのは UrlFetchApp.fetch(url, params) で、params に method(post など)、contentType(application/json を指定できます)、headers、payload を渡します。muteHttpExceptions を true にすると、失敗の応答でも例外を投げずに応答を返します。 1名の失敗で全体を止めないために、この指定を使います。複数の要求をまとめて送る fetchAll もあります。
月1回の起動は、時間主導型トリガーで作ります。 実行の頻度は1分ごとから月1回まで設定できます。開始時刻は1時間の幅の中で決まり、たとえば9時に設定すると9時から10時のあいだのどこかで動きます。 講師が出勤する前に終わらせたいので、早朝に置きます。
処理を担うのは OpenAI API です。 構造化出力(Structured Outputs)で、返す形をJSONスキーマに固定します。ChatGPT の画面に1名ずつ貼る方法でも試せますが、400名を毎月回すなら API で呼ぶ形になります。
03どうやって実装するのか
処理の起点を決める
毎月1日の5時台に、前月分をまとめて処理します。 Apps Script の時間主導型トリガーで「月ごと」を選び、日と時刻を指定します。開始時刻は1時間の幅で揺れるため、講師が出勤して下書きを開くまでに処理が終わる時刻を選んでください。
月末の最終授業の記録が入りきってから動かすことが条件です。 月末の土曜に授業があり、講師がその記録を翌週に入れる運用なら、1日では早すぎます。「月末の授業の記録は、その日のうちに入力する」を先に決めてください。 決められないなら、トリガーを3日にずらします。
手動の起点も用意します。 転塾してきた生徒の初回報告や、記録を直したあとの作り直しのために、スプレッドシートのメニューから「この生徒だけ作り直す」を実行できるようにします。月次の処理と同じ関数を、生徒番号を1つ渡して呼ぶ形にします。
トリガーが失敗しても、画面にエラーは出ません。 失敗は Apps Script から届く通知メールで分かります。通知の宛先になるのはトリガーを作った人です。 教室長のうち1名のアカウントで作り、その人が休んでも誰かが見られるよう、通知メールの転送先を決めておきます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 授業記録 | 授業日、生徒番号、出欠(出席/欠席/振替)、進度(単元名)、宿題(提出/一部/未提出)、小テストの点と満点、一言所見 | 授業記録シート |
| 生徒台帳 | 生徒番号、学年、コース、受講曜日、担当講師、教室 | 生徒台帳シート |
| 前月の集計 | 前月の出席数、欠席数、宿題の提出率、小テストの平均 | 前月の下書きシート |
| 当月の目標 | 前月の報告に書いた「来月の目標」 | 前月の送付済みシート |
| 教室からの連絡 | 翌月の休講日、面談の案内など、全員共通の文 | 設定シート |
AIに渡すのは、このうち進度・一言所見・当月の目標・学年とコースだけです。 出欠と点数は、集計した値を「参考」として渡しますが、報告の数字の欄はAIの出力からではなく、集計結果から直接書き込みます。
データの取得方法を決める
授業記録: 講師が授業のあとにスプレッドシートへ1行ずつ入力します。1行が「1授業×1生徒」になる形にそろえてください。 1行に複数の生徒を書く形や、セルの中で改行して複数回分を書く形だと、集計ができません。フォームから入力させる場合も、回答がこの形のシートにたまるようにします。
一言所見の欄の書き方を、最初に決めます。 この欄が報告の所見の唯一の材料になります。「良かった点」「気になる点」「次回やること」の3つを、それぞれ短く書くルールにすると、AIが組み立てる文の偏りが減ります。空欄が続く生徒は、報告に書ける所見がありません。
生徒台帳: 氏名はこのシートに置き、授業記録には生徒番号だけを書きます。授業記録に氏名を書かないことで、AIへ送る経路から氏名を切り離せます。
前月の集計と当月の目標: 前月の処理で作った下書きシートと送付済みシートから読みます。「来月の目標」は保護者との約束なので、翌月の報告で必ず触れさせます。
AIへ渡す前に整形する
- 当月の行の抽出 … 授業日で前月1日から末日までの行を取り出す
- 集計(Apps Script の中で計算する) … 生徒ごとに出席・欠席・振替の回数、宿題の提出率、未提出の連続回数、小テストの点の一覧と平均、前月比を出す。AIに数えさせない
- 兆しの判定(規則) … 次のどれかに当たれば要フォローにする。欠席が前月より2回以上増えた/欠席が2回続いた/宿題の未提出が3回続いた/小テストの平均が前月から15点以上下がった。閾値は設定シートに置き、教室長が変えられるようにする
- 氏名と学校名の除去 … 一言所見の欄に講師がうっかり書いた生徒の名前、兄弟の名前、学校名を、生徒台帳と学校名の一覧で照合して「本人」「兄弟」「学校」に置き換える
- 仮の番号への置き換え … 生徒番号を、その回の処理だけで使う連番に置き換える。対応表はスプレッドシートの中にだけ残す
- メモの並べ替え … 一言所見を授業日の順に並べ、各行の頭に日付を付ける。AIが根拠を日付で示せるようにするため
- 空欄の確認 … 一言所見が当月1件もない生徒は、AIへ送らない。下書きの所見欄を空にし、講師に「所見が記録されていません」と表示する
4番目の置き換えは、完全には防げません。 「Aちゃんと仲がいい」のように、台帳にない呼び名が書かれることがあります。講師への研修で「所見の欄に人の名前を書かない」を繰り返し伝えることのほうが効きます。
AIに処理させる
Apps Script(計算)にさせること:
| 処理 | 内容 |
|---|---|
| 出欠の集計 | 出席・欠席・振替の回数 |
| 宿題の集計 | 提出率、未提出の連続回数 |
| 小テストの集計 | 点の一覧、平均、前月比 |
| 兆しの判定 | 設定シートの閾値に当たるかどうか |
| 数字の転記 | 報告の数字の欄へ、集計結果をそのまま書き込む |
| 出力の検査 | AIの文に、渡していない数字・日付・固有名詞がないか |
生成AI(OpenAI API)にさせること:
| 処理 | 内容 |
|---|---|
| 今月の学習内容 | 進度の単元名を、保護者が読んで分かる1〜2文にまとめる |
| 所見の組み立て | 良かった点・気になる点を、メモの範囲で2〜4文にする |
| 根拠の提示 | 所見の各文に、根拠にしたメモの日付を付ける |
| 前月の目標への言及 | 前月の目標について、メモから分かることだけを書く。分からなければ分からないと返す |
| 来月の目標の案 | メモの「次回やること」から1つ選び、目標の案にする |
| 講師の気がかりの抜き出し | 継続に関わりそうな記述(部活、体調、やる気など)を、メモの原文のまま返す |
「講師の気がかりの抜き出し」は、判定ではありません。 「退塾の可能性が高い」とは書かせず、メモにある文をそのまま拾わせるだけです。教室長は、規則で拾った数字と、講師が書いた原文を並べて見ます。 解釈は教室長がします。
成績の予測、志望校の合否、他の生徒との比較はさせません。 「このままなら偏差値が上がる」「クラスで上位」といった文は、メモからも記録からも導けません。
指示内容を固定する
あなたは学習塾の講師の補助として、保護者へ送る月次の学習報告の
「所見」の下書きを作ります。
下に与える講師のメモだけを材料にしてください。
【厳守事項】
- 講師のメモに書かれていないことを書かないでください。
メモに「集中が続かない」とあれば書けますが、
「家庭学習の時間が足りないためと思われます」のような原因の推測は書かないでください。
- 褒め言葉を足さないでください。
メモに「計算ミスが減った」とあれば「計算ミスが減ってきました」と書けますが、
「着実に力をつけています」「今後が楽しみです」のようにメモにない評価を加えないでください。
- 所見の各文には、根拠にしたメモの日付を source_dates に入れてください。
根拠のない文は書かないでください。
- 小テストの点、出席や欠席の回数、宿題の提出率などの数字を、文章の中に書かないでください。
数字は別の欄に表示されます。
- 本人以外の生徒、兄弟、学校、講師の名前を書かないでください。
生徒は「本人」と表記し、文章では主語を省いてください。
- 成績の予測、合格の見込み、他の生徒との比較を書かないでください。
- 気になる点は、責める言い方にせず、事実と次にやることの形で書いてください。
例:「宿題の途中で止まっている回がありました。次回は授業の最初に一緒に確認します」
- メモが少なく、所見が1文しか書けない場合は、1文だけにしてください。
文を水増ししないでください。
- 前月の目標について、メモから達成の様子が分からない場合は、
previous_goal_note に null を入れてください。
【継続に関わる記述】
- メモの中に、部活・体調・通塾の負担・やる気・家庭の予定など、
通塾の継続に関わりそうな記述があれば、原文のまま concern_quotes に入れてください。
- それが退塾につながるかどうかを判断しないでください。
【文体】
- 保護者に向けた丁寧語。一文は60字以内。
- 専門用語は保護者が分かる言葉に言い換える。
【生徒の情報】
学年:{grade}
コース:{course}
【今月の進度(単元名、授業日の順)】
{progress}
【講師のメモ(授業日:良かった点/気になる点/次回やること)】
{notes}
【前月の報告に書いた来月の目標】
{previous_goal}
【参考:今月の集計(文章には書かない)】
{metrics}
「数字を文章の中に書かない」の1行が、この構成の要です。 数字を文章に書かせると、AIが写し間違えたときに報告の表と本文で数字が食い違います。表の数字は記録から、本文は言葉だけ、と分けると、点数の誤りは原理的に起きなくなります。 それでも集計を「参考」として渡すのは、「点が大きく下がった月に『順調です』と書く」のを防ぐためです。
「褒め言葉を足さない」も必須です。 指示しないと、言語モデルは報告らしい締めの一文を足します。400通すべてが「今後の成長が楽しみです」で終わると、保護者は定型文だと気づきます。 講師が自分の言葉で最後の1行を足す余地を、AIが埋めてしまわないようにします。
「1文しか書けないなら1文だけ」を入れないと、メモが空に近い生徒ほど一般論で膨らみます。 所見が短い報告は、講師がメモを書いていないことを示す信号です。短いまま講師の画面に出し、講師に書き足させてください。
学年によって、読み手が変わります。 小中学生なら保護者、高校生や社会人の語学受講者なら本人が読みます。設定シートに「読み手」の列を持たせ、プロンプトの【文体】を差し替えます。
【文体(受講者本人が読む場合)】
- 受講者本人に向けた丁寧語。二人称は使わず、主語を省く。
- 気になる点は、次回に一緒に取り組む内容として書く。 出力形式を固定する
{
"type": "object",
"additionalProperties": false,
"required": ["student_ref", "learning_summary", "observations", "previous_goal_note", "next_goal_draft", "concern_quotes", "insufficient_notes"],
"properties": {
"student_ref": { "type": "string" },
"learning_summary": { "type": "string" },
"observations": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["kind", "text", "source_dates"],
"properties": {
"kind": { "type": "string", "enum": ["良かった点", "気になる点", "次にやること"] },
"text": { "type": "string" },
"source_dates": { "type": "array", "items": { "type": "string" } }
}
}
},
"previous_goal_note": { "type": ["string", "null"] },
"next_goal_draft": { "type": ["string", "null"] },
"concern_quotes": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["date", "quote"],
"properties": {
"date": { "type": "string" },
"quote": { "type": "string" }
}
}
},
"insufficient_notes": { "type": "boolean" }
}
}
OpenAI API の Responses API では、text: { format: { type: "json_schema", strict: true, schema: ... } } の形でスキーマを渡します。required に全項目を挙げ、additionalProperties を false にします。 値が無いことがある項目は、previous_goal_note のように型を ["string", "null"] にして null を許します。
安全上の理由で応答が拒否されると、スキーマに沿った出力の代わりに refusal が返ります。 出力の上限で切れた場合は、応答の status が incomplete、理由が max_output_tokens になります。どちらも、その生徒の下書きを空にして「作成できませんでした」と表示し、講師に手で書いてもらいます。 途中まで出た文を下書きに使わないでください。
source_dates が、講師の確認を速くします。 下書きの画面で所見の横に「10/7、10/21のメモ」と出れば、講師は該当の行だけを見て確かめられます。スクリプトは、source_dates の日付がその生徒の当月の授業日に含まれるかを検査します。 含まれない日付があれば、その文に印を付けます。
insufficient_notes は、メモが少なすぎて所見が組めない場合に true になります。 講師ごとにこの数を数えると、メモを書く習慣が定着していない講師が分かります。 ただし、これを講師の評価に使わないでください(第13章)。
システムへ連携する
下書きは、講師ごとのシートに1生徒1行で並べます。
| 列 | 中身 | 書き込み元 |
|---|---|---|
| 生徒名 | 生徒台帳から | スクリプト(表示のときに仮の番号から戻す) |
| 出席/欠席/振替 | 回数 | スクリプト(集計結果) |
| 宿題の提出率 | 割合 | スクリプト(集計結果) |
| 小テスト | 点の一覧と平均 | スクリプト(集計結果) |
| 今月の学習内容 | 1〜2文 | AI |
| 所見 | 2〜4文と根拠の日付 | AI |
| 前月の目標について | 1文、または空欄 | AI |
| 来月の目標の案 | 1文 | AI |
| 講師のひとこと | 空欄 | 講師が書く |
| 検査の印 | 数字の混入、日付の不一致、名前の混入 | スクリプト |
| 状態 | 未確認/確認済み/承認済み/送付済み | 講師・教室長 |
AIの出力を報告の文へ戻すときに、仮の番号を生徒名に戻します。 「本人」と書かれた文はそのまま使えるので、名前を文の中へ差し込む処理は要りません。
出力の検査は3つです。 1つ目は、所見の文に数字が含まれていないか。単元名に含まれる「一次関数」のような語は除き、算用数字を拾います。2つ目は、source_dates が当月の授業日に含まれるか。3つ目は、生徒台帳の氏名や学校名が文に現れていないか。どれかに当たった行は「検査の印」列に理由を書き、講師が必ず直す行として色を付けます。
要フォロー一覧は、教室長だけが見られる別のファイルに書きます。
| 列 | 中身 |
|---|---|
| 生徒名/学年/担当講師 | 台帳から |
| 当たった規則 | 欠席増、欠席の連続、宿題未提出の連続、点の急な低下 |
| 数字 | 「欠席 前月1回→今月3回」「宿題未提出 3回連続」 |
| 講師のメモの原文 | concern_quotes をそのまま |
| 前月も載っていたか | はい/いいえ |
| 教室長の対応 | 人が入れる(講師と相談/保護者へ連絡/様子を見る) |
保護者への報告には、この一覧の内容を1文字も載せません。 報告の下書きシートと要フォロー一覧を別のファイルにするのは、コピーの誤りで「要注意」の文字が保護者へ届く経路をなくすためです。
送付は、既存の保護者連絡アプリで人が行います。 承認済みの行の文面をコピーして送り、状態を「送付済み」にします。送付の自動化は、この構成に含めません。 連絡アプリの側に送信の API があっても、最初の半年は人が送ってください。
人が確認する
400通すべてを講師が読みます。 保護者へ届く文章に、読まれていないものを混ぜないためです。ただし、読み方の深さを分けます。
- 検査の印が付いた行 … 数字の混入、日付の不一致、名前の混入のどれか。必ず直す
- 所見に「気になる点」がある行 … 言い方が保護者を責める調子になっていないか。声に出して読む
insufficient_notesがtrueの行 … 講師が所見を自分で書く- 要フォロー一覧に載っている生徒の行 … 報告の書きぶりを教室長と相談してから送る
- それ以外 … 根拠の日付のメモと見比べ、講師のひとことを足して確認済みにする
教室長の承認は、講師の確認より軽くしてよい部分があります。 数字は記録からの転記なので、照合は要りません。教室長が見るのは、所見の言い方と、要フォローの生徒の扱いです。
確認を速くするための設計が効きます。
- 講師ごとにシートを分ける(自分の担当分だけを開く)
- 検査の印の行を上に固定する
- 所見の横に、根拠の日付のメモを並べて表示する
- 前月の報告の所見を併記する(同じ言い回しの繰り返しに気づく)
- 状態の列を選択式にし、未確認の件数を上に出す
3つ目がもっとも効きます。 所見とメモが隣にあれば、「メモにないことが書かれていないか」は数秒で分かります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 当月に一言所見が1件もない | AIへ送らない。所見欄を空にし、講師が書く |
| 月の途中で入塾した | 入塾日以降の授業だけで集計する。前月比は出さない |
| 月の途中で退塾の連絡があった | 報告の対象から外す。要フォロー一覧にも載せない |
| 休会中 | 報告の対象から外し、休会の連絡文は別に用意する |
| 担当講師が月の途中で代わった | 前任と後任のメモを両方渡す。下書きは後任の講師のシートへ |
| 小テストを実施しなかった月 | 小テストの欄を「実施なし」とし、前月比を出さない |
| 振替授業が翌月にずれた | 振替の回は、実施した月の授業として数える |
| API の呼び出しが失敗した | その生徒だけ下書きを空にし、処理の最後にまとめて再実行する |
| 応答が拒否された、または途中で切れた | 下書きを空にして「作成できませんでした」と表示する |
| 所見に数字や名前が混ざった | 検査の印を付け、講師が直す |
| 同じ所見が3か月続く | 前月の所見を併記しているので講師が気づく。メモの書き方を見直す |
| 要フォローが教室の2割を超える | 閾値が低すぎる。設定シートで見直す |
| 保護者から「内容が違う」と返信が来た | 根拠の日付のメモを確かめ、記録の誤りか下書きの誤りかを切り分ける |
処理時間に注意してください。 1名ずつ API を呼ぶと、400名で時間がかかります。教室ごとに実行を分けるか、途中までの進み具合をスプレッドシートに記録して、次の実行で続きから処理する形にします。 すでに下書きがある生徒は飛ばす作りにすれば、再実行しても二重にはなりません。
記録を残す
- 月ごとの集計結果(生徒ごとの出欠・宿題・小テスト)
- AIへ送った内容(仮名化した後のもの)と、返ってきたJSON
- 検査の印の内容と、講師がどう直したか
- 講師が確認した日時、教室長が承認した日時、送付した日時
- 要フォロー一覧と、教室長の対応
- 使ったプロンプトの版
「AIの下書き」と「送付した文」を両方残してください。 講師が毎月同じ箇所を直しているなら、プロンプトのほうを直すべきです。差分が大きい講師と小さい講師を比べると、メモの書き方の違いが見えてきます。
要フォロー一覧の対応と、その後の結果を残します。 半年たつと、「欠席増で載った生徒のうち、何人が退塾したか」が分かります。規則の閾値が合っているかは、この記録でしか確かめられません。
OpenAI API へ送った内容の保存期間も決めます。 Responses API は既定で応答を30日保存し、store を false にすると保存しない指定になります(第13章)。自社側のログは、仮名化した後の内容だけを残します。
04実装レベルの3段階
半自動化の時点で、12分が5分程度になります。 記録の見返しと転記が消え、講師の作業は下書きを読んで直すことだけになります。本格構成では4分になりますが、減るのは前月の報告を探す手間と、同じ直しの繰り返しです。 要フォロー一覧は、半自動化の段階から入れてください。 時間の削減とは別の効果で、教室長が欠席増に気づく時期が月末から月初へ移ります。 本格構成の「差分の分析」には、時間削減とは別の価値があります。 講師がAIの下書きをどう直したかを集めると、教室として保護者に伝えたい言い方が見えてきます。 それをプロンプトの例に戻すと、新人講師の報告も教室の水準に近づきます。
05工数削減シミュレーション
導入後 400件 × 4分 ÷ 60 = 26.7 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 学習塾・語学教室・プログラミング教室などで、生徒が200名以上おり、保護者または受講者へ毎月の学習報告を送っている事業者。講師が授業ごとに進度・宿題・小テストの点・一言の所見を表計算やフォームに残しているが、月末の報告づくりは講師が記録を見返しながら手で書いている場合。報告の書きぶりが講師によってばらつき、欠席や宿題の未提出が続く生徒に教室長が気づくのが遅れている場合。
- 授業記録が紙の日誌や講師の頭の中にしかなく、生徒ごとの記録が項目として残っていない場合。生徒が数十名で、講師が一人ひとりの報告を手で書いても負担にならない場合。塾向けの管理システムに報告文の作成機能があり、すでに運用に乗っている場合。保護者との取り決めや自社の方針で、生徒の学習記録を外部のAIサービスへ送れない場合。
07最小構成で試す方法
- 1つの教室の生徒を20名選ぶ(メモが多い講師の担当10名、少ない講師の担当10名)
- その20名の前月分の授業記録を、氏名を外してコピーする
- 出欠・宿題・小テストは表計算で数えておく
- ChatGPT の画面に、上記のプロンプトと1名分のメモを貼る
- 返ってきた所見を、実際に前月送った報告と並べる
- 担当講師が「このまま送れるか」「どこを直すか」を1名ずつ記録する
見るのは次の3点です。
| 見る点 | 判断 |
|---|---|
| メモにないことが書かれた文の数 | 1通に1文でもあれば、プロンプトの「書かない」を強める |
| 講師が直した文の割合 | 半分を超えるなら、メモの書き方のほうを先に整える |
| メモが少ない生徒の所見 | 1文で止まっているか、一般論で膨らんでいないか |
1つ目を必ず数えてください。 「着実に」「今後が楽しみ」のような語が出たら、それはメモにない評価です。20名で3通以上に出るなら、そのまま400名に広げると保護者に定型文だと気づかれます。
あわせて、兆しの規則を過去の退塾者で試してください。 直近1年に退塾した生徒について、退塾の2か月前と1か月前の記録に規則を当てます。規則に当たった生徒が半分に満たないなら、欠席と宿題以外の兆し(振替の増加、小テストの未受験)を規則に足します。
ワークフローを作らずに、ここまでは試せます。所要は2〜3日です。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| メモにない褒め言葉が足される | プロンプトで禁止し、最小構成で出現数を数える |
| 所見の文に点数が書かれ、表とずれる | 数字を文章に書かせない。検査で算用数字を拾う |
| メモが少ない生徒の所見が一般論で膨らむ | 1文なら1文と指示する。insufficient_notes で講師に回す |
| 講師のメモに生徒の名前が書かれている | 台帳で照合して置き換える。講師に書かないルールを伝える |
| 月末の授業の記録が入る前にトリガーが動く | 当日入力を決めるか、トリガーを3日にずらす |
| 400名の処理が途中で止まる | 教室ごとに分けるか、進み具合を記録して続きから処理する |
| 要フォローの文言が報告に紛れ込む | 別のファイルに分け、報告シートに書き込まない |
| 要フォローが多すぎて教室長が見なくなる | 閾値を設定シートで調整し、教室の1割前後に収める |
| 報告の読み手が学年で違う | 設定シートの「読み手」でプロンプトの文体を差し替える |
| トリガーの失敗に誰も気づかない | 通知メールの転送先を決めておく |
| 下書きを読まずに送る講師が出る | 状態の列が「確認済み」でないと承認できない運用にする |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 未成年を含む生徒の学習記録(出欠、宿題、小テストの点、講師の所見)。本人と家庭の様子が読み取れる情報です。 外部のAIサービスへ送る以上、次の点を運用の前に決めてください。
- 送る項目を最小限にする … AIへ送るのは、学年、コース、進度の単元名、一言所見、前月の目標だけです。氏名、生年月日、学校名、住所、保護者の連絡先、写真は送りません。 出欠と点数は「参考」として送りますが、報告の数字は自社の集計から書き込むため、送らない設計にもできます。送らないほうが安全なら、そちらを選んでください
- 仮名化する … 生徒番号をその回だけの連番に置き換え、対応表はスプレッドシートの中にだけ残します。メモの中の名前は、台帳との照合で「本人」「兄弟」に置き換えます。 照合で拾えない呼び名があるため、講師への「所見に人の名前を書かない」の徹底と組み合わせます
- 所見の欄に書かないことを決める … 健康の状態、家庭の事情、友人関係のトラブルは、所見の欄に書かないルールにします。必要な場合は、AIへ送らない別の欄(教室長だけが見る欄)に書きます。 所見の欄に書かれたことは、そのまま外部へ送られると考えてください
- OpenAI API のデータの扱いを確かめる … API へ送ったデータは、明示的に共有を選ばない限りモデルの学習に使われないとされています。不正利用の監視のためのログは、既定で30日保持されます。Responses API は既定で応答を30日保存し、
storeをfalseにすると保存しない指定になります。 この構成では会話を続ける必要がないため、storeをfalseで呼んでください。監視ログからも内容を除く Zero Data Retention という管理の仕組みもあります。自社の要件に照らして検討してください
- API キーの置き場所 … キーはスクリプトのコードに直接書かず、Apps Script のスクリプトプロパティに置きます。スクリプトプロパティは、そのスクリプトのすべての利用者に共有されます。 スクリプトの編集権限を持つ人を、作った人と教室長1名に限ってください
- 保護者への説明 … 学習記録の一部を、報告の下書きを作るために外部のAIサービスへ送ることを、入塾時の個人情報の取り扱いの説明に含めてください。すでに在籍している生徒の保護者には、始める前に知らせます。 法令上の扱い(委託に当たるか、外国の事業者への提供に当たるか)は、自社の個人情報の担当者や専門家に確認してください
- 閲覧の範囲 … 下書きのシートは担当講師と教室長、要フォロー一覧は教室長だけが見られるようにします。アルバイトの講師に、他の講師の担当生徒の記録を見せない権限にします
- 講師の評価に使わない …
insufficient_notesの数や、下書きを直した量は、講師の担当生徒の状況にも左右されます。これを人事評価の材料にすると、講師は中身のないメモを書いて数を埋めるようになります
- 自動実行してよい範囲 … 集計、仮名化、下書きの作成、検査、要フォローの抽出までです。保護者への送付、退塾の兆しへの対応、成績についての判断は人が行います
誤りが起きた場合のリスクは、事実と違う報告が保護者へ届くこと、生徒の記録が意図しない相手に見えること、所見の欄に書かれた家庭の事情が外部へ送られることです。3つ目は取り返しがつかないため、所見の欄に書かないことのルールを、スクリプトを作る前に講師全員へ伝えてください。
10まず何から始めるか
1週目:授業記録の形と、一言所見の中身を確かめる
授業記録が「1授業×1生徒」の行になっているか、一言所見の欄に何が書かれているかを、1教室分見てください。所見が空の授業が半分を超えるなら、この構成より先に、所見の書き方のルールづくりが要ります。 「良かった点/気になる点/次回やること」の3つで書くよう、講師に伝えます。
2週目:20名で下書きを試す
氏名を外した前月分の記録で、ChatGPT の画面に1名ずつ貼って所見を作らせます。メモにないことが書かれた文を数えてください。 講師に「このまま送れるか」を聞き、直した箇所をプロンプトに戻します。
3週目:兆しの規則を過去の退塾者で確かめる
直近1年の退塾者について、退塾前2か月の記録に規則を当てます。当たった割合を見て、閾値と規則の種類を決めます。 保護者への説明文と、所見の欄に書かないことのルールもこの週に決めます。
4週目以降: Apps Script で月次の半自動化を作り、1教室で2か月運用します。最初の月は、下書きと実際に送った文の差分を必ず残してください。 差分の大きい箇所が、プロンプトで直すべき箇所です。
3か月目以降: 残りの教室へ広げ、要フォロー一覧の対応の記録をためます。半年たったら、要フォローに載った生徒と実際の退塾を照合します。 規則が合っていれば、報告づくりの仕組みが、そのまま継続を支える仕組みになります。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Responses API で text: { format: { type: "json_schema", strict: true, schema: ... } } の形でスキーマを渡すこと。required と additionalProperties: false で形を固定すること。省略可能な項目は型に null を加えて表すこと。拒否されると refusal が返り、スキーマに沿わないこと。出力の上限で切れると status が incomplete、理由が max_output_tokens になること | OpenAI API: Structured Outputs | 2026-09-24 |
API へ送ったデータは、明示的に共有を選ばない限りモデルの学習に使われないこと。不正利用の監視のログは既定で30日保持されること。Zero Data Retention では監視ログから顧客の内容が除かれ、store が常に false として扱われること | OpenAI API: Data controls in the OpenAI platform | 2026-09-24 |
Responses API の応答は既定で30日保存され、store を false にすると保存しない指定になること | OpenAI API: Conversation state | 2026-09-24 |
UrlFetchApp.fetch(url, params) の params に method、contentType(application/json を指定できる)、headers、payload を渡せること。muteHttpExceptions を true にすると失敗の応答でも例外を投げずに応答を返すこと。複数の要求をまとめて送る fetchAll があること | Google: Class UrlFetchApp | 2026-09-24 |
| 時間主導型トリガーが1分ごとから月1回までの頻度で設定できること。開始時刻は1時間の幅の中で選ばれ、9時に設定すると9時から10時のあいだになること。トリガーが失敗しても画面にエラーは出ず、通知メールで知らされること | Google: Installable triggers | 2026-09-24 |
| スクリプトプロパティがそのスクリプトのすべての利用者に共有され、アプリ全体の設定値を置く場所であること。値は文字列として保存されること | Google: Properties Service | 2026-09-24 |
授業記録の項目、保護者連絡アプリの仕様、塾向けの管理システムの機能は、事業者によって異なります。この部分は利用環境に応じた個別確認が必要です。 生徒の学習記録を外部のAIサービスへ送ることの法令上の扱いと、保護者への説明の要否は、自社の個人情報の担当者と専門家に確認してください。API の料金とモデルごとの処理時間は、OpenAI の最新の案内を確認してください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0206)についてのご相談はこちらから。
