学校業務の自動化 - AIを利用した生活記録簿チェック 教科別・特別記述編

힘센캥거루
2026년 2월 3일(수정됨)
6
17

学校で最も意味がなく、きつくて退屈な業務を一つ挙げろと言われたら、自分は生活記録簿(生徒指導要録)チェックを選ぶだろう。

中学校では生活記録簿がそれほど重要ではないが、高等学校では入試と関係しているため非常に重要である。

問題は、このような生活記録簿の点検で探すものが、せいぜい単純な誤字脱字、記載禁止用語、表記・文法ミスなどだという点だ。

この記事は、次のような問いから始まる。

そろそろ単純なチェック業務はAIに任せてもいいのではないだろうか?

1. AIを利用した生活記録簿作成の限界点

学校業務の自動化 - AIを利用した生活記録簿チェック 教科別・特別記述編-1

高等学校の教員であれば皆知っているように、手書きで作成した生活記録簿とAIに任せて作成した生活記録簿とでは、文体からして違う。

特に最近は、入試の流れに合わせて、具体的な観察内容と教員の評価がつながるように記述するのが主流になっているため、AIに任せると次のような文体が出てくる。

  • 問題解決の過程で条件を確認し式を立てる過程を忠実に行い、計算結果を点検する姿勢が観察される。

  • 式の変形やグラフの解釈過程で根拠を挙げて説明しようとする姿勢が観察され、結果に至るまでの思考の流れを比較的明確に示す。推論中心の問題解決能力を示す。

  • 計算ミスと概念適用の違いを区別しようとする努力が見られ、反復学習を通して類似問題解決時の正確度が向上する。

  • テキスト中の表現に注目して意味を推論し、自身の経験と結びつけて思考を広げる。

AIが書いた文章の特徴は、生徒が具体的に何を学び、何を得たのかが分かりにくい書き方になっているということだ。

例えば、思考の流れ推論中心の問題解決能力思考を広げるといった記述は、教員が何を言いたいのかを簡単には把握しづらい。

また、〜しようとする姿勢が観察されといった文体も非常に不自然だ。

こうした部分が、教員が生活記録簿を手書きせざるを得なくしている原因となる。

そのため教員は主に誤字脱字、二重スペース、使用禁止用語などを中心に探すことになる。

2. chatGPT や NotebookLM では無理なのか?

学校業務の自動化 - AIを利用した生活記録簿チェック 教科別・特別記述編-2

当然、ウェブで提供されている一般的なLLMを使っても生活記録簿の点検は可能だ。

問題は、入力できる内容の長さに制限があり、会話が進むほど最初に与えたプロンプトを忘れてしまうという点である。

そのため、途中で最初に入力したプロンプトを再度入力しなければならない問題が生じる。

では、毎回の対話を最初から行うつもりでプロンプトを入れてチェックすればよいのではないか?

3. データクリーニング

学校業務の自動化 - AIを利用した生活記録簿チェック 教科別・特別記述編-3

このように生活記録簿の分析を自動化したいのだが、最大の障害となるのは業務ポータルである。

上の図は、NEIS から生活記録簿をダウンロードしたときのデータの形をダミーで再現したものである。

下にサンプルファイルのリンクを載せておく。

データの形が本当に最悪中の最悪である。

ここから、各行に教科、学期、番号などのラベルをすべて付け直し、8行目・12列のように途中で切れている部分をつなぎ合わせる。

そしてページ情報や繰り返される目次は削除する。

コードについての説明はコメントで付けておいた。

import pandas as pd
from pathlib import Path

# 먼저 폴더 생성해 줌
cwd = Path.cwd()

resultFolter = cwd / "result"
resultFolter.mkdir(exist_ok=True)
targetFolder = cwd / "target"

# 타겟 폴더안의 .xlsx 파일을 for문으로 돈다.
for file in targetFolder.glob("*.xlsx"):

	# 일단 4줄 뛰어넘고, 쓸데없는 null행과 열들은 잘라낸다.
    df = pd.read_excel(file, skiprows=4)
    df = df.iloc[:, :6]
    stNumCol = [i for i in df.columns if "번" in i][0]
    subjectNmae = [i for i in df.columns if "과" in i][0]
    df.drop(df[df[subjectNmae] == subjectNmae].index, inplace=True)
    df.dropna(subset=stNumCol, inplace=True)
    df.reset_index(drop=True, inplace=True)
    
	# 열을 돌면서 비어있는 행들을 모두 채워준다.
    dropRowIndex = []
    for i in range(len(df)):
        rowSubNmae = df.iloc[i, 0]
        rowGrade = df.iloc[i, 1]
        rowClass = df.iloc[i, 2]
        rowStNum = df.iloc[i, 3]
        rowStName = df.iloc[i, 4]
        rowInnerText = df.iloc[i, 5]
        if i == 0 :
            continue
        if pd.isna(rowSubNmae):
            df.iloc[i, 0] = df.iloc[i - 1, 0]
        if pd.isna(rowGrade):
            df.iloc[i, 1] = df.iloc[i - 1, 1]
        if pd.isna(rowClass):
            df.iloc[i, 2] = df.iloc[i - 1, 2]
        if pd.isna(rowStNum):
            df.iloc[i, 3] = df.iloc[i - 1, 3]
	# 만약 글이 쪼개져 있으면 두 행의 내용을 합쳐주고 하나는 지운다.
	# 굳이 dropRowIndex를 만들어 추가한 다음에 지우는 이유는
	# for문이 실행되는 동안 df의 길이변화가 일어나지 않도록 하기 위함이다.
        if df.iloc[i, 3] == df.iloc[i-1, 3]:
            dropRowIndex.append(i)
            df.iloc[i-1, 5] = df.iloc[i-1, 5] + df.iloc[i, 5]
    df.drop(dropRowIndex, inplace=True)
    df.reset_index(drop=True, inplace=True)
    df.to_excel(cwd / "교과세특 학년별 과목별_정제.xlsx", index=False)

