Media > AI活用ユースケース > 総務 > 大学の教務窓口に紙で届く公欠届・欠席届と添付の証明書を読み取り、学籍番号・科目・日付・事由を出欠の登録データにそろえて、添付漏れと期限切れを拾う

大学の教務窓口に紙で届く公欠届・欠席届と添付の証明書を読み取り、学籍番号・科目・日付・事由を出欠の登録データにそろえて、添付漏れと期限切れを拾う

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

教務窓口に紙で届く公欠届・欠席届と添付の証明書を読み取り、学籍番号・科目・日付・事由を出欠の登録データにそろえます。添付漏れと提出期限の過ぎた届は、登録の前に拾って職員へ回します。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
Azure AI/Google Document AI
連携・自動化
Google Apps Script/Python
対象業界
教育
対象部門
総務
対象業務
データ入力・転記/内容確認・チェック
主な課題
入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/対応スピード向上/工数削減
導入難易度
★★☆☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
60h/月
AI導入後
20h/月
想定削減
67%
年間削減
480h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 窓口または提出ボックスで届と添付の書類を受け取り、受付印を押す
  2. 学籍番号を教務システムで引き、氏名と学部学科が合っているかを見る
  3. 届に書かれた科目ごとに、その学生の履修登録にその科目があるか、欠席した日の曜日・時限に授業があるかを時間割で確かめる
  4. 事由と添付の書類を見比べ、必要な書類が付いているか、書類の日付が欠席した日と重なるかを見る
  5. 欠席した日と受付日から、提出期限に間に合っているかを数える
  6. 問題が無ければ、教務システムの出欠の画面で科目ごとに公欠・届出欠席を入れる
  7. 問題があれば、学生にメールで連絡し、届を保留の箱に入れる
導入後(After)
  1. 人窓口または提出ボックスで届と添付の書類を受け取り、受付印を押して、届ごとに1つのPDFにスキャンする
  2. 自動Apps Script が10分おきに取込フォルダを見て、新しいPDFを拾う
  3. 自動Document AI(Form Parser)が、届の欄と科目の行、□ の印、添付の書類の文字と信頼度を返す
  4. 自動Claude API が、届の項目と、添付の書類の種類・日付・発行元を写す
  5. 自動Apps Script が、学生名簿・履修データ・時間割・休業日・事由ごとの必要書類の一覧と照らす
  6. 自動科目の行ごとに `ok`/`not_enrolled`/`no_class`/`missing_doc`/`late`/`unreadable` を付ける
  7. 自動`ok` の行を、教務システムの出欠の取込用のCSVに書き出す
  8. 人職員が `ok` 以外の行を確かめ、学生への連絡か、取込への追加かを決める
  9. 人職員が取込用のCSVを教務システムに取り込む
各工程の詳しい説明を読む
  1. 窓口または提出ボックスで届と添付の書類を受け取り、受付印を押す
  2. 学籍番号を教務システムで引き、氏名と学部学科が合っているかを見る
  3. 届に書かれた科目ごとに、その学生の履修登録にその科目があるか、欠席した日の曜日・時限に授業があるかを時間割で確かめる
  4. 事由と添付の書類を見比べ、必要な書類が付いているか、書類の日付が欠席した日と重なるかを見る
  5. 欠席した日と受付日から、提出期限に間に合っているかを数える
  6. 問題が無ければ、教務システムの出欠の画面で科目ごとに公欠・届出欠席を入れる
  7. 問題があれば、学生にメールで連絡し、届を保留の箱に入れる

(a)1枚ごとに画面を何度も行き来する。 3番目は、科目の行の数だけ履修と時間割を引く作業です。届に書かれた科目名は略称や旧い名前のことが多く、正式な科目を探すところから始まります。

(b)添付漏れに気づくのが遅い。 4番目は窓口が混んでいると省かれ、後になって教員から「この学生の届に証明書は付いていましたか」と聞かれて初めて気づくことがあります。 そのときには、学生に連絡しても書類が手元に残っていないことがあります。

