生け花の教室が稽古の日程と花材の案内をスプレッドシートと Apps Script で作って成人の生徒に送り、出欠の返事から花屋への花材の発注数を出す
生け花の教室で、先生がスプレッドシートに入れた花材の予定から、クラスごとの稽古の案内を Gemini API で作り、Apps Script で成人の生徒に送ります。返ってきた出欠を数えて、花屋に頼む花材の数を締切の前に出します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Zapier
- 対象業界
- その他/教育
- 対象部門
- 総務
- 対象業務
- 書類作成/集計・分析
- 主な課題
- 人手が足りない/書類作成に時間がかかる/期限・対応漏れが起きる
- AIで行う処理
- 生成
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 先生が月の初めに花屋と相談し、稽古日ごとの花材の予定を紙に書いて助手に渡す
- 助手が稽古の1週間ほど前に、そのクラスの生徒ごとに Gmail で案内を書く。入門の生徒には貸出の花器のことを書き足す
- 生徒からの返信・電話・口頭の返事を、出欠のシートに書き込む
- 発注の締切の前日に、出欠のシートを数え、返事の無い生徒に電話かメールで確かめる
- 出席の数に予備を足して、先生が花屋に電話で発注する
- 花屋の入荷の都合で花材が変わったら、そのクラスの生徒に連絡し直す
- 人先生が月の初めに、花材の予定のシートに稽古日ごとの花材・本数・花材費・花器の大きさを入れる
- 自動毎朝、Apps Script が動き、8日後に稽古があるクラスを拾う
- 自動そのクラスの花材の予定と生徒の区分を Gemini API に渡し、区分ごとの案内の文面を記号入りで受け取る
- 自動記号を値に置き換えて検査し、確認のシートに下書きとして並べる
- 人先生か助手が確認のシートで文面を読み、「送ってよい」に印を付ける
- 自動印の付いたクラスの生徒に、出欠のフォームのリンクを付けて Gmail で送る
- 自動フォームの返事が出欠のシートに入るたびに、出席の数を数え直す
- 自動発注の締切の前日の朝、返事の無い生徒の一覧と、出席の数に予備を足した発注の数を先生に知らせる
- 人先生が返事の無い生徒に確かめ、発注の数を決めて花屋に頼む
各工程の詳しい説明を読む
- 先生が月の初めに花屋と相談し、稽古日ごとの花材の予定を紙に書いて助手に渡す
- 助手が稽古の1週間ほど前に、そのクラスの生徒ごとに Gmail で案内を書く。入門の生徒には貸出の花器のことを書き足す
- 生徒からの返信・電話・口頭の返事を、出欠のシートに書き込む
- 発注の締切の前日に、出欠のシートを数え、返事の無い生徒に電話かメールで確かめる
- 出席の数に予備を足して、先生が花屋に電話で発注する
- 花屋の入荷の都合で花材が変わったら、そのクラスの生徒に連絡し直す
(a)案内を書く日がずれる。 8クラスが月2回ずつで、稽古の1週間前の案内が、多い週には4クラス分重なります。 助手が忙しい週は案内が遅れ、返事の締切までの日が短くなります。
(b)返事を数え違える。 メールの返信、電話のメモ、稽古の場で聞いた返事が別々の場所にあり、出欠のシートに書き写し忘れた返事があると、発注の数がずれます。
(c)返事の無い生徒の確認が締切の直前になる。 締切の前日に数えて初めて返事の無い生徒に気づき、電話がつながらないまま発注することがあります。
(d)花材の差し替えを伝え忘れる。 入荷の都合で花材が変わっても、最初の案内を見た生徒は元の花材のつもりで来ます。 持ち物(花器の大きさ)が変わる差し替えだと、稽古の場で困ります。
(e)季節の一言が書けない。 先生は案内に季節の一言を添えたいと思っていますが、助手が書く案内は日時と花材の事務連絡になりがちです。 先生が書き足せるのは余裕のある週だけで、クラスによって案内の温度が違ってしまいます。
- 【人】 先生が月の初めに、花材の予定のシートに稽古日ごとの花材・本数・花材費・花器の大きさを入れる
- 【自動】 毎朝、Apps Script が動き、8日後に稽古があるクラスを拾う
- 【自動】 そのクラスの花材の予定と生徒の区分を Gemini API に渡し、区分ごとの案内の文面を記号入りで受け取る
- 【自動】 記号を値に置き換えて検査し、確認のシートに下書きとして並べる
- 【人】 先生か助手が確認のシートで文面を読み、「送ってよい」に印を付ける
- 【自動】 印の付いたクラスの生徒に、出欠のフォームのリンクを付けて Gmail で送る
- 【自動】 フォームの返事が出欠のシートに入るたびに、出席の数を数え直す
- 【自動】 発注の締切の前日の朝、返事の無い生徒の一覧と、出席の数に予備を足した発注の数を先生に知らせる
- 【人】 先生が返事の無い生徒に確かめ、発注の数を決めて花屋に頼む
5番目で見るのは、生徒ごとの案内ではなくクラスごとの文面です。 同じクラスの同じ区分の生徒には同じ文面が届くので、1クラスで見る文面は多くても3つです。 160通を1通ずつ読む必要はありません。
9番目の発注は人がします。 Apps Script が出すのは数の案までで、予備をいくつにするか、花屋に何を頼むかは先生が決めます。
02今回想定するシステム構成
生徒の台帳 + クラスと稽古日 + 花材の予定 + 出欠(Google スプレッドシート) │ ▼【トリガー】毎朝(時間主導型のトリガー) Google Apps Script ├──▶ 8日後に稽古のあるクラスを拾う ├──▶ 花材の予定と生徒の区分をまとめる(氏名は入れない) ▼ Gemini API(Interactions API、構造化出力、store=false) │ 区分ごとの案内の文面を記号入りで返す ▼ Google Apps Script ── 記号を値に置き換えて検査し、確認のシートへ ▼ 【人】文面を読み、「送ってよい」に印を付ける ▼ Google Apps Script ── Gmail で生徒ごとに送る(出欠のフォームのリンク付き) ▼ Google フォーム ── 出欠の返事(フォームの送信で数え直す) ▼ Google Apps Script ── 締切の前日に、返事の無い生徒と発注の数を先生へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Make、Zapier |
| 生成AI | Gemini API(Interactions API、構造化出力) | Claude API、OpenAI API |
| 保管 | Google スプレッドシート(生徒の台帳、クラスと稽古日、花材の予定、出欠、確認のシート、処理ログ) | - |
| メール | Gmail(先生のアカウントから送る) | - |
| 受付 | Google フォーム(出欠の返事) | - |
新しく足すのは、Apps Script と、出欠のフォームと、確認のシート・処理ログの2つのシートです。 生徒の台帳と稽古の予定はこれまでのものを使い、花材の予定のシートには「花器の大きさ」と「差し替え」の2列を足します。
生成AIを Gemini API にしているのは、この教室の生徒が全員成人だからです。 Gemini API の追加の利用規約は、API を使うには18歳以上であることを求め、18歳未満を対象とする、または18歳未満が利用しうるサービスに使わないこととしています。子どもの教室や親子の稽古を始めるなら、その時点で生成AIを替えてください。 Google の他の製品と同じアカウントで管理でき、Apps Script から呼びやすいことも選んだ理由です。
有料の枠で使います。 規約では、無料の枠では送った内容と応答が Google の製品の改善に使われ、人が読むこともあるとされ、機密や個人の情報を無料の枠に送らないよう求めています。 有料の枠では、プロンプトと応答を製品の改善に使わないとされています。
03どうやって実装するのか
処理の起点を決める
時間主導型のトリガーを毎朝1回動かします。 ClockTriggerBuilder の everyDays(1) と atHour(7) で毎朝7時台を指定します。nearMinute() を呼ばないと分はランダムに決まり、呼んでも前後15分の幅があります。 公式の説明では、毎日9時のトリガーは9時から10時の間のどこかで動き、その時刻が日ごとに保たれるとされています。朝の何時ちょうどに送る前提にはしません。
毎朝の処理では、稽古日から逆算して3つのことを決めます。
| 稽古日からの日数 | すること |
|---|---|
| 8日前 | そのクラスの案内の文面を作り、確認のシートに並べる |
| 確認の印が付いた次の朝 | 生徒に送る |
| 5日前(発注の締切の前日) | 返事の無い生徒の一覧と発注の数を先生に知らせる |
出欠の返事は、フォームの送信のトリガーで受けます。 インストール型のトリガーには、フォームの送信で動くものがあり、フォームそのものに付けるものと、フォームの返事が入るスプレッドシートに付けるものの2つがあります。 この構成では、返事が入るスプレッドシートの側に付け、返事が入るたびに出席の数を数え直します。
トリガーは先生のアカウントで作ります。 インストール型のトリガーは作った人のアカウントで動くので、生徒に届くメールの差出人が先生になります。 失敗すると「Summary of failures for Apps Script」という件名のメールが作った人に届きます。先生がこのメールを読み慣れていない前提で、処理ログのシートに「どのクラスで止まったか」を日本語で書きます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 生徒の台帳 | 生徒番号、クラス、区分(入門・本科・師範科)、メールアドレス、連絡の方法(メール/電話)、休会中か | スプレッドシート |
| クラスと稽古日 | クラスごとの稽古日、時間帯、休講 | スプレッドシート |
| 花材の予定 | 稽古日ごとの花材の名前と本数、花材費、花器の大きさ、花材の扱いの先生のメモ、差し替えの印 | スプレッドシート(先生が入れる) |
| 出欠 | 稽古日ごとの生徒の返事(出席・欠席)、返事の日時、経路(フォーム・電話・口頭) | スプレッドシート(フォームの返事と手入力) |
質を決めるのは、花材の予定の「先生のメモ」の欄です。 「枝ものは水揚げのため前日に切り戻し済み」「葉の多い花材なので大きめの花ばさみを」のような一言があれば、AIはその一言を生徒向けの言い回しに整えるだけで済みます。 メモが空なら、AIは花材の説明を書きません。先生の知っていることを書く場所を作るのが、この構成の準備のほとんどです。
生徒の氏名はAIに渡しません。 渡すのはクラスの名前と区分の名前だけで、宛名は送るときに Apps Script が差し込みます。
データの取得方法を決める
すべて同じスプレッドシートの中にあるので、Apps Script のスプレッドシートのサービスで読むだけです。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 8日後の稽古 | クラスと稽古日のシート | 案内を作るクラスを決める |
| 花材の行 | 花材の予定のシート(その稽古日) | 花材の名前・本数・花材費・花器の大きさ・メモ |
| そのクラスの生徒 | 生徒の台帳(休会中を除く) | 区分ごとの人数と、送り先 |
| 返事の行 | 出欠のシート(その稽古日) | 出席の数と、返事の無い生徒 |
電話や口頭の返事も出欠のシートに入れます。 助手が「経路」を「電話」にして1行足せば、フォームの返事と同じように数えます。返事の置き場を1つにすることが、第3章の(b)をなくす一番の方法です。
同じ生徒が2回返事をしたら、後の返事を使います。 「出席」と返したあとに「欠席」と返し直すことは珍しくありません。
発注の数は、次の決まりで出します。 どれもシートの設定の欄に置き、先生が変えられるようにします。
| 数 | 決め方 |
|---|---|
| 出席の数 | 返事が「出席」の生徒の数 |
| 未返事の数 | そのクラスの休会中でない生徒のうち、返事の無い数 |
| 発注の数の案 | 出席の数+未返事の数+予備(設定の欄。初めは1) |
未返事の生徒を出席の側に数えるのは、足りないより余るほうが稽古の場で困らないからです。 未返事のまま締切を過ぎた生徒の分をどうするかは、先生が知らせを見て決めます。
AIへ渡す前に整形する
- 花材の予定の確認 … その稽古日の花材の行があるか、花材費と花器の大きさが入っているかを見ます。欠けていれば文面を作らず、処理ログと先生へのメールで知らせます
- 区分ごとにまとめる … そのクラスの生徒を入門・本科・師範科に分け、いない区分は外します
- 記号を決める … 稽古日、時間帯、花材の一覧、花材費、花器の大きさ、返事の締切を
{{稽古日}}{{花材}}{{花材費}}などの記号にします - 返事の締切を計算する … 稽古日の5日前の日付にします。発注の締切(4日前)の前日に返事がそろうようにするためです
- 差し替えの確認 … 差し替えの印がある稽古は、元の花材と新しい花材を両方まとめ、差し替えの知らせとして別に扱います
4番目の締切を、発注の締切より1日前にしているのが要です。 返事の締切と発注の締切が同じ日だと、返事の無い生徒に確かめる時間が残りません。
AIに処理させる
させるのは、クラスと区分ごとの案内の文面を、記号入りで組み立てることだけです。
| 渡すもの | 中身の例 | 文面での扱い |
|---|---|---|
| 月と稽古日の記号 | 11月、{{稽古日}} {{時間帯}} | 季節の一文を11月に合わせる。日時は記号のまま |
| 花材の記号と先生のメモ | {{花材}}、「枝ものは前日に切り戻し済み」 | 花材の名前は記号のまま。メモを生徒向けの一文に整える |
| 区分 | beginner / regular / master | 入門なら貸出の花器と剣山を案内する |
| 花器の大きさ | {{花器}} | 本科から上には持ってくる花器の大きさを記号で書く |
| 返事の締切 | {{返事の締切}} | 締切までにフォームで返事をお願いする一文 |
| 差し替え | 元の花材と新しい花材の記号 | 差し替えの知らせのときだけ、お詫びと変更点を書く |
季節の一文をAIに任せるのは、先生がいちばん書きたいのに時間が取れない部分だからです。 月と先生のメモを渡し、花材そのものについては、メモに書かれたことだけを使わせます。
| させないこと | 理由 |
|---|---|
| 花材の名前・本数・花材費・日時を書く | 記号で差し込む。AIが写すと写し間違いの確かめが要る |
| メモに無い花材の産地・花言葉・由来を書く | 入荷の花材と合っているか確かめられない |
| 流派の作法や生け方の指導を書く | 稽古の場で先生が教えること |
| 欠席の扱い(振替・花材費の返金)を書く | 教室の決まりで、先生が決める |
| 返事をしない生徒を急かす強い書き方 | 成人の生徒への案内として失礼になる |
2行目がいちばん起きやすい失敗です。 「この時期の◯◯は△△産が美しく」のような一文を足したがります。入荷したのが別の産地なら、稽古の場で生徒に聞かれて先生が困ります。
指示内容を固定する
あなたは生け花の教室の助手として、成人の生徒に送る稽古の案内の文面を作ります。
渡された情報だけで書いてください。渡されていないことを足さないでください。
【書く順番】
1. 季節の一文({month}に合った一文。花材に触れる場合は【先生のメモ】の内容だけを使う)
2. 稽古の日時のご案内({{稽古日}} {{時間帯}})
3. 花材のご案内({{花材}} と {{花材費}}。メモがあれば生徒向けの一文に整えて添える)
4. 持ち物のご案内(区分で変える)
5. 出欠のご返事のお願い({{返事の締切}} までに、{{フォーム}} からお願いする)
6. 結びの挨拶
【区分ごとの持ち物】
- beginner:花器と剣山は教室でお貸しすること。花ばさみとタオルを持参すること
- regular / master:{{花器}} の花器と剣山、花ばさみを持参すること
【厳守事項】
- 日付・時刻・花材の名前・本数・金額は、必ず渡された記号のまま書いてください。
具体的な花の名前や数字を自分で書かないでください。
- 花材の産地、花言葉、由来、生け方の手ほどきを書かないでください。
- 欠席したときの扱い(振替・返金)について書かないでください。
- 返事のお願いは一度だけ、やわらかく書いてください。「必ず」「至急」は使わないでください。
- 生徒の名前は書かないでください。宛名はこちらで入れます。
- notice_type が substitution のときは、最初に花材の変更をお詫びとともに知らせ、
{{元の花材}} から {{新しい花材}} への変更と、持ち物の変更の有無だけを書いてください。
- 本文は350字以内にしてください。
【情報】
class: {class_label}
month: {month}
grade: {grade}
notice_type: {notice_type}
teacher_memo: {teacher_memo}
「具体的な花の名前を自分で書かない」は、季節の一文にも効かせます。 11月と渡すと、AIは「紅葉の美しい季節」と書きたがり、そこに花の名前を足すことがあります。後段の検査で、花材の予定に無い花の名前が本文にあれば印を付けます。
出力形式を固定する
次の形のJSONで受け取ります。 Gemini API の Interactions の呼び出しで、response_format に type: "text"、mime_type: "application/json" と schema を渡します。
{
"class_ref": "C-TUE-AM",
"grade": "beginner",
"notice_type": "regular",
"subject": "{{稽古日}}のお稽古のご案内",
"seasonal_line": "",
"body": "",
"used_placeholders": ["{{稽古日}}", "{{時間帯}}", "{{花材}}", "{{花材費}}", "{{返事の締切}}", "{{フォーム}}"]
}
1つ目の理由は、季節の一文を分けて持てることです。 先生が自分で書きたい月は、seasonal_line だけを差し替えます。
2つ目は、used_placeholders で書き漏れが分かることです。 渡した記号のうち {{返事の締切}} や {{フォーム}} が使われていなければ、返事のお願いが抜けた文面です。発注の数が決まらなくなるので赤の印を付けます。
3つ目は、notice_type で差し替えの知らせを見分けられることです。 差し替えは確認のシートの上の方に並べ、先生が先に読みます。
文面の長さは Apps Script で測ります。 公式の説明では、minLength・maxLength はエラーにならずにサーバーで無視されるとされています。スキーマに書いても350字は守られない前提で、検査で長さを見ます。 enum は使えるので、grade と notice_type は決まった値に絞ります。
リクエストには store=false を付けます。 Interactions API は既定ですべてのやり取りを保存し(store=true)、有料の枠では55日、無料の枠では1日保持するとされています。会話を続ける使い方ではないので、保存しない設定にします。
| 検査 | 引っかかったときの扱い |
|---|---|
| 置き換えた後の本文に、花材の予定に無い花の名前や数字がある | 赤。AIが書き足した疑い |
{{返事の締切}} か {{フォーム}} が使われていない | 赤。返事のお願いが抜けている |
| 渡していない記号がある | 置き換えずに赤 |
| 「至急」「必ず」を含む | 黄 |
| 本文が350字を超える | 黄 |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Google スプレッドシート | Apps Script のスプレッドシートのサービス | 台帳・稽古日・花材・出欠を読み、確認のシートと処理ログに書く |
| Gemini API | Apps Script の UrlFetchApp で Interactions API を呼ぶ | クラスと区分ごとの文面を JSON で返す |
| Gmail | GmailApp | 生徒ごとに宛名を差し込んで送る。発注の数の知らせを先生に送る |
| Google フォーム | フォームの送信のトリガー(スプレッドシートの側) | 出欠の返事を受けて数え直す |
Gmail の1日の送信先の数に気を付けます。 公式の上限は、メールの受信者の数が個人の Google アカウントで1日100、Google Workspace で1日1,500です。1クラスは10名ほどなので1日に数クラスを送っても100に収まりますが、全員への休講の連絡のように80名に一度に送る日は、個人のアカウントだと上限に近づきます。 送り先の数を処理ログで数え、90を超えたら続きを翌朝に回します。
送るのは「送ってよい」の印が付いたクラスだけです。 印の無いクラスは、翌朝の処理でもう一度先生に知らせます。稽古の6日前になっても印が無ければ、先生の携帯に届くアドレスにも知らせます。
API のキーはスクリプトのプロパティに置きます。 スクリプトを共有しても一緒に渡らないようにするためです。
人が確認する
先生か助手が、確認のシートで次の順に見ます。
- 差し替えの知らせを先に読む … 変更点と持ち物の変更が正しいかを見ます。花器の大きさが変わる差し替えは、特に念入りに見ます
- 赤の印の文面を直す … 花材の予定に無い花の名前、返事のお願いの抜けを直します
- 残りの文面を流し読みして印を付ける … 1クラス3つまでの文面を読みます
- 締切の前日の知らせを見て、返事の無い生徒に確かめる … 電話の生徒は助手が電話します
- 発注の数を決めて花屋に頼む … 予備の数は先生が決めます
差し替えの知らせは、送った後にも出欠を取り直しません。 花材が変わっても出欠は変わらないことがほとんどだからです。ただし、差し替えの後に欠席の返事が続いたクラスは、先生への知らせに一言添えます。
目標は、160件をならして1件0.75分です。 文面の確認はクラスごとなので生徒1人あたりは数秒で、時間を使うのは返事の無い生徒への確認と、差し替えの知らせです。
例外に対処する
| 起きること | 対応 |
|---|---|
| 花材の予定の行が無い・花材費が空 | 文面を作らず、先生に「花材の予定が未入力」と知らせる |
| 花屋の入荷で花材が変わった | 差し替えの印を付けると、差し替えの知らせを作り直す |
| 休講になった | クラスと稽古日のシートで休講にすると、休講の知らせを定型で作る |
| 返事が締切までに無い | 締切の前日の知らせに並べる。欠席とみなさず、先生が確かめる |
| 同じ生徒が返事を変えた | 後の返事を使い、変わったことを処理ログに書く |
| 連絡の方法が電話の生徒 | メールを送らず、助手の電話の一覧に並べる |
| Gemini API がエラーを返す | そのクラスを飛ばし、翌朝もう一度試す。6日前を過ぎたら定型の文面にする |
| 1日の送信先が90を超える | 続きを翌朝に回す |
| フォームのリンクを開けない生徒がいる | 連絡の方法を電話に変え、助手が電話で返事を聞いて出欠のシートに入れる |
| 稽古の前日に急な欠席の連絡が来た | 出欠のシートに入れる。発注は済んでいるので、花材費の扱いは先生が決める |
| 18歳未満の生徒が入会した | この構成では受けない。 生成AIを替えるまでその生徒の分は手で書く |
上から4行目までが大半です。 下の方の行は年に数回ですが、起きたときに慌てないよう手順を決めておきます。どれもAIの問題ではなく、花材の予定と出欠の付け方の問題です。確認のシートに出たものを直すたびに、翌月の例外は減ります。
記録を残す
- 実行の日時、対象のクラスと稽古日、作った文面の数、送った生徒の数
- Gemini API に渡した情報(氏名なし)と、返ってきた JSON
- 検査の結果(赤・黄の理由)と、先生が文面を直したかどうか
- 出欠の返事の経路と日時、返事を変えた記録
- 締切の前日に出した発注の数の案と、先生が実際に花屋に頼んだ数
最後の行は、予備の数を見直す材料になります。 案と実際の差が毎回同じなら、予備の決め方を変えます。当日の欠席の多いクラスが分かれば、そのクラスだけ予備を減らせます。
04実装レベルの3段階
この記事の想定は半自動化です。 本格構成で花屋への発注まで自動にできますが、花屋との電話のやり取りで入荷の相談をしている教室では、発注を文面にすると相談の機会が減ります。 無理に進めなくてかまいません。 半自動化で1件3分が0.75分になります。 案内を書く時間と返事を書き写す時間が無くなり、残るのはクラスごとの確認と返事の無い生徒への連絡です。 段階を飛ばさないでください。 半自動化で2か月ほど回すと、どのクラスで返事が遅れやすいか、予備がいくつあれば足りるかが処理ログから分かります。それが分かってから発注の文面を作るほうが、花屋とのやり取りが崩れません。
05工数削減シミュレーション
導入後 160件 × 0.8分 ÷ 60 = 2 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 生け花・フラワーアレンジメントなど、稽古ごとに花屋から花材を仕入れ、生徒の出欠で花材の数が決まる教室。生徒が成人だけで数十〜百名ほど、曜日ごとのクラスに分かれて月に2回ほど稽古があり、生徒の台帳と稽古の予定を Google スプレッドシートで持っている場合。稽古の前に一人ずつ花材と持ち物を連絡し、出欠の返事を数えて花屋に電話している場合。
- 子どもの教室や親子の稽古があり、18歳未満の生徒が通う教室(この構成の生成AIは規約で使えません。別の製品を選んでください)。生徒が十数名で、稽古の場で次の花材を伝えれば足りる場合。花材を教室で作り置きせず、生徒が各自で用意する決まりの場合。なお、花材の差し替えや花材費の決め方は先生の判断で、この構成の対象外です。
07最小構成で試す方法
- 来月の稽古から2クラスを選ぶ(入門の生徒がいるクラスと、本科・師範科だけのクラス)
- その2クラスの花材の予定と先生のメモを、表に書き出す。日時・花材・花材費は記号にする
- 手元の Gemini の画面に、第7章の指示の例と、1クラス・1区分の情報を貼る
- 出てきた文面の記号を手で置き換え、これまで助手が書いていた案内と見比べる
- 花の名前や数字を自分で書いていないか、入門の生徒に貸出の案内が入っているかを見る
2クラスで十分です。 ここで確かめたいのは、「先生のメモを渡せば、教室らしい案内になるか」です。
| 出てきた内容 | 判断 |
|---|---|
| これまでの案内と同じくらい教室らしい | Apps Script で稽古日の逆算と送信を組む段階に進む |
| 花の名前や産地を書き足した | 指示に禁止の例を足すと直る。検査で拾う前提で進めてよい |
| 季節の一文が教室の雰囲気に合わない | 先生がよく書く一文を3つほど例として指示に足す |
先生のメモを書き出す作業そのものが、この段階の値打ちです。 書いてみると、花材ごとに生徒に伝えたいことが先生の頭の中にどれだけあるかが分かります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AIが花の名前や産地を書き足す | 指示で禁じ、花材の予定に無い花の名前を検査で拾う |
| 返事のお願いが文面から抜ける | used_placeholders で {{返事の締切}} と {{フォーム}} を確かめる |
| 電話や口頭の返事が数に入らない | 出欠のシートに経路付きで1行足す。置き場を1つにする |
| 返事の締切と発注の締切が同じ日 | 返事の締切を1日前にする |
| 文面の350字がスキーマで守られない | maxLength は無視される。Apps Script で測る |
| やり取りが55日保存される | store=false を付ける |
| 全員への連絡で送信の上限に当たる | 送り先の数を数え、続きを翌朝に回す |
| トリガーの時刻がずれる | 分はランダム。時刻ちょうどの前提にしない |
| 助手のアカウントでトリガーを作った | 差出人が助手になる。送る人のアカウントで作る |
| 子どもの生徒が入会した | 規約で Gemini API は使えない。生成AIを替えるまで手で書く |
上の2行が、この構成の失敗のほとんどです。 どちらも文面の中身の問題で、検査で拾える形にしておけば、先生が全文を読まなくても見つかります。
3行目と4行目は、発注の数に直に響きます。 電話の返事を出欠のシートに入れ忘れると、その生徒は未返事に数えられ、締切の前日の知らせに残ります。助手が電話を受けたらその場で1行足すことを、教室の手順にします。
下の方の行は、最初の1か月で一度は踏みます。 処理ログを見れば分かるようにしておけば、先生が技術の言葉を読まずに済みます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 生徒の氏名・メールアドレス・電話番号、区分、出欠の記録、花材費です。
- AIに渡すのはクラスと区分の名前と記号だけにする … 氏名、メールアドレス、出欠は渡しません。宛名と数字は Apps Script が差し込みます
- 18歳未満の生徒がいる教室では Gemini API を使わない … 規約は、18歳以上であることを求め、18歳未満を対象とする、または18歳未満が利用しうるサービスへの利用を認めていません。入会の受付で年齢を確かめ、子どもの教室を始めるときは生成AIを替えます
- 有料の枠で使い、
store=falseを付ける … 無料の枠では内容が製品の改善に使われ、人が読むこともあるとされています - 送るのは確認の印が付いた後にする … AIの文面がそのまま生徒に届く経路を作りません
- スプレッドシートの共有を先生と助手に限る … 生徒の連絡先と出欠が並びます。リンクを知っている人が見られる設定にしない。出欠のフォームは、回答の閲覧を先生と助手だけにし、生徒どうしで返事が見えない設定にします
- API のキーをスクリプトに書かない … スクリプトのプロパティに置きます
誤りが起きた場合のリスクは、花材や持ち物を違えて伝えることと、発注の数がずれることの2つです。 前者はAIが花材を書くと起き、後者は返事の置き場が分かれると起きます。どちらも、花材を記号で差し込み、返事を1つのシートに集める設計で守ります。
10まず何から始めるか
1週目:花材の予定のシートを整える
花材の予定のシートに、先生のメモ、花器の大きさ、差し替えの印の3つの列を足します。来月の稽古の分だけ先生が埋めます。生徒の台帳に区分と連絡の方法の列があるかを確かめます。
2週目:2クラスで試す
第8章のとおり、2クラスの情報を手で書き出し、Gemini の画面で文面を作ります。先生が「教室らしい」と思えるかと、花の名前を書き足していないかを見ます。
3週目:出欠のフォームと数え上げを組む
出欠のフォームを作り、返事が入るスプレッドシートにフォームの送信のトリガーを付けます。生成AIをつながずに、締切の前日に返事の無い生徒と発注の数を先生に知らせるところまで作ります。
4週目:文面と送信をつなぐ
Gemini API を呼んで文面を作り、確認のシートに並べ、印の付いたクラスに送ります。最初の月は、先生が全クラスの文面を全文読みます。
2か月目以降: 先生が文面を直した理由と、発注の数の案と実際の差を毎月見ます。返事の無い生徒が締切の前日にほとんど残らず、発注の数を決めるのに出欠のシートを数え直さなくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 時間主導型・フォームの送信などのインストール型のトリガーがあり、フォームの送信はフォーム側とスプレッドシート側の2つがあること。作った人のアカウントで動くこと。時刻が少しランダムになり、9時のトリガーが9〜10時に動くこと。失敗時に「Summary of failures for Apps Script」のメールが届くこと | Google for Developers: Installable triggers | 2026-10-29 |
atHour()・everyDays() の指定。nearMinute() は前後15分で、呼ばないと分がランダムになること | Google for Developers: ClockTriggerBuilder | 2026-10-29 |
| メールの受信者の数が個人のアカウントで1日100、Google Workspace で1日1,500であること | Google for Developers: Quotas for Google Services | 2026-10-29 |
GmailApp でメールを送れ、name・replyTo などのオプションがあり、https://mail.google.com/ の権限が要ること | Google for Developers: Class GmailApp | 2026-10-29 |
Interactions API で response_format に type: "text"・mime_type: "application/json"・schema を渡すこと。enum が使え、minLength・maxLength はエラーにならずに無視されること | Google AI for Developers: Structured outputs | 2026-10-29 |
既定ですべてのやり取りを保存し(store=true)、store=false で保存しないこと。有料の枠で55日、無料の枠で1日保持すること | Google AI for Developers: Interactions API | 2026-10-29 |
| 18歳以上であることが求められ、18歳未満を対象とする、または18歳未満が利用しうるサービスに使わないこと。無料の枠では内容が改善に使われ人が読むことがあり、有料の枠では改善に使わないこと | Google AI for Developers: Gemini API Additional Terms of Service | 2026-10-29 |
花材の差し替えと花材費、欠席したときの扱いは、教室の決まりとして先生が決めてください。 本記事は公開されている仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2295)についてのご相談はこちらから。