このように一度整形処理を行うと、データが下のようにすっきりする。

あとは、これを使ってAIに点検依頼を送ればよい。

学校業務の自動化 - AIを利用した生活記録簿チェック 教科別・特別記述編-4

4. プロンプト(prompt)の抽出

学校業務の自動化 - AIを利用した生活記録簿チェック 教科別・特別記述編-5

すべての点検の基準はプロンプトなので、設計全体の中で最も気を配るべき部分である。

インターネット上にPDF形式で公開されている生活記録簿記載要領をダウンロードしてプロンプトを作成するのが最も確実だ。

上記サイトからファイルをダウンロードし、AIに自分が点検してほしい部分をプロンプトとして作ってもらう。

そのプロンプトを使ってAPIリクエストを投げてみる。

プロンプトの一部を載せておく。

prompt = """
너는 학생부 세부능력 및 특기사항 검수 전문가다. 
입력 JSON 데이터 중 “세부능력 및 특기사항(세특)” 항목만 점검하시오.

[기재 유의어 → 대체 표현 치환 규칙]

다음에 해당하는 경우, 표준 대체 표현으로 반드시 수정한다.

- Google(구글), NAVER(네이버), Daum(다음) 등 → 포털사이트
- Google Classroom(구글 클래스룸), EBS 온라인클래스 등 → 학습 플랫폼 / 원격 학습플랫폼

...중략...

[예외적 허용 항목 — 아래는 수정하지 않음]
- 단순 지명, 국가명, 산업명(학교 특정·진학 연계가 불가능한 경우)
- 교육부/교육청 등 공교육기관 명시
- 교내 수행평가·지필평가의 “정량 미제시” 성취 표현
- 수업 중 개념/원리 학습(예: Z점수 개념 이해, 반도체 공정 원리)
- 일상생활 경험(아르바이트 등)이 학습 연결 맥락일 때
- 일반 공간(아파트 등) 언급
- 미래형 포부/계획(‘가고 싶다’, ‘탐색 중’, ‘꿈꾸고 있다’)
- 독서 제목 및 저자 / 인용문 (‘ ’ 사용 가능)
- 단순 정보 제공이나 개념 학습의 수치(예: 최저임금 1만원, GDP 성장률 2%)는 금지 항목이 아님.

[판정 기준]
- “과거형 실적”이면 수정
- “미래 포부/계획/탐색”이면 유지
- 반드시 앞, 뒤 문맥 기반으로 판단할 것
"""

5. コード

OpenAI の公式サイトに行けば、簡単なサンプルを確認できる。

下記のコードをベースにするか、AIを使ってバイブコーディングのようにAPIリクエストを作成すればよい。

AIからの回答を自然文ではなくテーブル形式で受け取るのが、最もすっきりしていると思われた。

生活記録簿を点検したあと、同僚教員にその内容を伝えるときのメッセージ形式は、たいてい次のような形になる。

科目

学籍番号

氏名

修正前

修正後

修正理由

地球科学1

10100

サゴン・ヒムセン

〜을 함으로써

〜을 함으로서

助詞修正

生命科学2

10300

ナムグン・カンガルー

학생 으로 수업 중

학생으로 수업 중

スペース修正

このような形式で回答を強制すればよい。

問題は、全教科を一度に点検してしまうとトークン数が長くなり過ぎることだ。

これを防ぐために、教科別に内容を分割し、回答をPandasで整理して一括保存すればよい。

# 먼저 파일을 과목별로 묶어 jsonDtat로 만든다.
data = df[df["과 목"] == sub]
jsonData = data.to_json(orient="records", force_ascii=False)