(c)期限の数え方が人によって違う。 「翌日から7日以内」を、土日や大学の休業日を含めて数えるかどうかが、職員の間でそろっていません。同じ日に出した届が、受け付けた人によって期限内にも期限切れにもなります。

(d)連休明けにたまる。 感染症の流行期や就職活動の時期は、届が数日分まとめて来ます。入力が数日遅れると、その間に教員が出欠を締めてしまいます。

  1. 【人】 窓口または提出ボックスで届と添付の書類を受け取り、受付印を押して、届ごとに1つのPDFにスキャンする
  2. 【自動】 Apps Script が10分おきに取込フォルダを見て、新しいPDFを拾う
  3. 【自動】 Document AI(Form Parser)が、届の欄と科目の行、□ の印、添付の書類の文字と信頼度を返す
  4. 【自動】 Claude API が、届の項目と、添付の書類の種類・日付・発行元を写す
  5. 【自動】 Apps Script が、学生名簿・履修データ・時間割・休業日・事由ごとの必要書類の一覧と照らす
  6. 【自動】 科目の行ごとに ok/not_enrolled/no_class/missing_doc/late/unreadable を付ける
  7. 【自動】 ok の行を、教務システムの出欠の取込用のCSVに書き出す
  8. 【人】 職員が ok 以外の行を確かめ、学生への連絡か、取込への追加かを決める
  9. 【人】 職員が取込用のCSVを教務システムに取り込む

8番目が、この設計の分かれ目です。 ok の行は一覧で流し見て取り込み、職員が手を止めるのは照合で引っかかった行だけです。 全行を人が見る設計にすると、②と④の時間がほとんど減りません。

9番目の取り込みを人の操作に残しているのも、意図してのことです。 教務システムの出欠は成績に関わります。誤った行が自動で入ると、教員が気づかないまま成績の判定に使われます。

02今回想定するシステム構成

構成図
公欠届・欠席届+添付の書類(紙)
   │  受付印を押し、届ごとに1つのPDFにスキャン
   ▼【トリガー】Apps Script の時間主導型トリガー(10分おき)
Google Apps Script ── 形式・ページ数・受付日の確認
   ▼
Google Document AI(Form Parser)
   │   届の欄、科目の行、□ の印、添付の書類の文字、信頼度
   ▼
Claude API ── 構造化出力で項目に写す
   │   学籍番号/氏名/欠席日/科目の行/事由/添付の書類の種類・日付・発行元
   ▼
Google Apps Script ── 照合
   │   学生名簿/履修データ/時間割/休業日/事由ごとの必要書類
   │   ok/not_enrolled/no_class/missing_doc/late/unreadable
   ├──▶ 出欠の取込用のCSV(ok の行)
   └──▶ 確認の一覧(ok 以外の行)
   ▼
【職員が確認し、教務システムに取り込む】
役割想定する製品代替候補
OCRGoogle Document AI(Form Parser)Azure AI Document Intelligence
生成AIClaude API(届と添付の書類を項目に写す)Gemini API、OpenAI API
差異計算Google Apps Script(履修・時間割・期限・必要書類との照合)Python
連携Google Apps Script(取込フォルダの監視、取込用のCSVと確認の一覧の書き出し)Python
保管Google ドライブ(共有ドライブ)、Google スプレッドシート学内のファイルサーバー

教務システムは、新しく足すものではありません。 履修データと時間割は、教務システムから毎朝書き出したCSVを共有ドライブに置いて使います。この構成から教務システムへ直接書き込むことはせず、取込用のCSVを作るところまでにします。

土台は Document AI の Form Parser です。 公式のプロセッサ一覧では、OCRのテキストに加えて、キーと値のペア(エンティティとチェックボックス)、表を抽出するとされ、言語の一覧で日本語(ja)は手書きに対応する言語として示されています。事由の □ と科目の行が並ぶ届の様式に、そのまま合います。

