Smart AI Life Knowledge Base

書類自動化

生成AI、ローカルLLM、スマートホーム自動化で日々の暮らしをゆたかに整える実践ドキュメント。

  1. Smart AI Life
  2. 記事一覧
  3. 書類自動化

「投げて放置」で勝手に片付く!Automations×YomiTokuによるGoogleドライブ自動OCR仕分け術

Inboxに放り込んだPDF・領収書を日本語特化OCRが解析。命名規則に従ってリネーム&カテゴリ別フォルダ移動まで完全無人化する手順。

🚀 生成AI×リスキリングSponsored / PR
🤖 Antigravity Automations × 日本語Document AI

「投げて放置」で勝手に片付く!
Automationsを使った自動OCR→フォルダ仕分けの仕組みと全貌

〜必要な機能、命名規則と仕分け仕様、Sidecar定期実行手順から本音の運用感想まで徹底解説〜

ぽトル アイコン
POTTLE
筆者:ぽトル(Pottle)| 省エネ脱力パンダ
「人間が動くな、機械に勝手に安く・快適にさせろ」がモットーの脱力パンダ。給与明細やカード明細、医療レポートを未整理フォルダへ放り投げて、AIが勝手に仕分けてくれる生活を満喫中🐼💤

どうも、ぽトル(Pottle)です。

前回は日本語特化Document AI「YomiToku」の基本機能を紹介しましたが、今回はその一歩先です。
「Antigravity Automations(定期実行サイドカー)」を組み合わせて、Googleドライブの未整理フォルダに入った書類を全自動で解析・命名・仕分け・クリーンアップする仕組みを構築しました!

🎯 この仕組みで実現したこと:
  • スマホやPCから「90_未整理ファイル」フォルダに適当に放り込むだけ
  • 毎日正午(cronスケジュール)に自律エージェントが自動起動
  • PDFの1ページ目を日本語OCR解析し、日付と書類種別(給与、賞与、医療、年金、カード明細など)を特定
  • 「202610_給与明細_本人.pdf」のように分かりやすい名前にリネーム
  • 「01_家計」「02_医療」「04_保険税金」などの所定フォルダへ自動移動し、空の元フォルダはゴミ箱へ撤去

本記事では、この自動化を実現するために「どんな機能が必要だったのか」「どういう判定仕様にしたのか」「具体的な導入・適用手順」、そして「実際に毎日動かしてみて感じた本音の感想」を包み隠さずまとめました。


1. 全体の仕組み(アーキテクチャ)

全体構成は、「クラウドストレージ(Google Drive)」「定期自律エージェント(Antigravity Automations)」「日本語解析エンジン(YomiToku)」「操作実行スクリプト(sorter.py)」の4層で連携しています。

1
トリガー:Antigravity Automations(Sidecar Cron)

CRON_TZ=Asia/Tokyo 0 12 * * *(毎日正午12時)に自動起動。バックグラウンドで新しいエージェントセッションを開始し、タスクを指示します。

2
検知・取得:Google Drive API(mcp-google-multi経由)

「90_未整理ファイル」フォルダを走査。投入されたPDFファイルや、ZIP解凍後の一時フォルダ内の全ファイルをリストアップし、ローカル作業領域に一時ダウンロードします。

3
解析:YomiToku 日本語Document AI

PDFの1ページ目を画像化し、文字認識・表構造認識を実行。Markdown形式のテキストに変換して、文書内に含まれる「年月」「組織名」「書類タイトル」「個人名」を高速抽出します。

4
リネーム・仕分け・クリーンアップ:Drive API

ルールエンジンで生成した新ファイル名へ更新し、該当する家庭機能フォルダへ移動(親フォルダ付け替え)。空になった一時フォルダは自動でゴミ箱へ移動して整理を完了します。


2. 自動化に必要だった5つの重要機能

単なる「PDF名のリネーム」ではなく、家庭で破綻なく運用するためには以下の5つの機能が不可欠でした。

① 階層型スキャン&一時フォルダ回収機能

ユーザーはファイルを直接ドライブ直下に置くだけでなく、「ZIPを展開したフォルダごと放り込む」ケースが多々あります。直下のファイルだけでなく、子フォルダの中身も再帰的に検知し、処理後に空フォルダをゴミ箱へ片付ける機能が必要です。

② 日本の帳票に強いローカルOCR(YomiToku)

海外製OCRでは、給与明細の細かい表組みや、縦書きの年金通知書、傾いた領収書で文字化けが発生します。ローカルで動作するYomiTokuを使うことで、API費用をかけずに高精度な日本語テキストが得られます。

③ 日付の正規化抽出(西暦・和暦・短縮表記対応)

書類によって「2026年4月」「2026-04-15」「2604」「2411」など日付の書き方がバラバラです。正規表現を用いて一律YYYYMMまたはYYYYMMDDの命名フォーマットに揃えます。

④ ドメイン分類ルール(人物判定・書類種別判定)

同じ給与明細でも「夫」と「妻」で保存先フォルダが分かれます。本文中の氏名やキーワードから「誰の給与か」「通常給与か賞与か」を識別し、的確なサブフォルダIDへ振り分けます。

⑤ 最小権限設定(Sidecar permissions)

バックグラウンドで無人実行されるため、アクセス権限は必要最小限のコマンド(python3, node)とトークン・スクリプトパスに限定し、安全性を確保します。


3. 仕分けルールと命名規則の仕様

我が家の生活・家計構造に基づき、以下のようにルールを設計・実装しています。

