皆さんこんにちは、横浜で清掃業をしているヤスです。
「あの案件、報告書って出したっけ?」
「請求書、フォルダに入れた気がするけど…」
仕事の書類をGoogleドライブで管理していると、こういう「たぶん大丈夫」が積み重なっていきませんか。フォルダを1つずつ開けば確かめられる。でも、それを全案件でやる気力はない。私もそうです。
この記事では、案件ごとのフォルダに必要な書類が揃っているかを自動で判定し、足りないものを色分けで一覧にする仕組みの作り方を紹介します。使ったのはGAS(Google Apps Script=Googleのサービスを自動で動かすための無料の仕組み)だけ。今回はあえてAIを使っていません。
そして途中で、エラーが一切出ないまま、全件が間違った結果になるという、ちょっと背筋が冷える失敗もしました。むしろこの記事で一番伝えたいのはそこです。
※登場する会社名・人名・案件データはすべて架空のダミーです。
完成形:案件ごとの書類の過不足が色で分かる

判定は3色です。
- 赤:不足あり/フォルダなし
- オレンジ:要確認(同じ種類の書類が2つある、など)
- 緑:OK
わざと問題を仕込んだダミー案件6件で試した結果がこちらです。
| 案件番号 | ステータス | 仕込んだ問題 | 判定結果 |
|---|---|---|---|
| 2026-004 | 請求済 | なし(正常) | OK(ファイル5件) |
| 2026-006 | 完了 | 報告書がない | 不足あり(報告書) |
| 2026-012 | 請求済 | 請求書がない | 不足あり(請求書) |
| 2026-013 | 受注済 | 見積書が2つ | 要確認(見積書2件) |
| 2026-011 | 施工中 | ファイル名がバラバラ | 不足あり(依頼書・発注書)、分類不能2件 |
| 2026-016 | 見積中 | フォルダがない | フォルダなし |
6件とも、狙ったとおりに引っかかりました。
ビフォーアフター:[要確認:導入前に確認にかかっていた時間と、導入後の時間]
このシリーズについて
クラウドワークスで見かけた設備工事会社の業務効率化案件がきっかけです。稼働条件が合わず応募は見送りましたが、書かれていた業務を練習として1つずつ作っています。今回は案件の依頼内容5番目「対応漏れ・不足書類の検出」にあたります。
- 前編:請求漏れをスプレッドシートで防ぐ仕組みをGASで作ってみた記録[要確認:URL]
- 後編:メールからの案件情報抽出[要確認:正式タイトルとURL]
今回、AIを使わなかった理由
後編ではAIを使いました。メールの文面は人によってバラバラで、決まった形がないからです。
でも今回やりたいのは「ファイル名に特定の文字が入っているか」を見るだけ。これならGASだけで足ります。
ファイル名がバラバラでも、AIに書類の中身を読ませれば判定はできます。技術的には。それでもやらなかった理由は3つです。
- 費用がかかる
- 書類の中身を外部のAIに送ることになる
- ファイル名を揃えるルールを作るほうが、根本的な解決だから
AIを使うこと自体を目的にしない。これは自分の中で大事にしたい判断でした。
作り方:6つのステップ
ステップ1:既存の「案件管理シート」があるスプレッドシートに追加する
新しいスプレッドシートを作ってはいけません。この仕組みは案件管理シートの「案件番号」と「ステータス」を読みに行くからです。私は前編で作った同じスプレッドシートに、3本目のスクリプト(プログラムの小さな単位)として追加しました。1枚の案件管理シートを、3つの仕組みが共有している形です。
ステップ2:ドライブのフォルダ構成を決める
Googleドライブに「案件書類」フォルダを作り、その直下に案件番号と同じ名前のフォルダを置きます。「直下に」が大事です。理由はつまずきポイントで話します。
案件書類/
├── 2026-004/
├── 2026-006/
├── 2026-011/
└── …
ステップ3:ステータスごとに必要な書類を決める
全案件に同じ書類を求めると、見積中の案件に「報告書がない!」と言い出して、使い物になりません。だから進み具合で変えます。
| ステータス | 必要な書類 |
|---|---|
| 見積中 | 依頼書 |
| 受注済・施工中 | 依頼書、見積書、発注書 |
| 完了 | +報告書 |
| 請求済 | +請求書 |
この表は設備工事会社を想定した、私なりのたたき台です。実際に使うなら、現場の担当者と決めるべき部分だと思います。
ステップ4:ファイル名のキーワードで書類の種類を判定する
使うキーワードは5つだけです。
依頼 / 見積 / 発注 / 報告 / 請求
どれも含まれないファイルは「分類不能」として別枠に出します。この枠を作らないと、名前がバラバラなファイルが全部「なし」扱いになり、誤検出だらけになるからです。
ステップ5:重複は「判断しない」
同じ種類の書類が2つ以上あったら、「重複の可能性」として知らせるだけにしました。どちらが最新かはAIにも判断できません。そこは人が見ます。
ステップ6:ダミーデータでテストする
前編で作った架空の案件管理表を使い、ドライブに案件フォルダを5つ作って、わざと問題を仕込みました(完成形の表のとおりです)。
後編では「添付ファイルを試す材料を用意し忘れる」という反省がありました。なので今回は、試したい機能の数だけ材料を用意することを意識しています。
つまずきポイント:3回止まりました
① また新しいスプレッドシートに作ってしまった
実行した瞬間、「案件管理シートが見つかりません」。
……前編でも、シート名が「シート1」のままで同じエラーを出しています。同じところで2回つまずきました。ステップ1をわざわざ一番上に書いたのは、このためです。
② zipを解凍したらフォルダ名が文字化け
ダミー書類をzip(複数のファイルを1つにまとめた圧縮ファイル)で受け取って解凍したら、フォルダ名が「譯井サカ譜ヶ髪」のような謎の文字に。Windowsの標準の解凍機能と、UTF-8(文字をデータにするときのルールの一種)の相性の問題でした。日本語のファイル名を扱うときの落とし穴です。
③ エラーなしで、全件「フォルダなし」(一番の学び)
これが本題です。
実行すると、6件すべてが「フォルダなし」。エラーは一切出ていません。仕組みとしては、何事もなく正常に終わっています。
原因は、解凍してアップロードする途中で、「案件書類」の中にもう一つ「案件書類」フォルダができていたことでした。
案件書類/
└── 案件書類/ ← 1階層ずれていた
├── 2026-004/
└── …
コードは「案件書類」の直下で案件番号のフォルダを探します。1階層深いところにあると、見つけられません。
怖いのはここからです。「フォルダが見つかりません」は、エラーではなく正常な判定結果でもあるんです。2026-016のように本当にフォルダがない場合も、同じ結果になります。結果の表だけを見ても、「本当にない」のか「探す場所が間違っている」のか、区別がつきません。
気づけたのは、ログ(プログラムが動いた記録)に**「案件フォルダ数:1」**と出していたからでした。
5つあるはずなのに、1つしか見えていない。この数字で「あ、おかしい」と分かりました。
教訓:エラーで止まってくれるほうが、まだ親切。静かに間違った結果を返すほうがずっと怖い。判定の仕組みには「何件見つけたか」を必ずログに残す。
一番うれしかった判定:2026-011