Form Parser の注意書きのうち、この題材で効くのは2つです。 ラジオボタンの読み取りに対応しないこと、そして値の入っていないキーと値の組を確実には読み取れないことです。事由を○で囲む様式なら □ に直し、欄が返ってこないことを空欄と決めつけない設計にします。

Gemini API ではなく Claude API にしているのには理由があります。 Gemini API の追加利用規約は、18歳未満の人に向けた、または18歳未満の人が利用しうるサービスの一部として使わないこととしています。この構成を使うのは職員だけですが、同じ仕組みを付属の高校に広げることを考え、最初から避けておきます。

03どうやって実装するのか

Step1

処理の起点を決める

職員が届を受け付け、受付印を押して取込フォルダにスキャンすることを起点にします。 届と添付の書類を重ねて、届ごとに1つのPDFにします。窓口のスキャナの保存先を共有ドライブの取込フォルダにし、ファイル名は「受付日_受付番号」にします。

Apps Script の時間主導型トリガーが、10分おきに取込フォルダを見ます。 Apps Script の1回の実行は6分までとされているため、1回に扱うPDFは10件までとし、残りは次の実行に回します。 処理済みのフォルダへ移すのは、取込用のCSVか確認の一覧への書き込みまで成功したときだけです。

取り込みの締めを1日2回にします。 職員は12時と17時に確認の一覧を見て、その時点の取込用のCSVを教務システムに取り込みます。届が数日分たまる連休明けでも、受け付けた日のうちに出欠に入ります。

Step2

入力データを集める

データ中身取得元
届のPDF1ページ目が届、2ページ目以降が添付の書類。受付日取込フォルダ
読み取り結果欄の名前と値、科目の行、□ の印、要素ごとの信頼度Document AI(Form Parser)
学生名簿学籍番号、氏名、カナ、学部学科、学年教務システムから書き出したCSV
履修データ学籍番号ごとの履修科目、科目コード、科目名、略称教務システムから書き出したCSV
時間割科目コードごとの曜日・時限・期間、休講・補講の日教務システムから書き出したCSV
休業日の一覧土日祝日、大学の休業日学年暦
事由ごとの必要書類の一覧事由、必要な書類の種類、日付の重なりの要否教務課の手順書から作る

質を決めるのは、いちばん下の2つです。 期限を「休業日を除いて数えるか」は、休業日の一覧が無ければ決まりません。事由ごとの必要書類の一覧は、これまで職員の頭の中にあったものを表に出す作業です。

履修データには、科目の略称の列を足します。 学生は「線形代数Ⅰ」を「線代」、「キャリアデザイン演習」を「キャリア」と書きます。よく書かれる略称を履修データの側に持たせ、照合で引けるようにします。

Step3

データの取得方法を決める

読み取りは、Apps Script から Document AI の処理の API を呼ぶだけです。PDFを渡すと、Document という形の応答が返ります。

取るもの応答のどこから何に使うか
欄の名前と値pages[].formFields[] の fieldName と fieldValue学籍番号、氏名、学部学科、欠席した日、提出日
事由の □fieldValue の valueType(filled_checkbox/unfilled_checkbox)事由の区分、添付書類の有無
科目の行pages[].tables[] の headerRows と bodyRows科目名、曜日・時限、担当教員
全文のテキストtext と各要素の textAnchor2ページ目以降の添付の書類
信頼度各要素の layout の confidence手書きの数字が確かかの判定

受付日は、届の欄ではなくファイルから取ります。 学生が書く「提出日」は、書いた日であって窓口に届いた日ではありません。期限の判定には、職員が付けたファイル名の受付日を使い、提出日の欄は参考に残します。

