Python×GASで事務作業を全自動化——ルーティン業務から完全解放された実録
勤怠集計・経費申請確認・備品発注アラートなど、総務部の反復作業をPython + Google Apps Scriptで全自動化。年間数百時間を取り戻した仕組みを全公開。
「ルーティン業務地獄」からの脱出
限られた人数で多くの社員を支える総務の現場では、毎月同じ作業を繰り返す「ルーティン業務」が膨大です。
- 月末:勤怠データの集計と確認
- 月初:経費精算の確認とリマインド送信
- 週次:備品在庫のチェックと発注判断
- 随時:各種申請フローの進捗確認
これらをすべて**「人間が毎回やる」前提で設計されていた**ことが、本来取り組むべき企画や改善業務を圧迫する最大の原因でした。
自動化の全体マップ
構築した自動化システムの全体像です。
[データソース]
スプレッドシート / Googleフォーム / メール
↓ GAS(データ取得・加工のトリガー)
[処理エンジン]
Python スクリプト(複雑な計算・判断ロジック)
Gemini API(テキスト解析・判断支援)
↓
[アウトプット]
Slack通知 / Gmailによる自動送信 / スプレッドシート更新
自動化①:勤怠集計レポート
所要時間の変化:月数時間 → 0分(完全自動)
月末になると自動でトリガーが走り、以下を実行します。
- 勤怠管理スプレッドシートからデータ取得(GAS)
- Pythonで残業時間・有休残日数・月次集計を計算
- 異常値(残業時間の超過・有休消化率の停滞等)を検出
- 部署別レポートをPDFで自動生成
- 各部署長にメールで自動送信
# 勤怠異常値検出の一部(Claude Codeが生成)
def detect_overtime_anomaly(records: list[dict]) -> list[dict]:
alerts = []
for record in records:
overtime_hours = record.get("overtime_hours", 0)
if overtime_hours >= 80:
alerts.append({
"employee_id": record["id"],
"name": record["name"],
"overtime": overtime_hours,
"level": "critical" if overtime_hours >= 100 else "warning"
})
return alerts
自動化②:経費精算リマインド
所要時間の変化:週数時間 → 0分
Googleフォームで受け付けた経費精算申請を監視し、承認が一定期間滞っている場合は承認者にSlack通知を自動送信します。
// GASのトリガー関数(毎朝実行)
function checkPendingExpenses() {
const sheet = SpreadsheetApp.openById(SHEET_ID).getActiveSheet();
const today = new Date();
const data = sheet.getDataRange().getValues();
data.forEach((row, index) => {
if (index === 0) return; // ヘッダースキップ
const submittedDate = new Date(row[1]);
const status = row[4];
const daysPending = Math.floor((today - submittedDate) / 86400000);
if (status === "pending" && daysPending >= 3) {
sendSlackReminder(row[3], row[0], daysPending); // 承認者ID・申請者名・日数
}
});
}
自動化③:備品発注アラート
所要時間の変化:週1時間 → 0分
在庫管理スプレッドシートの数量が閾値を下回ると、Amazonリンク付きで発注担当者にSlack通知が自動送信されます。Gemini APIが各備品の「消費ペース」を学習し、在庫がゼロになる日付を予測して事前アラートを送る機能も運用しています。
全体の成果
| 業務 | 月間工数(以前) | 月間工数(自動化後) |
|---|---|---|
| 勤怠集計 | 4時間 | 0時間 |
| 経費精算管理 | 8時間 | 0.5時間(確認のみ) |
| 備品在庫管理 | 4時間 | 0時間 |
| 各種申請進捗確認 | 6時間 | 1時間 |
| 月間合計 | 22時間 | 1.5時間 |
年間換算で約240時間の削減を実現。少人数の総務チームに、実質1名分近い「思考のための余力」が生まれました。
開発の舞台裏:泥臭いGASから「Claude Code」への進化
ここからは少し裏話になりますが、このシステムは一朝一夕でできたものではありません。
最初はプログラミングの知識もほぼゼロの状態から、ChatGPTに1行ずつコードを聞きながら泥臭くGASを組み上げるところからスタートしました。WordPressのPHPコードの修正も同様で、「このエラーは何?」「直したら別のエラーが出た」を何十回と繰り返すのが日常でした。1つの機能を追加するのに、AIとのやり取りが50回を超えることもざらでした。
2025年5月ごろからはWebアプリ開発にも着手しましたが、ここでも同じ泥臭さ。動いたと思ったら別の場所が壊れる、を繰り返しながらゼロから組み上げていきました。
転換点は2025年10月ごろのCodex導入です。コード全体の文脈を踏まえた提案が増え、「1行ずつ聞く」スタイルから少し前進できました。それでも複雑な処理では手戻りが多く、完成までの道のりは決して短くありませんでした。
そして2025年末のAntigravity、さらに最近のClaude Codeの活用で、状況が一変しました。
これまで継ぎはぎで作ってきたGAS主体のシステム、WordPressサイト、アプリ——これらすべてをClaude Codeで一気にアップデート。プロジェクト全体の構造を把握した上でコードの修正・改善を提案してくれるため、かつての「ChatGPTとの1問1答」とは比較にならないスピードで、品質と堅牢性を引き上げることができました。
これから始める人には、同じ遠回りをしてほしくありません。 最初からClaude CodeやAntigravityを使えば、あの泥臭い何十回ものやり取りを経ずに、同じゴールに辿り着けます。
まとめ
「プログラミングができない」は、もはや自動化の壁ではありません。 重要なのは、現場の痛みを理解し、業務の流れを言語化できることです。 「何を・いつ・どうやって・誰に渡すか」を明確に定義できれば、あとはAIがあなたの右腕となって、複雑なコードへと翻訳してくれます。まずは明日、自分が手作業で行う予定の「小さな通知」から自動化を始めてみませんか?