PDF ファイル名 統一をAIで自動化|「スキャン20260915.pdf」が「2026-011_見積書.pdf」に変わった

「PDFファイル名統一をAIで自動化|『スキャン20260915.pdf』が『2026-011_見積書.pdf』に変わった」「第190話」という文字と、作業着姿の男性が整理されたファイル画面のパソコンを見て微笑んでいるイラスト。 Uncategorized

皆さんこんにちは、横浜で清掃業をしているヤスです。

スキャナーやスマホで取り込んだPDFが、「スキャン20260915.pdf」「IMG_4821.pdf」といった名前でフォルダにたまっていく。どの案件の何の書類なのかは、1つずつ開かないと分からない。開いて中身を確かめ、名前を付け直して、案件のフォルダへ移す。

このシリーズの第3話では、案件フォルダに足りない書類を見つける仕組みを作りました。そのとき、名前から中身が分からないファイルは「分類不能」として弾くしかありませんでした。

今回は、弾かれたのと同じ名前のPDFを、中身を読んで正しい名前に変え、案件フォルダへ振り分けられました。振り分けたあとで第3話の仕組みを動かし直すと、「分類不能」が2件から0件に変わりました。いちばん大事にしたのは「判定できないものは動かさない」ことです。

※この記事に登場する会社名・人名・金額は、すべて練習用に作った架空のダミーです。実在のお客様や実際の取引の話ではありません。

完成形:中身を読んで、名前を変えて、案件フォルダへ移す

「未整理」フォルダにPDFを置く
  ↓
PDFの中身をテキストにする(第5話と同じ方法)
  ↓
AIが判定する(案件番号はどれか/書類の種類は何か)
  ↓
「2026-018_見積書.pdf」の形に名前を変える
  ↓
該当する案件フォルダへ移動する
  ↓
結果を「ファイル整理」シートに記録する

使ったのは、GAS(Googleのサービスを自動で動かすためのプログラム)、Drive API(Googleドライブのファイルをプログラムから扱うための窓口)、OpenAI API(プログラムからAIを呼び出すための窓口)、Googleスプレッドシート、Googleドライブです。

ダミーのPDF6件を試した結果は、振り分け4件、未整理のまま2件でした。

見積_山田様_最終版.pdf → 2026-013/2026-013_見積書.pdf
20260925_報告.pdf      → 2026-018/2026-018_報告書.pdf
スキャン20260915.pdf   → 2026-011/2026-011_見積書.pdf
IMG_4821.pdf           → 2026-011/2026-011_発注書.pdf

請求書.pdf             → 案件番号が不明(未整理のまま)
2026-018_見積書.pdf    → 重複の可能性(未整理のまま)

矢印の左が元の名前、右が移動先のフォルダと新しい名前です。

Googleスプレッドシートの「日報・対応待ち一覧」画面。「元のファイル名」である「スキャン20260915.pdf」などが判定され、「2026-011_見積書」などの「新しいファイル名」に自動変更された履歴が一覧表示されている。重複ファイルや案件番号不明の案件は黄色でハイライトされ、「未整理のまま:2件」とエラー結果も分かりやすく記録されている様子。

きっかけはこれまでと同じ、クラウドワークスで見た設備工事会社の募集です。応募は見送りましたが、書かれていた業務を練習教材として1つずつ作っています。今回は「ファイル管理」の章(保存先の判定、書類の自動分類、ファイル名の統一)にあたります。

第3話の宿題:「名前を揃える側」を作る

第3話の不足書類チェックは、ファイル名にキーワードが入っているかどうかで書類を見分ける仕組みでした。そのとき、私はこう書いています。

ファイル名にキーワードが入っていれば拾える。入っていなければ人が目で見るしかない。
ファイル名を揃えるルールを作るほうが根本的な解決だ。

第3話の仕組みが「検出する側」なら、今回作ったのは、その前にファイル名を揃える「整える側」です。第3話はファイル名だけを見ればよかったのでGASで足りましたが、今回は中身を読むのでAIを使っています。

作り方①:判定できないものは、動かさない

ここを今回いちばん大事にしました。

案件番号が読み取れない。書類の種類が分からない。該当する案件フォルダがない。こういうファイルを推測で動かすと、書類が行方不明になります。

そこで、判定できなかったファイルは「未整理」フォルダに残したまま、シートに「判定できなかった理由」を記録するだけにしました。第3話の「分類不能」、第4話の「該当なし」と同じ考え方です。

作り方②:同じ名前のファイルがあれば、移動しない

第4話で、案件番号が重複して前の見積書PDFを上書きで消してしまった失敗があります。同じことを繰り返さないよう、今回は上書きを一切しません。移動先に同じ名前のファイルがあれば、移動を中止します。

旧版かもしれないし、単なる重複かもしれない。どちらかは人が見るところです。募集にも「旧版ファイルの検出」とあったので、検出だけして判断は人に回しました。

作り方③:AIへの指示は3つだけ

AIに渡した指示は、次の3つです。

  • 案件番号は「2026-018」のような形。なければ null(値なし)。日付や電話番号を案件番号にしない
  • 書類の種類は、依頼書・見積書・発注書・報告書・請求書の5つから選ぶ。判断できなければ null
  • 推測で埋めない。null にした場合は理由を書く

作り方④:わざと困る名前のPDFを6件用意する

「未整理」フォルダに、わざと困る名前のダミーPDFを置きました。

ファイル名中身狙い
スキャン20260915.pdf2026-011の見積書名前から何も分からない
IMG_4821.pdf2026-011の発注書同上
見積_山田様_最終版.pdf2026-013の見積書名前はあるが規則が違う
20260925_報告.pdf2026-018の報告書名前に案件番号がない
請求書.pdf案件番号の記載なし判定できない
2026-018_見積書.pdf既存と同じ名前重複の検出

