GASで校務の定型作業を小さく自動化し、AIに渡しやすい形でログを残す
はじめに
校務の中には、毎回ほぼ同じ手順で行う作業があります。
- フォーム回答の確認
- スプレッドシートの集計
- 未対応者の抽出
- 関係者向けの文面作成
- 日ごとの記録整理
こうした作業は、いきなり大きなシステムに置き換えるより、Google Apps Script(GAS)で「1つの表」「1つの通知」「1つのログ」から小さく自動化すると扱いやすくなります。
この記事では、校務で使いやすいGASの考え方として、スプレッドシートを起点にした処理と、AIに相談しやすいログ整備の形をまとめます。
前提
この記事では、次のようなスプレッドシートを想定します。
| timestamp | name | class | status | note |
|---|---|---|---|---|
| 2026/07/23 08:10 | 山田 太郎 | 1-A | 未対応 | 欠席連絡あり |
| 2026/07/23 08:15 | 佐藤 花子 | 1-B | 対応済 | 保護者へ連絡済み |
GASでは、この表を「人が見やすい一覧」として使いながら、同時に「処理しやすいデータ」として扱えます。
まずは列名でデータを扱う
スプレッドシートの処理では、列番号に直接依存すると、列の追加や並べ替えに弱くなります。最初の行をヘッダーとして読み、列名で扱う形にしておくと、後から見直しやすくなります。
function getRowsAsObjects_() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('responses');
const values = sheet.getDataRange().getValues();
const headers = values[0];
const rows = values.slice(1);
return rows.map(row => {
const item = {};
headers.forEach((header, index) => {
item[header] = row[index];
});
return item;
});
}
この形にしておくと、以降の処理で row.status や row.class のように意味のある名前で参照できます。
未対応の行だけを抽出する
校務でよくあるのは、「未対応のものだけを見たい」という処理です。
function listPendingRows() {
const rows = getRowsAsObjects_();
const pendingRows = rows.filter(row => row.status === '未対応');
pendingRows.forEach(row => {
console.log(`${row.class} ${row.name}: ${row.note}`);
});
}
この段階では、通知や自動送信まで進めなくても十分です。まずはログに出して、抽出条件が正しいか確認します。
AIに渡しやすい要約テキストを作る
AIを校務で使う場合、個人情報や不要な詳細をそのまま渡すのではなく、必要な項目だけを整理したテキストにするのが扱いやすいです。
たとえば、未対応一覧を確認用の要約に変換します。
function buildPendingSummary() {
const rows = getRowsAsObjects_();
const pendingRows = rows.filter(row => row.status === '未対応');
if (pendingRows.length === 0) {
return '未対応の記録はありません。';
}
const lines = pendingRows.map((row, index) => {
return [
`${index + 1}.`,
`クラス: ${row.class}`,
`状態: ${row.status}`,
`メモ: ${row.note || 'なし'}`
].join(' ');
});
return lines.join('\n');
}
ここでは名前を含めず、クラス・状態・メモだけにしています。AIに渡す前の段階で、何を含めるかをGAS側で明示しておくと、後から運用を見直しやすくなります。
AIに依頼する前提のプロンプトを作る
GASで直接AI APIを呼び出さなくても、プロンプトの材料を整えるだけで校務の効率化につながります。
function buildPromptForReview() {
const summary = buildPendingSummary();
const prompt = [
'以下は校務上の未対応記録です。',
'個人が特定される表現を避け、確認すべき観点を箇条書きで整理してください。',
'',
summary
].join('\n');
console.log(prompt);
}
このように、AIへ投げる前の文章をGASで整えておくと、毎回ゼロから説明を書く必要が減ります。
ログ用シートに処理結果を残す
自動化では、「何を処理したか」を後から確認できることが大切です。処理結果をログ用シートに残しておくと、日次の確認や振り返りがしやすくなります。
function writeProcessLog(message) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('logs') || ss.insertSheet('logs');
if (sheet.getLastRow() === 0) {
sheet.appendRow(['timestamp', 'message']);
}
sheet.appendRow([new Date(), message]);
}
未対応件数を記録する例です。
function logPendingCount() {
const rows = getRowsAsObjects_();
const pendingCount = rows.filter(row => row.status === '未対応').length;
writeProcessLog(`未対応件数: ${pendingCount}`);
}
小さく始めるときの分け方
校務の自動化は、最初から全部をつなげるより、次の順番で分けると確認しやすくなります。
- 表の列名を決める
- 必要な行だけを抽出する
- 確認用のテキストを作る
- ログに残す
- 必要に応じて通知や連携を追加する
特にAI活用では、最初から自動判断まで任せるのではなく、「AIに渡す前の材料を整える」だけでも効果があります。GASは、その材料作りに向いています。
まとめ
GASで校務を扱うときは、スプレッドシートを単なる一覧ではなく、処理の起点として設計すると扱いやすくなります。
- 列名でデータを扱う
- 未対応などの条件で抽出する
- AIに渡しやすい要約を作る
- 処理ログを残す
この4つを押さえておくと、校務の定型作業を小さく自動化しながら、AI活用にもつなげやすくなります。