ファイル名がバラバラな案件です。
スキャン20260915.pdf
佐藤様_御見積.pdf
IMG_4821.pdf
「佐藤様_御見積.pdf」はルールどおりの名前ではありません。でも「見積」の2文字が入っていたので、ちゃんと見積書として拾えました。
一方、「スキャン20260915.pdf」と「IMG_4821.pdf」は拾えず、分類不能に。これは正しい動作です。名前から分からないものは、人が中身を見るしかありません。
ここで思ったのは、命名規則をガチガチに揃えなくても、ファイル名に1語入れる習慣さえあれば動くということ。「揃える」より「1語入れる」のほうが、現場ではずっと現実的です。
清掃業ならこう使える
この仕組みも前編と同じ、「一覧を読む → 条件で拾う → 知らせる」の型です。変わったのは、判定の材料がシートの中だけでなく、ドライブのファイルになったこと。
私の本業に置き換えるなら、定期清掃のお客様ごとに「契約書・作業報告書・請求書」が揃っているかのチェックにそのまま使えそうです。
まとめ
- 既存の案件管理シートに追加する
- 「案件書類」の直下に案件番号フォルダを置く
- ステータスごとに必要書類を決める
- 5つのキーワードで判定し、分類不能は別枠に
- 重複は判断せず、人に知らせる
- 問題を仕込んだダミーでテストし、「見つけた件数」をログに残す
いきなり仕組みを作らなくて大丈夫です。最初の一歩は、今ある書類フォルダのファイル名に「見積」「請求」のような1語を足してみること。 それだけで、あとから自動化できる土台ができます。
良い練習になり結構便利な物が作れたと思います。GASだけでここまでできるとは知らなかったです。
前回作った物はチャットGPTやLINEと連携できたりとビックリでした。
次回予告
次回はまだ検討中なので何にするかはお楽しみで。


コメント