上の2つは、第3話で「分類不能」として弾かれたのと同じファイル名です。あのとき拾えなかったものを、今回は拾えるかを試しました。

請求書.pdf は宛先が「お客様各位」で、案件番号がありません。ただし日付「2026/09/25」と電話番号「045-000-0000」は書いてあります。これらを案件番号として拾わないかのテストです。

結果:「分かるところだけ答える」ができていた

名前から何も分からなかった2件も、中身を読んで2026-011の見積書と発注書に振り分けられました。特に良かったのが 請求書.pdf です。AIの返答はこうでした。

{"caseNo":null,"docType":"請求書","reason":"案件番号の形式に合う番号が書類内に記載されていないため"}

JSON(データを決まった形で書き表す書き方)で返ってきています。caseNo が案件番号、docType が書類の種類、reason が理由です。

日付も電話番号も書いてあるのに、どちらも案件番号として拾いませんでした。書類の種類は「請求書」と正しく判定しつつ、案件番号だけを null にしています。片方だけ分かる状態を、そのまま返してくれました。

Googleドライブの画面。GASとAIによる自動振り分け処理で、案件番号が不明だったり重複していたりしたファイル(「請求書.pdf」など)が、「未整理」という専用フォルダに安全に隔離・保管されている様子。

2026-018_見積書.pdf は、移動先に同じ名前があったので「重複の可能性」として残りました。

振り分けたファイルは、シートの備考欄に「『スキャン20260915.pdf』から名前を変えました」と元の名前を残しています。後から追跡できるようにするためです。

[スクショ:実行ログ(振り分け4件、未整理のまま2件)]

第3話の仕組みを、もう一度動かしてみた

振り分けが終わったあと、第3話の不足書類チェックを実行し直しました。すると、2026-011の判定が変わりました。

第3話のとき今回
不足依頼書、発注書依頼書
分類不能2件0件

分類不能が消え、発注書が正しく認識されました。第3話で「人が目で見るしかない」と書いた状態が、解消されたことになります。

第3話の仕組みは、何も書き換えていません。変わったのは、フォルダの中のファイル名だけです。

「検出する側」だけでは、名前がバラバラなファイルを前に止まってしまいました。「整える側」だけでは、何が足りないのかまでは分かりません。2つがそろって、片方の弱点をもう片方が埋める形になりました。

順番が逆なのも面白いところです。先に「検出する側」を作ったから弱点が分かり、後から「整える側」を作りました。

つまずき①:前回のダミーが、今回のテストの邪魔をした

実は、1回目はこの結果になりませんでした。

振り分け自体は成功しているのに、第3話のチェックを動かすと、2026-011はまだ「分類不能」のまま。しかも見積書が2件あるとして「重複の可能性」まで出ています。

原因は、第3話で2026-011フォルダに入れた「スキャン20260915.pdf」「IMG_4821.pdf」が、中身のないダミーのまま残っていたことでした。今回は同じ名前のPDFを未整理フォルダに用意していたので、振り分けは成功したのに、古いほうが残って分類不能を出し続けていました。

見積書の重複は、第3話で入れた「佐藤様_御見積.pdf」が残っていたせいでした。新しく入った「2026-011_見積書.pdf」と合わせて、見積書が2件になっていたわけです。

ダミーの名前を第3話と揃えたのは自分です。完全に自分のミスでした。古い3件を削除したら、想定どおりの結果になりました。

テスト用のデータが、次のテストの邪魔をすることがある。 練習を重ねるほど、前回までのダミーが積み上がっていきます。

つまずき②:2026-013の見積書が3件になった

2026-013のフォルダには、元から見積書のv2と最終版がありました。そこに今回 2026-013_見積書.pdf が加わり、同じ種類の書類が3つ並びました。

同じ名前ではないので、移動は止まりません。ただ、これは正しい動作です。第3話のチェックの「重複の可能性」がちゃんと働いて、要確認として出てきました。

安全上の注意:最初は控えのあるファイルで試す

この仕組みは、実際にファイルを移動し、名前も変えます。すでにあるファイルそのものに手を加える仕組みです。

最初は必ず、控えのあるファイル(コピーしたものなど)で試してください。移動先を間違えたり、元のファイルを見失ったりしても、控えがあれば戻せます。私も今回は、すべて練習用のダミーPDFで試しています。

まとめ:判定できないものは動かさない

今回の手順をまとめます。

  1. 「未整理」フォルダのPDFを、中身ごとテキストにする
  2. AIには案件番号と書類の種類だけを答えさせる。分からなければ null と理由
  3. 両方そろったものだけ、「案件番号_書類の種類.pdf」に名前を変えて移動する
  4. 判定できないもの、同じ名前があるものは動かさず、理由をシートに残す
  5. 元の名前を備考欄に記録して、あとから追えるようにする

最初の一歩としては、自分のパソコンやドライブで、名前を見ても中身が分からないファイルを3つ探してみることをおすすめします。それを開かずに、どの案件の何の書類か言えるかどうか。言えなければ、それが「整える側」の出番です。

私の本業の清掃業に置き換えるなら、現場写真や作業報告書を、現場ごとのフォルダに振り分けるのに使えそうだと考えています。地味に便利な機能ですね!

次に何を作るかは、まだ決めていません。募集に書かれていた業務のうち、残りは「日程調整」です。仕組みが増えて毎朝届くメールが3通になったので、これを1通にまとめる回も候補にしています。

関連記事

このシリーズの過去の記事です。

コメント

タイトルとURLをコピーしました