# AI에게 응답을 강제하도록 구조를 설계한다.
response = client.responses.create(
    model="gpt-5.2",
    input=[{
        "role": "user",
        "content": [
            {"type": "input_text", "text": prompt},
            {"type": "input_text", "text": jsonData}
        ]
    }, 
    ],
    text={
        "format":{
            "type": "json_schema",  
            "name": "response_format",  
            "strict": True,  
            "schema": {
                "type": "object",
                "properties": {
                    "rows": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "subjectName": {"type": "string"},
                                "studentName": {"type": "string"},
                                "before": {"type": "string"},
                                "after": {"type": "string"},
                                "edit": {"type": "string"},
                                "editReason": {"type": "string"}
                            },
                            "required": ["subjectName", "studentName", "before", "after", "edit", "editReason"],
                            "additionalProperties": False  

                        }
                    }
                },
                "required": ["rows"],
                "additionalProperties": False 
            }     
        }
    }
)
responseJson = json.loads(response.output[0].content[0].text)["rows"]

このように一度リクエストを投げ、応答を整理すると、下のような内容を見ることができる。

学校業務の自動化 - AIを利用した生活記録簿チェック 教科別・特別記述編-6

6. プロンプトの反復修正

これで基本的な骨組みはできたので、プロンプトを継続的に修正していけばよい。

自分はより詳細な出力のために、出力ルール・判定ルールを補完し、記載上の注意語をすべて入力した。

7. 使ってみた感想

学校業務の自動化 - AIを利用した生活記録簿チェック 教科別・特別記述編-7

何よりも、精度が群を抜いている。

このように点検を行うことで、誤字脱字やスペースの問題はほとんど解決された。

ある教科では、海外ボランティア経験に関する内容が記載されているのを発見し、修正したこともある。

生活記録簿の指針は毎回変わるため、そのすべてを教員が記憶しておくこと自体、簡単なことではない。

そもそも、このような生活記録簿記載業務が教育の質と一体どんな関係があるのかも、あまりよく理解できない。

こうして教員の雑務を少しずつ減らしていき、もう少し教育そのものに力を注げる日が来ることを心から願っている。

관련 글

학교 업무 자동화 - 스프레드시트로 평가 계획서 초안 제작 자동화
학교 업무 자동화 - 스프레드시트로 평가 계획서 초안 제작 자동화
2022개정 교육과정이 들어오면서 과목이 많아지고, 이에 따라 평가 계획서도 매 학기마다 새롭게 써야하는 일이 생겼다.문제는 평가 계획서에는 각 단원별 성취 기준, 성취 수준 등을 모두 기재해야하는 요식 행위를 필요로 한다는 것이다.이런 기준들은 따로 교사가 작성하는 ...
2026年 東国大学 未来社会 教員力量強化フォーラム オフライン参加レビュー
2026年 東国大学 未来社会 教員力量強化フォーラム オフライン参加レビュー
ある先生が、面白そうな研修を一つ紹介してくださった。東国大で行われるAI関連の研修だった。AIに関する研修というだけでも良いのに、会場がホテルだって?これは絶対に行かなきゃと思った。当日、研修の募集が始まるとすぐに申し込んで、オフラインで参加することになった。1. アンバサダーソウル プルマンホテル...
大韓民国教育博覧会(2026)訪問記
大韓民国教育博覧会(2026)訪問記
ふとしたきっかけで、インスタグラムを通じて大韓民国教育博覧会のイベント情報を知った。昨年は別のイベントと日程が重なって行けなかったので、今年こそはぜひ行きたいと思っていた。そこでさっそく事前予約をした。事前予約者の入場料は8,000ウォン、当日登録は15,000ウォンである。知り合いによると教員は入...
2022改訂教育課程 地球科学内容プレビュー - 第3単元 太陽系天体と恒星・宇宙の進化
2022改訂教育課程 地球科学内容プレビュー - 第3単元 太陽系天体と恒星・宇宙の進化
今回は地球科学の概観もいよいよ最後である。第3単元を見ていこうと思う。1. 内容体系第3単元の内容体系は、以前の「地球科学1」の天体単元から系外惑星と生命体探査が抜け、代わりに「地球科学2」にあった太陽系モデルと日食・月食が新たに入ってきた。他の単元に比べると、内容がかなり縮小された印象だ。2. 第...
国家教育委員会、高校学点制の履修基準を改編
国家教育委員会、高校学点制の履修基準を改編
[本記事はライブ映像を利用してAIで作成された記事です。]出欠中心 vs 成績反映…「支援策なき制度確定は危険」国家教育委員会が高校学点制の履修基準改編をめぐり、本格的な議論に入った。出欠率を中心とするのか、学業成就度をあわせて反映するのかをめぐって意見が鋭く対立しており、制度施行に先立って具体的な...
教師のための教育研究および統計分析研修 ― 第21〜30次のまとめと感想など
教師のための教育研究および統計分析研修 ― 第21〜30次のまとめと感想など
今日は、教師のための教育研究および統計分析研修の第21〜30次で印象に残った内容と感想を残しておこうと思う。1. logit(ロジット)とロジスティック回帰分析最初にロジスティック回帰分析と聞いたときは、何かとてつもなく難しいものだと思ったが、実はロジットに沿った線形回帰分析だということが分かった。...

댓글을 불러오는 중...