2ページ目以降は、ページごとに分けて Claude API に渡します。 1つのPDFに会葬の礼状と交通機関の遅延証明が両方入っていることがあります。ページの区切りで書類を分け、ページごとに種類と日付を写させます。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … Document AI の対象は PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などです。窓口のスキャナの保存形式は PDF にします
  2. 解像度の確認 … 公式には、スキャンは最低200dpiが望ましく、300dpi以上が一般に最もよい結果になるとされています。学籍番号の手書きの数字のために300dpiにそろえます
  3. ページの順の確認 … 1ページ目が届の様式かを、様式の番号の印字で確かめます。逆に重ねたものは並べ直します
  4. 小さな書類の扱い … 交通機関の遅延証明のような小さな紙は、A4の台紙に貼ってスキャンします
  5. 学籍番号の形の確認 … 桁数と先頭の入学年度の形が合わないものは、照合の前に unreadable にします
  6. 重複の検知 … 同じ学籍番号・同じ欠席日の届が直近にあれば、後のものに「再提出」の印を付けます

5番目を AI に任せないのは、数字の書き間違いを直させないためです。 「7」と「1」が読み分けにくい手書きの学籍番号を、AIは名簿にありそうな番号に寄せがちです。形が合わないものは、名簿と照合する前に人へ回します。

Step5

AIに処理させる

させるのは、届と添付の書類に書かれた文字と印を、決まった項目に写すことだけです。 履修や期限の判断はさせません。

写す項目当たるものの例判断できないときの扱い
学籍番号・氏名「学籍番号」「氏名」書かれたとおりに写し、読みにくい字は unclear
欠席した日「欠席日」「期間」期間なら開始日と終了日。年が無ければ年を空にする
科目の行科目名、曜日・時限、担当教員書かれたとおりに写す。 正式な科目名に直さない
事由□ の印が付いた区分印が2つあれば両方を写す
添付の書類の種類会葬の礼状、医療機関の書類、選考の案内、試合の出場の証明、遅延証明など当たらなければ other
添付の書類の日付発行日、書類に書かれた期間・日付日付が無ければ空
添付の書類の発行元医療機関名、企業名、鉄道会社名など書かれていなければ空

医療機関の書類では、種類と日付と発行元だけを写させます。 診断名や症状は、出欠の登録にも期限の判定にも要りません。写す項目に病名の欄を作らないことで、出力にも台帳にも残らないようにします。

させないこと理由
科目名を正式な名前に直す履修データの略称の列で照合する
履修しているかの判断履修データとの照合で決める
期限に間に合っているかの判断休業日の一覧で数え方を固定する
欠席した日の年を補う年をまたぐ届で1年ずれる
診断名や症状を写す出欠に要らない。要配慮個人情報を広げない
届を認めるかの判断教務課と教員が決める

1行目がいちばん起きやすい失敗です。 「線代」と書かれた行を「線形代数Ⅰ」に直してくれると便利に見えますが、学生が「線形代数Ⅱ」を履修していた場合、AIの直しが別の科目の出欠を作ります。 直すのは照合の仕事で、引けなければ人に回します。

Step6

指示内容を固定する

あなたは大学の教務課で、学生が手書きした公欠届・欠席届と添付の書類を読み、
出欠の登録のための下書きを作る立場です。
OCRが返した読み取り結果だけを見てください。推測で埋めないでください。

【やること】
1. 1ページ目の届から、学籍番号、氏名、学部学科、欠席した日(開始日・終了日)、
   科目の行(科目名・曜日・時限・担当教員)、印の付いた事由、提出日を写してください。
2. 2ページ目以降は、ページごとに書類の種類を次から1つ選び、
   書類の日付と発行元を写してください。
   funeral_notice / medical / job_selection / competition / transport_delay / other

【厳守事項】
- 学籍番号は書かれた数字をそのまま写してください。桁を補ったり、
  読みにくい字を名簿にありそうな番号に寄せたりしないでください。
- 科目名は書かれたとおりに写してください。正式な名前に直さないでください。
- 日付の年が書かれていなければ、年を空にしてください。
- 医療機関の書類では、種類・日付・発行元だけを写してください。
  診断名、症状、検査の結果、医師の所見は、どの項目にも書かないでください。
