0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GASで校務の定型作業を小さく自動化し、AIに渡しやすい形でログを残す

0
Posted at

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.statusrow.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}`);
}

小さく始めるときの分け方

校務の自動化は、最初から全部をつなげるより、次の順番で分けると確認しやすくなります。

  1. 表の列名を決める
  2. 必要な行だけを抽出する
  3. 確認用のテキストを作る
  4. ログに残す
  5. 必要に応じて通知や連携を追加する

特にAI活用では、最初から自動判断まで任せるのではなく、「AIに渡す前の材料を整える」だけでも効果があります。GASは、その材料作りに向いています。

まとめ

GASで校務を扱うときは、スプレッドシートを単なる一覧ではなく、処理の起点として設計すると扱いやすくなります。

  • 列名でデータを扱う
  • 未対応などの条件で抽出する
  • AIに渡しやすい要約を作る
  • 処理ログを残す

この4つを押さえておくと、校務の定型作業を小さく自動化しながら、AI活用にもつなげやすくなります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?