書類カテゴリ 判定キーワード(OCR本文) 自動生成ファイル名 振り分け先フォルダ
給与明細(夫/妻) 給与明細, 賃金通知, 氏名 {日付}_給与明細_{氏名}.pdf 01_家計 / 給与・賞与明細 / 夫・妻
賞与明細 賞与, shoyo, 期末手当 {日付}_賞与明細.pdf 01_家計 / 給与・賞与明細 / 賞与
カード請求明細 請求書, 三井住友カード, 利用明細 {日付}_三井住友カード_利用代金請求明細書.pdf 01_家計 / 公的証明・請求明細
医療・健康レポート Withings, 心拍数, 診断書, 処方箋 {日付}_健康測定レポート.pdf 02_医療・健康 / 医療・健康
年金関連通知書 年金振込通知書, 支給額変更 {日付}_年金振込通知書.pdf 04_保険税金 / 年金・健康保険
確定申告・源泉徴収 確定申告書, 源泉徴収票 {日付}_源泉徴収票.pdf 04_保険税金 / 源泉徴収票・確定申告

4. 実際の適用手順(セットアップの流れ)

ステップ①:仕分け処理スクリプト(sorter.py)の準備

YomiTokuでPDFの1ページ目を読み、テキストを正規表現で判定してDrive上の親フォルダを付け替えるスクリプトです。外部APIを使わないため完全無料で運用できます。

環境構築手順:

PYTHON
# Python仮想環境の準備
python3 -m venv ~/.venv/drive-sorter
source ~/.venv/drive-sorter/bin/activate

必要なパッケージのインストール

pip install yomitoku google-api-python-client google-auth-oauthlib pypdf

仕分けルール判定スクリプトのコアコード(sorter.py):

PYTHON
import re
from datetime import datetime

def extract_date_from_text(text: str) -> str:
    """テキストから年月(YYYYMM)を抽出して正規化"""
    m = re.search(r'(20\d{2})[\s年/\-\.](\d{1,2})', text)
    if m:
        year, month = m.group(1), int(m.group(2))
        return f"{year}{month:02d}"
    return datetime.now().strftime("%Y%m")

def classify_document(ocr_text: str, filename: str) -> dict:
    """OCRテキストから書類種別と保存先を自動判定"""
    text = (filename + " " + ocr_text).lower()
    date_str = extract_date_from_text(ocr_text)

    # 給与・賞与明細
    if any(k in text for k in ["給与明細", "賃金明細"]):
        if any(k in text for k in ["賞与", "期末手当"]):
            return {"category": "bonus", "new_name": f"{date_str}_賞与明細.pdf"}
        return {"category": "salary", "new_name": f"{date_str}_給与明細_本人.pdf"}

    # クレジットカード請求書
    if any(k in text for k in ["カード", "ご利用代金明細"]):
        return {"category": "card_bill", "new_name": f"{date_str}_カード利用明細書.pdf"}

    return {"category": "unclassified", "new_name": f"{date_str}_{filename}"}
  
📦 GitHubで全コード公開中
Drive自動連携、階層スキャン、空フォルダ回収を含む完全なsorter.pyはGitHubで公開しています。
GitHubを見る →

ステップ②:Automations(Sidecar)の設定ファイルを作成

~/.gemini/config/sidecars/drive-unorganized-sorter/sidecar.json を配置します。

JSON
{
  "builtin": "schedule",
  "args": [
    "CRON_TZ=Asia/Tokyo 0 12 * * *",
    "agentapi",
    "new-conversation",
    "--",
    "Google Driveの「90_未整理ファイル」に新規格納されたファイルを検知し、YomiTokuによるOCR解析・リネーム・自動仕分けを実行してください。"
  ],
  "restart_policy": "always",
  "display_name": "Google Drive 未整理ファイル自動OCR・リネーム・仕分け",
  "agent_permissions": {
    "access_grants": [
      "command(python3)",
      "command(node)",
      "read_file(...)",
      "write_file(...)"
    ]
  }
}

ステップ③:動作テストと権限確認

手動で未整理フォルダに「給与明細」や「健康レポート」のPDFを投入し、スクリプトを単体実行して期待通りにフォルダ移動・リネームされるかを確認します。確認後はcronスケジュールにより毎日自動実行されます。


5. 🐼 ぽトルの本音レビュー:運用して感じたリアルなメリットと注意点

✨ ここが最高!良かったところ

  • 「書類をどこに保存するか」悩む脳のメモリがゼロになった: とりあえず未整理フォルダに放り込めば、正午に全部きれいに片付いている快感。
  • 「あの書類どこだっけ?」の検索が爆速に: 「202610_給与明細_本人.pdf」のように命名規則が完全に揃うため、検索一発でヒットする。
  • クラウドAIを使わないので完全無料&セキュア: 個人情報満載の給与明細や医療データを外部APIに送らず、ローカルのYomiTokuで処理できる安心感。

⚠️ 運用上の注意点・ハマりどころ

  • PDFの全ページを読むと重い: 10ページのPDFを丸ごとOCRすると時間がかかるため、「1ページ目だけを解析して書類特定する」割り切りが高速化の鍵。
  • Google Driveのトークン有効期限: 定期実行がエラーで止まらないよう、認証トークンの自動更新管理が必要。
  • 未知の書類はフォールバック先へ: ルールに該当しない書類を無理にリネームせず、「01_家計/請求明細」などの共通置き場に残す設計が安全。

🐼 ぽトルのまとめ:暮らしの自動化は「小さな雑務の消滅」から始まる

「書類に日付を打って、フォルダを開いてドラッグする」。1回あたりは数十秒の作業ですが、毎月・毎年積み重なると巨大な負担になります。
AntigravityのAutomationsとYomiTokuを組み合わせることで、こうした日常のノイズが完全に自動消滅しました。
人間はもっとだらだらと、楽しくクリエイティブなことに時間を使っていきましょう🐼💤

🚀 生成AI×リスキリングSponsored / PR