- 読みにくい字は読めたとおりに写し、unclear を true にしてください。
- 届を認めるか、期限に間に合っているかは書かないでください。
- 届の様式でない書類が1ページ目にあれば、form_found を false にしてください。

【読み取り結果(ページごと)】{pages}

「診断名を書かない」を、項目の作りと指示の両方で縛ります。 スキーマに病名の欄が無くても、AIは note のような自由記述の欄に書こうとします。自由記述の欄をスキーマに置かないことも、同じ目的の工夫です。

「年を空にする」を明記するのは、1月の届のためです。 学生は「12/25」とだけ書くことが多く、受付が1月なら前の年の12月です。 AIに補わせず、Apps Script が受付日から決めます。

Step7

出力形式を固定する

Claude API の構造化出力を使い、次の形のJSONで受け取ります。 output_config.format に JSON スキーマを渡すと、応答がそのスキーマに沿った形になります。

{
  "form_found": true,
  "student_id": { "value": "24A1037", "unclear": false },
  "name": { "value": "", "unclear": false },
  "absence": { "start": "--10-01", "end": "--10-02" },
  "courses": [
    { "name_as_written": "線代", "day": "水", "period": "2",
      "teacher": "", "unclear": false }
  ],
  "reasons": ["funeral"],
  "attachments": [
    { "page": 2, "type": "funeral_notice", "date": "2026-09-29",
      "issuer": "", "unclear": false }
  ],
  "submitted_on_form": "10/3"
}

1つ目の理由は、type を列挙の値に固定できることです。 スキーマの enum に書類の種類を並べ、事由ごとの必要書類の一覧と同じ語で照合します。ただし公式は、列挙の値の大文字・小文字までは保証しないとしているので、照合では大文字・小文字をそろえてから比べます。

2つ目は、自由記述の欄を持たないことです。 構造化出力では additionalProperties を false にする必要があり、スキーマに無い欄は出てきません。 医療機関の書類の中身が漏れ出る場所を、形の側で塞げます。

3つ目は、stop_reason で失敗を見分けられることです。 公式には、max_tokens で打ち切られたときや断ったときはスキーマに合わない出力になりうるとされています。そのときは一覧に書かずにやり直します。

行の判定条件
ok学籍番号が名簿にあり、科目が履修データで引け、その日にその時限の授業があり、書類と期限が条件を満たす
not_enrolled科目が履修データで引けない
no_classその日のその時限に授業が無い(休講、曜日の書き違い)
missing_doc事由に必要な種類の書類が無い、または書類の日付が欠席した日と重ならない
late受付日が、欠席の最終日の翌日から休業日を除いて7日を過ぎている
unreadableunclear があるか、学籍番号の形が合わない
Step8

システムへ連携する

つなぎ先方式内容
取込フォルダ(共有ドライブ)Apps Script の時間主導型トリガー新しいPDFを拾う
Google Document AIAPI呼び出し欄・科目の行・□ の印・信頼度を返す
Claude APIAPI呼び出し(構造化出力)届と添付の書類を項目に写す
教務システムの書き出し毎朝のCSVを共有ドライブに置く学生名簿・履修データ・時間割を読む
取込用のCSV・確認の一覧Apps Script の書き込みok の行と、それ以外の行
教務システム職員がCSVを一括取込出欠への登録

取込用のCSVの列は、教務システムの一括取込の形式に合わせます。 学籍番号、科目コード、授業の日付、時限、出欠の区分(公欠・届出欠席)が中心です。列の名前や区分の値は製品によって違うので、取込の手引きを見て合わせてください。

確認の一覧には、届の画像へのリンクと、引っかかった理由を並べます。 職員は理由で並べ替え、unreadable から先に片付けます。

Step9

人が確認する

  1. unreadable を先に見る … 画像を開き、学籍番号と日付を直します。多くは手書きの数字の読み違いです
  2. not_enrolled と no_class を見る … 略称で引けなかったのか、学生の書き違いなのかを確かめます。略称が原因なら履修データの略称の列に足します
  3. missing_doc を見る … 書類が本当に無いのか、種類の判定がずれたのかを画像で確かめ、無ければ学生に連絡します
  4. late を見る … 期限を過ぎた事情を学生に聞き、受け付けるかを決めます。 決めた理由を一覧に残します
  5. 取込用のCSVを取り込む … ok の行の件数を確かめてから取り込みます

