ブログ
2025.5.15 ChatGPTに予算管理をさせる
お疲れ様です。
私の研究室には卒研生が4人配属され、4年生から6年生まで含めて計8名体制となりました。
ただ、薬学部ということもあり、講義や補講の合間にしか研究時間が取れないのが現実です(泣)
さて、またしてもChatGPTネタで恐縮ですが、今回もChatGPTを活用した業務効率化の事例を紹介します。
テーマはズバリ、「予算管理の自動化」です。
🔧 一人でこなす研究室経理
秘書がいない私の環境では、次の業務すべてを一人で処理しています:
- 稟議書の起案
- 決裁手続き
- 業者への発注
- 納品物の受け取り
- 伝票処理
- 会計ソフトへの入力(精算)
この中で最も煩雑かつ時間を取られるのが「伝票処理と帳簿の作成」です。
🧠 ChatGPTに帳簿作成を任せてみた
今回、その面倒な帳簿作成をChatGPTに丸投げしてみました。
我が大学における研究費処理の基本フローは以下の通りです:
1. 稟議書作成と決裁(Web上)
「○○を購入します」という内容の稟議書を起案し、金額に応じて見積書を添付。
- 3万円未満:見積不要
- 3〜5万円:見積1社
- 5万円超:相見積もり必要
決裁後、稟議書番号が発行されます。
2. 業者へ発注
代理店にメールや電話で注文。
3. 納品と伝票受け取り
納品物と共に、紙の納品書・請求書を受け取ります。
4. 伝票スキャンと保存
請求書・納品書をScanSnapでスキャンし、自動的にOneDriveに保存。
5. 精算処理(会計システム)
Web会計システム「楽楽精算」にて支払い依頼を作成。
稟議書番号、品目、金額、予算コード、振込先などを入力します。
申請後、支払い依頼番号が発行され、PDF形式で保存可能。
📎 帳簿をChatGPTで作成するプロンプト
支払い依頼書のPDFをChatGPTに読み込ませたら、以下のようなプロンプトを入力します
—-
あなたは優秀な経理担当者です。研究費の管理を任されており、研究費の支出状況を把握する立場にあります。あなたは支出状況を確認し、報告する義務があります。
管理する研究費は次の通りです。
研究費A 予算AAAA円 予算コードXXXX
研究費B 予算BBBB円 予算コードYYYY
PDFファイルの内容を読み取り、研究費Aと研究費Bの帳簿を作ってください。
—-
ChatGPTは、PDF内の予算コード・品目・金額などを正確に識別し、財源ごとの支出内訳・残額を含む帳簿を自動生成してくれます。
希望すれば、Excel形式の表として出力させることも可能です。
🔍 ChatGPTで照合もできる
次に、スキャンした請求書や納品書(PDF)をChatGPTに読み込ませ、上で作成した業者支払い依頼と突き合わせることも可能です。
ChatGPTは、次のような作業もサポートしてくれます:
- 請求書はあるが、支払い依頼がされていないものの検出
- 同じ支出の二重計上のチェック
- 支払先・金額の整合性確認
✅ まとめ
まだ一部に人手を要する作業もありますが、帳簿作成と照合作業の自動化は十分に現実的なレベルに達しています。
研究に集中したい教員こそ、ChatGPTをうまく活用して事務処理の省力化を図ってみてはいかがでしょうか?
2025.4.18 面談記録を自動化するスクリプトとプロンプトを公開!
前回の記事
では、音声録音から面談記録を作成するまでの全体の流れをご紹介しました。
今回はその続編として、実際に使用しているPythonスクリプトと、ChatGPTに渡す**プロンプト(指示文)**を公開します!
💻 文字起こしスクリプト(Python)
以下は、音声ファイルを自動的に文字起こししてくれるPythonスクリプトです。
ファイル名を transcribe.py として保存してください(テキスト形式)。
import whisper
import sys
def transcribe_audio(audio_path):
model = whisper.load_model("large")
result = model.transcribe(audio_path, language="ja") # 日本語を明示
print(result["text"])
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python transcribe.py <audio_file>")
sys.exit(1)
audio_file = sys.argv[1]
transcribe_audio(audio_file)
🛠️ スクリプトを自分の環境で実行するために、ChatGPTに教えてもらう
次に、transcribe.pyをChatGPTに読み込ませ、次のように話しかけてみてください:
「これはどういうスクリプト?」
「自分の環境で実行するための手順を丁寧に教えて」
すると、環境構築やPython仮想環境、必要なライブラリのインストール方法、実行コマンドなどを教えてくれます。環境に応じたアドバイスももらえるので安心です。
✍️ ChatGPTで面談記録に整形するプロンプト
Whisperで文字起こしが完了したら、ChatGPTに以下のプロンプトを入力して記録文に整形してもらいます。
あなたは大学教員です。成績下位学生の面談を行い、面談記録を残す必要があります。面談の内容を項目別にまとめて、面談記録を作成してください。
###面談記録
(ここに文字起こしの文章をペースト)
###条件
面談記録を項目別にまとめ、各項目を箇条書きにしない形にしてください。
学生の名前は***さん
項目の前に「・」を使用せずに記述すること。
だ、である調で記載すること。
このプロンプトをChatGPTに渡せば、自然な文章スタイルで読みやすい面談記録が自動生成されます。
✅ 最後は人間が確認を!
ChatGPTは非常に優秀ですが、人名や内容の認識ミスが稀にあるため、
最終確認は必ず人間が行うようにしましょう。
🎓 まとめ
この方法で、「録音 → 文字起こし → 面談記録整形」までを効率化かつ自動化できます。
忙しい教員の皆さんにこそ、このワークフローはおすすめです!
2025.4.16 【保存版】Python×ChatGPTで面談記録を自動化!
新年度が始まりましたね。
本学もついに完成年度を迎え、1年生から6年生までの全学年が揃いました。
さて、教員業務で地味に大変なのが 学生との面談記録の作成 です。
私たちは基本的に1学年あたり3〜4人で担任を担当しており、つまり1ヶ月で18人前後の面談をこなします。
これを手書きでメモし、あとから学生カルテに入力…
いや、もうそんなアナログな作業は卒業しましょう。
私はここ1年、PythonとChatGPTを駆使して、音声から面談記録を作成する一連の流れを自動化しています。
この記事では、その 具体的な手順 をご紹介します!
🔧 面談からカルテ作成までの流れ
- iPhoneで面談を録音(※事前に学生の了承を得ています)
- 音声ファイルをMacに転送
- ターミナルでPython仮想環境を起動
- OpenAIのWhisperで文字起こし
- ChatGPTで要約&体裁整え → 面談記録として出力
🧠 ワンポイント解説
▶️ Step4:Whisperを使った文字起こし
Pythonで動く文字起こしツール「Whisper」を使っています。
私が実際に使っている スクリプトファイルも近日公開 しますので、
ChatGPTに「このスクリプトを自分の環境で動かすには?」と聞けばOK!
💬 Step5:ChatGPTで記録文に変換
プロンプト(指示文)も近日中に公開します。
そのままコピペして使うだけで、見やすい面談記録に自動整形してくれます。
✅ まとめ:作業は “人間の仕事” から “AIの仕事” へ
記録作成にかかる時間、正直バカになりません。
ですが今の時代、ChatGPT(月20ドル)に丸投げすれば全部やってくれます。
精度も高く、整っている。なによりラク。
学生との貴重なやり取りを、質を落とさず、効率よく記録する。
スクリプトとプロンプトの配布は次回の記事で!お楽しみに。
2025.2.4 ChatGPTを使って、出欠情報と課題提出状況をPythonで集計してみる
後期の講義も終了し、成績評価のために出欠情報と課題提出状況を整理する時期になりました。私は 「有機化学 I」(1年生) と 「有機化学 IV」(2年生) の2つの講義を担当していますが、それぞれの講義で以下の方法で出欠確認と課題提出を管理しています。
• 出欠確認:QRコードをスマホで読み取らせ、Microsoft Forms 上で出席登録。
• 課題提出:毎回 A4 1枚の課題を出し、次回の講義前日までに Forms で提出。
これらの情報は、それぞれ Excelファイル として出力でき、ファイルには 学生名・学生メールアドレス・出欠情報or提出ファイル名 などが記載されています。
しかし、ここで問題が発生します。
• 各回のデータを履修者名簿と照合し、出欠・課題提出状況を確認するのは手間がかかる。
• 2つの講義を持っていると、この作業だけで 膨大な時間を取られてしまう。
そこで ChatGPT(有料版) を使い、出欠確認と課題提出状況の集計を自動化するスクリプト を作成してみました。
ChatGPT に出席確認と課題提出状況のスクリプトを作成させるためのプロンプト
「大学の授業における出席管理と課題提出の状況を自動集計する Python スクリプトを作成してください。
出席状況と課題提出状況を Excel ファイル(.xlsx)で管理しており、そのデータを使います」
いろいろと試行錯誤とかあったのですが、何回もトライ&エラーを繰り返しました。またPythonの実行などもChatGPTに教えてもらい。最終的には、次のように集計することができました。
参考までにPythonスクリプトも公開しますので、これをChatGPTに読み込ませて、ご自身の環境にあった自動化スクリプトを作成してみてはいかがでしょうか?
import pandas as pd
import glob
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
# 出席データのあるフォルダを指定
file_paths = sorted(glob.glob("./attendance_data/*.xlsx")) # 出席データの格納フォルダをソート
# 出席情報の統合用リスト
attendance_records = []
# 各ファイル(各講義回)を読み込む
for file in file_paths:
data = pd.read_excel(file)
# 必要な列のみ抽出(メール、名前、出席状況)
if "メール" in data.columns and "名前" in data.columns and "講義に出席しましたか?" in data.columns:
attendance = data[['メール', '名前', '講義に出席しましたか?']].copy()
lecture_name = file.split("/")[-1].replace(".xlsx", "") # ".xlsx" を除去
attendance["講義回"] = lecture_name
attendance["出席"] = attendance["講義に出席しましたか?"].apply(lambda x: "○" if x == "はい" else "×")
attendance_records.append(attendance)
# 全データを統合
attendance_data = pd.concat(attendance_records)
# 学生ごとにデータを整理
students = attendance_data[['メール', '名前']].drop_duplicates()
summary = students.copy()
# 各講義回の出席状況を整理
for file in file_paths:
lecture_name = file.split("/")[-1].replace(".xlsx", "") # ".xlsx" を除去
lecture_data = attendance_data[attendance_data["講義回"] == lecture_name]
summary[lecture_name] = summary["メール"].map(lambda x: "○" if x in lecture_data[lecture_data["出席"] == "○"]["メール"].values else "×")
# 欠席回数を計算(まずデータフレームに追加)
summary["欠席回数"] = (summary.iloc[:, 2:] == "×").sum(axis=1)
# 列を第1回から順にソート
lecture_columns = [col for col in summary.columns if "第" in col]
lecture_columns_sorted = sorted(lecture_columns, key=lambda x: int(x.replace("第", "").replace("回", "")))
# 列の順序を再配置(今度は「欠席回数」も含める)
summary = summary[["メール", "名前"] + lecture_columns_sorted + ["欠席回数"]]
# 結果をExcelに保存
output_path = "./attendance_summary.xlsx"
summary.to_excel(output_path, index=False)
# Excelに背景色を設定
def apply_formatting(file_path):
wb = load_workbook(file_path)
ws = wb.active
yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
red_fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid")
pink_fill = PatternFill(start_color="FFC0CB", end_color="FFC0CB", fill_type="solid")
for row in range(2, ws.max_row + 1): # 2行目からデータが始まる
absence_cell = ws[f"R{row}"] # 欠席回数の列(R列)
try:
absence_count = int(absence_cell.value)
if absence_count > 6:
absence_cell.fill = red_fill
elif absence_count > 3:
absence_cell.fill = yellow_fill
except ValueError:
continue
# C列からQ列の「×」をピンクにする
for col in [chr(i) for i in range(67, 84)]: # C=67, Q=83
cell = ws[f"{col}{row}"]
if cell.value == "×":
cell.fill = pink_fill
wb.save(file_path)
# 背景色を適用
apply_formatting(output_path)
print(f"出席状況の集計が完了しました。結果は {output_path} に保存されています。")
今後もどんどん自動化にチャレンジしてみようと思います。