4番目は、仕組みでは決めません。 入院していて出せなかった、忌引で帰省していた、という事情は届の紙には書かれていません。late は「数え方の上で過ぎている」という事実の印です。

2番目で足した略称と、4番目で残した理由は、月に一度見直します。 同じ略称が何度も足されていれば履修データの書き出しに正式に加え、同じ事情での受け付けが続いていれば、規程の側に例として書き足すかを教務課で話し合います。 確認の一覧は、規程と一覧を育てるための材料にもなります。

職員が手を止めるのは、ならして全体の3割前後という想定です。 第10章の1件2分は、この確認と取り込みの時間です。

Step10

例外に対処する

起きること対応
1ページ目が届の様式でないform_found が false。並べ直して再投入
学籍番号の形が合わないunreadable。名簿と照合しない
学籍番号が名簿に無い卒業・退学・休学の学生を疑い、職員が確かめる
科目の行が空欠席した日の時間割から科目を推し量らず、学生に連絡
事由の □ が2つ両方の必要書類で照合し、どちらかがそろえば職員に回す
書類の日付が読めないmissing_doc ではなく unreadable にする
年をまたぐ届受付日から年を決める。12月と1月の届は職員が日付を確かめる
教務システムの書き出しが古い書き出しの日付が当日でなければ、照合をせずに止める
Document AI や Claude API が応答しない取込フォルダに残し、次の実行でやり直す

6行目の区別が大事です。 日付が読めないだけの書類を missing_doc にすると、付いている証明書を「付いていない」と学生に伝えることになります。

Step11

記録を残す

  • 届のPDFと受付日、受付番号
  • Document AI が返したJSONの全文(閲覧できる職員を限った場所に置く)
  • Claude API が返した項目の全文と stop_reason
  • 照合に使った学生名簿・履修データ・時間割の書き出しの日付
  • 行ごとの判定と、職員が直した内容、late を受け付けた理由
  • 取込用のCSVと、取り込んだ日時

2つ目の置き場所を分けるのは、読み取りの全文に診断名が含まれるためです。 項目に写したものには病名がありませんが、OCRの全文には残ります。全文は取り違えを調べるときだけ開く控えとし、保存の期間を決めて消します。

04実装レベルの3段階

最小構成:PDFを手でAIの画面に貼り、項目を表にさせる / 1枚ごとの読み取り
半自動化:上記+取込フォルダから Document AI と Claude API を呼び、一覧に書き出す / 読み取りと項目の一覧化
本格構成:上記+履修・時間割・期限・必要書類と照合し、取込用のCSVと確認の一覧に分ける / 照合と出欠の登録データの作成

最小構成は、読み取りの具合を確かめるための段階です。 600枚には使えません。 半自動化で、1件6分が4分程度になります。 読み取りは自動になりますが、履修と時間割の照合と、教務システムへの入力が残ります。本格構成で2分になり、この段階が本記事の想定です。 差が大きいのは、照合と入力が科目の行の数だけくり返す作業だからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、引けない略称と読みにくい様式の欄が先に分かります。そこを直してから照合を足すほうが、not_enrolled の空振りが減ります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
4 名
月間件数
600 件
1件あたり現在時間
6 分
1件あたり導入後時間
2 分
現在  600件 × 6分 ÷ 60 = 60 時間/月
導入後 600件 × 2分 ÷ 60 = 20 時間/月
月間削減時間
40h
削減率
67%
年間削減時間
480h
年間金額換算(時間単価2,500円)
120万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 学生数が数千人規模で、忌引・感染症・就職活動・公式試合などによる欠席の届を紙で受け付けている私立大学・短期大学・専門学校。窓口の職員が届を見ながら履修と時間割を確かめ、教務システムの出欠に手で入れている場合。証明書の添付漏れや提出期限の過ぎた届に気づくのが、教員から問い合わせが来てからになっている場合。Google Workspace を使っている場合。
向いていない
  1. 欠席の届をすでに学生ポータルのフォームで受け付けており、紙の届がほとんど無い場合。学生数が数百人で、届が月に数十枚の場合。欠席の扱いを教員ごとに決めていて、教務が出欠を登録しない場合。なお、届を認めるかどうか、やむを得ない事情として期限を過ぎた届を受け付けるかどうかの判断は、この構成では代替できません。

07最小構成で試す方法

  1. 先月の届から30枚を選ぶ(うち数枚は、添付漏れや期限切れで保留にしたものを入れる)
  2. 診断名の載った書類は外し、届と、それ以外の添付の書類をPDFにする
  3. 手元のAIサービスの画面に1枚ずつ貼り、「学籍番号、欠席した日、科目の行、事由、添付の書類の種類と日付を表にしてください。科目名は書かれたとおりに。読めない字は読めないと書いてください」と指示する
  4. 出てきた表を、教務システムに入っている出欠と突き合わせる
  5. 同じ30枚で、履修と時間割の照合を職員が手で行い、引けなかった略称を書き出す

30枚は必ずやってください。 つなぎ込む前に、手書きの学籍番号と日付がどれだけ読めるかを確かめます。

出てきた内容判断
学籍番号と日付がほぼ合ったDocument AI とのつなぎに進む
科目名を正式な名前に直した指示の書き方で直る。構成は有効
略称で引けない科目が多い履修データの略称の列が先
手書きの数字が読めない枚数が多い様式に数字の升目を設けるのが先

4行目が出たら、様式を直す合図です。 学籍番号の欄を1桁ずつの升目にするだけで、数字の読み取りは安定しやすくなります。

08実装時につまずきやすいポイント

問題対策
AIが科目名を正式な名前に直す指示で禁じ、履修データの略称の列で照合する
手書きの学籍番号を名簿に寄せる形の確認を照合の前に置き、寄せさせない
事由を○で囲む様式が読めないラジオボタンに対応しない。□ に直す
空欄の欄が返ってこない値の無いキーと値の組は確実には読めない。返ってこないことを空欄と決めつけない
期限の数え方がずれる休業日の一覧で数え、規程の文言を一覧の横に書いておく
学生の書いた提出日で期限を判定する受付日はファイル名から取る
年をまたぐ届が1年ずれる年は受付日から決める
診断名が台帳に残る写す項目に病名の欄を作らない。 自由記述の欄も置かない
書き出しが古いまま照合する書き出しの日付を確かめ、古ければ止める
late を自動で差し戻す期限を過ぎた事情は職員が聞く

上の2行が、この構成の失敗のほとんどです。 どちらも、AIが親切に「直す」ことから起きます。直すのは照合の仕事にし、引けなければ人に回す、という線を守るかどうかで運用に乗るかが決まります。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 学生の学籍番号・氏名・学部学科・履修、欠席の事由、そして添付の書類に書かれた親族の葬儀、就職先の企業名、医療機関での受診です。

  1. 病歴にあたる情報を広げない … 個人情報保護委員会のガイドラインは、要配慮個人情報の「病歴」を、特定の個人が病気に罹患した経歴を示す部分としています。写す項目に病名を置かず、OCRの全文は閲覧を限った場所に期間を決めて置きます
  2. より慎重にするなら、医療機関の書類をスキャンしない … 窓口で職員が原本を見て、届の窓口記入欄の「書類確認済」に印を付ける運用もできます。その場合、病気の届では書類の種類の照合を人が行います
  3. 処理する場所を確かめる … Document AI のリージョンに日本はありません。国外で処理してよいかを、学内の個人情報の取扱いの規程で確かめます
  4. 出欠を自動で確定させない … 取り込みは職員の操作に残します。出欠は成績の判定に関わります
  5. 期限切れを自動で差し戻さない … 事情を聞かずに受け付けないと、学生の不利益が仕組みの判断で決まります
  6. 就職先の企業名を他の用途に使わない … 選考の案内に書かれた企業名は、出欠のために読んだものです。就職の状況の集計などに流用しません

誤りが起きた場合のリスクは、誤った出欠が登録されることと、付いている書類を「無い」と伝えることの2つです。 前者は取り込みを人の操作に残して防ぎ、後者は unreadable と missing_doc を分けて防ぎます。

10まず何から始めるか

1週目:必要書類と期限の数え方を文書にする

事由ごとに、どの種類の書類が要るか、書類の日付が欠席した日と重なる必要があるかを一覧にします。期限の「翌日から7日以内」に休業日を含めるかどうかも、教務課で決めて書きます。

2週目:30枚で試す

先月の届から30枚を選び、診断名の載った書類を外して、手元のAIサービスで項目を表にさせます。手書きの学籍番号と日付がどれだけ合うかを最優先で見ます。

3週目:様式と略称を直す

学籍番号の欄を1桁ずつの升目にし、事由の欄を □ にそろえます。よく書かれる科目の略称を、履修データの書き出しに列として足します。

4週目:取込フォルダから一覧までをつなぐ

Apps Script で取込フォルダを見張り、Document AI と Claude API を呼んで一覧に書き出すところまで作ります。この時点では照合をせず、写した項目だけを職員が見ます。

2か月目: 履修・時間割・期限・必要書類の照合を足し、取込用のCSVと確認の一覧に分けます。3か月目以降: 1日2回の取り込みに切り替え、1件6分が何分になったかを実測します。not_enrolled の多くが略称の列で解消し、late の判断の理由が一覧に残るようになった時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-07/最終更新:2026-10-07
確認した内容情報源確認日
Form Parser がOCRのテキストに加えてキーと値のペア(エンティティとチェックボックス)、表を抽出すること。言語の一覧で日本語(ja)が手書きに対応する言語として示されていることGoogle Cloud: Processor list2026-10-07
チェックボックスのモデルがラジオボタンに対応しないこと。値の入っていないキーと値の組を確実には読み取れないことGoogle Cloud: Form Parser2026-10-07
チェックボックスが valueType の filled_checkbox/unfilled_checkbox で返ること。表が headerRows/bodyRows で返ることGoogle Cloud: Handle the processing response2026-10-07
対応形式が PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などであること。スキャンは最低200dpiが望ましく300dpi以上が一般に最もよいことGoogle Cloud: Supported files2026-10-07
マルチリージョンが us と eu で、単一リージョンにシンガポールなどがあり、日本のリージョンが一覧に無いことGoogle Cloud: Regional and multi-regional support2026-10-07
output_config.format に JSON スキーマを渡して応答の形を固定できること。enum が使え、additionalProperties を false にする必要があること。列挙の値の大文字・小文字は保証されないこと。max_tokens で打ち切られたときや断ったときはスキーマに合わない出力になりうることClaude API: Structured outputs2026-10-07
Apps Script の1回の実行が6分までであることApps Script: Quotas for Google Services2026-10-07
18歳未満の人に向けた、または18歳未満の人が利用しうるウェブサイト・アプリ・サービスの一部として Gemini API を使わないこととされていることGemini API 追加利用規約2026-10-07
要配慮個人情報の「病歴」が、病気に罹患した経歴を意味し、特定の病歴を示した部分が該当すること。あらかじめ本人の同意を得ないで要配慮個人情報を取得してはならないこと(法第20条第2項)個人情報保護委員会: 個人情報の保護に関する法律についてのガイドライン(通則編)2026-10-07

届を認めるかどうか、期限を過ぎた届を受け付けるかどうかは、学内の規程に沿って教務課と教員が決めてください。 本記事は各製品と個人情報保護委員会の公式ページで確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0715)についてのご相談はこちらから。

AI活用について相談する
目次