皆さんこんにちは、横浜で清掃業をしているヤスです。
前回は請求漏れをスプレッドシートで防ぐ仕組みをGASで作ってみた記録の記事でしたね。その最後で「次回はメールからの案件情報抽出アプリを作ります」と予告していました。今回はその続編です。
お客様からの依頼メールを開いて、読んで、案件表に手で写す。返信を書いて、添付ファイルを保存する。小さな会社ほど、この作業に毎日時間を取られているのではないでしょうか。
「AIに任せればいいと聞くけれど、間違えたら怖い」
「そもそもプログラムなんて書けない」
私も同じ気持ちでした。
この記事では、メールから案件情報をAIで抜き出し、人が「承認」を選んだものだけが案件表に登録される仕組みの作り方を紹介します。そして作ってみて分かった、AIにどこまで任せていいかの線引きについてお伝えします。
なお、この記事に出てくる会社名・人名・住所・案件データは、すべて私が作った架空のダミーです。
完成するとこうなります

完成した仕組みの流れはこうなります。
- メールが届く
- 5〜10分ごとに自動で、AIが案件情報を抜き出す
- お客様への返信を「下書き」で作成する(送信はしない)
- 添付ファイルをGoogleドライブに保存する
- 緊急の依頼ならLINEに通知する - 人が確認して「承認」を選ぶ
- その瞬間に、案件管理シートへ自動で登録・更新される
- 毎朝、対応待ち一覧が担当者別にメールで届く(前回作ったもの)
人がやるのは「確認して承認を選ぶ」だけです。読む・写す・返信を書く・添付を保存する、の4つが自動になりました。
[スクショ:LINEに水漏れの緊急通知が届いた画面]
きっかけ
前回と同じく、クラウドワークスで見た設備工事会社の業務効率化案件がきっかけです。
稼働時間が合わず応募は見送りましたが、案件に書かれていた業務を練習として1つずつ作っています。今回作ったのは、案件の「最初にお願いしたいこと」の3番目「メールからの案件情報抽出」です。作っていくうちに、4番目「メール文面の下書き作成」、7番目「担当者の承認後に管理表を更新する仕組み」まで一緒に作ることになりました。
前回の対応待ち一覧は、GASだけで作れました。でも今回はAIが必要でした。メールの文面は人によってバラバラで、決まった形がないため、GASのルールだけでは読み取れないからです。
使ったもの
- GAS(Google Apps Script=Googleのサービスを自動で動かせる無料の機能)
- OpenAI API(API=アプリ同士をつなぐ窓口。ここではAIに文章を渡して答えをもらう窓口)
- Gmail/Googleスプレッドシート/Googleドライブ
- LINE Messaging API(LINEに通知を送るための窓口)
作り方①:シートを2枚に分ける
「抽出結果(確認待ち)」と「案件管理」の2枚を用意します。
AIの結果は、いきなり本番の案件管理表に書き込みません。まず確認待ちシートに出して、人が「承認」したものだけを案件管理表に移します。
なぜか:AIは間違えることがあるからです。日付の読み間違いや顧客名の取り違えがあっても、この形なら本番の管理表が汚れません。この判断がどれだけ重要だったかは、後半の「一番の発見」で詳しく書きます。
[スクショ:確認待ちシートの列見出し]
作り方②:Gmailにラベルを2つ作る
「案件依頼」と「処理済み」の2つを作ります。AIに送るのは「案件依頼」ラベルが付いたメールだけ。処理が終わったら「処理済み」ラベルを付けます。
なぜか:受信トレイを丸ごとAIに読ませると、見せなくていい情報まで外部に送ることになり、費用もかさみます。「処理済み」ラベルは、同じメールを二重に登録しないための目印です。
作り方③:APIキーをスクリプトプロパティに保管する
APIキー(AIを使うための合言葉)は、コードに直接書きません。GASの「スクリプトプロパティ」という、鍵付きの保管庫のような場所に入れます。
なぜか:コードを人に見せたり、GitHubに載せたりしたときに、キーが漏れないようにするためです。

作り方④:AIへの指示文にルールを書く
ここが一番時間のかかったところです。テストを繰り返して、最終的に入れたルールはこうなりました。
- メールを「新規依頼」「既存案件の変更」「案件以外」の3つに分類する
- メールに書かれていないことは推測で埋めない
- 情報がない項目は、空欄にせず必ず「不明」と書く(関連案件番号だけは、該当がなければ空欄)
- 希望日は日付を1つだけ書く。決まらなければ「不明」にして、候補は要確認事項に回す
- 日程変更の場合は、変更後の日付を希望日に、変更前の日付を要確認事項に書く
- 見積もりに触れていなければ「不明」。推測で「なし」にしない
このルールは最初からこう書けたわけではありません。すべて、テストで失敗してから追加したものです。次の章でその過程を書きます。

テスト用のダミーメールを8通作った
実際のお客様のメールは使えないので、AIが間違えやすいポイントをわざと仕込んだダミーメールを8通作り、自分宛てに送りました。
| # | 内容 | 試したいこと |
|---|---|---|
| ① | 管理会社からの整った依頼(箇条書き) | 全項目がそろうか(基本形) |
| ② | 個人客「来週の水曜か木曜あたり」 | あいまいな日付をどう扱うか、住所なしを「不明」にできるか |
| ③ | 情報がほとんどない依頼 | 住所や日付を勝手に埋めないか |
| ④ | 1通に2物件の依頼 | 2件に分けられるか |
| ⑤ | 既存案件の日程変更(案件番号つき) | 新規と区別できるか |
| ⑥ | 支払い完了の連絡 | 「案件ではない」と判断できるか |
| ⑦ | 至急の水漏れ | 緊急度を「高」にできるか |
| ⑧ | 署名や過去の引用が長いメール | 署名の住所を作業場所と取り違えないか |
素直なメールだけでテストしても、AIがどこで間違えるかは分かりません。罠を仕込むのが大事だと思いました。
1回目の結果:思った以上に読めた
8通を処理して、9行登録されました。④が2行に分かれたので、8通なのに9行です。
- ④ 2件の依頼 → 住所・物件名も別々に、きちんと2行に分かれた
- ⑤ 日程変更 → 「既存案件の変更」と判定し、関連案件番号「2026-011」も拾えた
- ⑥ 支払い連絡 → 「案件以外」と判定した
- ⑦ 水漏れ → 緊急度「高」、「今日中」を受信日の日付に変換した
- ⑧ 署名欄にあった住所を、作業場所にしなかった
正直、思った以上に読めていました。ただ、細かく見ていくと問題が出てきます。
つまずき①:希望日の列に「日付」と「文章」が混ざった
希望日の列をよく見ると、右寄せのもの(2026/10/08)と、左寄せのもの(2026/10/15以降、2026/09/30または…)がありました。右寄せはスプレッドシートが日付として認識したもの、左寄せはただの文字です。
②の「来週の水曜か木曜あたり」を、AIは9/30か10/1と正しく読み解けていました。読解は完璧です。ただ、それを日付欄に文章で書いてしまいました。
これは後で困ります。前回作った対応待ち一覧は、工事予定日を日付として計算しているので、文字が混ざると日数計算ができません。
**AIの読解が正しくても、出力の形が揃っていないと後工程で困る。**これが今回の学びのひとつでした。
対処として、指示文に「希望日は日付1つだけ。決まらなければ『不明』にして、候補は要確認事項へ」と明記しました。
つまずき②:日程変更なのに、変更後の日付が取れない
⑤は「9月26日から10月3日に変更」と明記されているのに、希望日が「不明」になっていました。日程変更のメールで一番大事な情報なのに、拾えていません。
対処は、「日程変更の場合は変更後の日付を希望日に、変更前の日付は要確認事項に」というルールの追加です。修正後は希望日が2026/10/03になり、要確認事項に「変更前の日程:2026/09/26」と入りました。
つまずき③:「不明」と空欄が混在した
情報がない項目が、あるメールでは「不明」、別のメールでは空欄になっていました。これだと確認する人が「空欄=AIが処理を忘れた?」と迷ってしまいます。
「情報がない項目は必ず『不明』。関連案件番号だけは該当なしなら空欄」と指定して揃えました。
つまずき④:指示文を直して再実行したのに、結果が変わらない
指示文を直し、シートの古い行も消して再実行したのに、何も出てきませんでした。実行ログには「処理したメール:0件」と出ています。
原因は、8通すべてに「処理済み」ラベルが付いたままだったことでした。処理済みのメールは飛ばす作りなので、ラベルを外さない限り読み直しません。テスト用に「処理済みラベルを外す」関数をちゃんと用意していたのに、実行していなかっただけでした。
シートの処理日時が1回目の時刻のままだったことで、新しい結果が出ていないと気づけました。
つまずき⑤:前回のメニューと衝突した
前回の対応待ち一覧のファイルにも、スプレッドシートにメニューを追加する onOpen という関数がありました。同じ名前の関数が2つあると正しく動きません。前回のほうを削除して、両方のメニューをまとめた版に統一しました。
一番の発見:同じメールでも、実行するたびに答えが変わる
1回目と2回目を比べたとき、指示文を変えていない部分でも結果が少し変わっていました。
- ⑧の顧客名:「高橋不動産株式会社」→「高橋不動産」
- ④の緊急度:「中」→「低」
- ⑦の見積希望:「不明」→「なし」(メールに見積もりの話は一切ないのに)
どれも大きな間違いではありません。ただ、AIは毎回まったく同じ答えを返すとは限らないということです。
これは、使い方によってはかなり怖い性質です。もし抽出結果をそのまま案件管理表に書き込む作りにしていたら、実行のたびに少しずつ違うデータが本番の表に積み上がっていくことになります。
だからこそ、いきなり案件管理表に書き込まず、「確認待ち」で人が見る設計にしたのが正解でした。**AIに任せるのは下書きまで。決めるのは人。**最初に決めた設計の意味を、テスト結果が証明してくれた形です。
なお⑦の見積希望は、指示文に「見積もりに触れていなければ『不明』。推測で『なし』にしない」と追加して直しました。
発展:全部入りの完成版
コードを何度も書き換えるのが面倒だったので、思いついた改善案を一気に入れました。
① 元メールを開くリンク
確認するときに、元のメールをGmailで探す手間がなくなりました。数行の追加ですが、確認作業がかなり楽になります。
② 添付ファイルをドライブに保存
メールごとにフォルダを作って保存し、シートにリンクを記録します。現場写真や図面が届く想定です。
③ 返信の下書きを自動作成
抽出と同時に、AIにお客様への返信文案も作らせました(API呼び出しは1回で済みます)。Gmailの下書きとして保存するだけで、送信はしません。人が中身を見て、送信ボタンを押します。
指示文のルールはこの4つです。
- 宛名(顧客名+様)から始める
- 不足情報があれば丁寧に質問する
- 金額や日程を確定させる表現は使わない
- 緊急なら「確認のうえ至急ご連絡します」
結果、支払い連絡の⑥以外、7通すべてに「山本様」「小川様」など宛名から始まる下書きができました。

④ 緊急の依頼をLINEで通知
トリガーが1時間ごとだと、水漏れのメールが最大1時間放置されてしまいます。トリガーを5〜10分ごとに短くし、緊急度「高」のときだけLINEに通知するようにしました。
LINE連携はMakeを使わず、GASからLINE Messaging APIを直接呼びました。以前LINE BotでMakeを使ったのは「LINEで受け取って返信する」流れだったからで、今回は「GASからLINEに送るだけ」なので直接呼べば済みます。LINEの設定がなければ、代わりに自分宛てのメールで通知します。
結果、⑦の水漏れだけが、顧客・場所・内容・希望・電話が1画面で分かる形でLINEに届きました。

⑤ 承認した瞬間に案件管理表へ転記
確認状況のプルダウンで「承認」を選ぶと、その場で案件管理表に反映されます。
- 新規依頼 → 案件番号を自動採番して追加(2026-016)
- 既存案件の変更 → 案件番号で該当行を探して工事予定日を更新(2026-011 の 9/26→10/3)
転記結果の列には「新規登録」「更新:工事予定日 9/26→10/3」と表示され、成功は緑、失敗は赤になります。
そして新しく登録した案件はステータスが「見積中」なので、10日間動きがなければ、前回作った対応待ち一覧の「見積放置」に自動で上がってきます。練習で作った2つの仕組みが、つながって1本の業務フローになりました。

実務で使うなら:ラベルを自動で付ける
練習ではラベルを手で付けましたが、実際に運用するなら自動化できます。
- Gmailのフィルタで、差出人や件名のキーワード(見積・依頼・工事など)に合うメールへ自動でラベルを付ける
- 依頼専用のアドレスを用意する(Gmailなら「アドレス+irai@gmail.com」の形で受け取れます。問い合わせフォームの送信先にするなど)
新着メールを全部AIに判定させる方法もありますが、費用がかかりますし、関係ないメールまで外部のAIに送ることになるので慎重に考えたほうがいいと思います。大半を自動で拾い、漏れた分だけ人が補う運用がバランスがよさそうです。
それから、実際のお客様のメールをAIに送る場合は、取引先の了承や社内ルールの確認が必要になります。ここは仕組みの前に、確認すべきことだと思います。
まとめ:作ってみて分かった4つのこと
AIは思ったより読める。でも毎回同じ答えは返さない。
だから「AIは下書きまで、決めるのは人」という設計が必要になります。
テストデータには罠を仕込む。
素直なメールだけでは、AIがどこで間違えるか分かりません。
AIの読解が正しくても、出力の形が揃っていないと後工程で困る。
希望日の列がまさにそれでした。
送信はしない、確定はしない。
誤送信・金額間違い・案件の取り違えを防ぐのは、結局は人の確認を挟む設計でした。
私はプログラムを書けません。それでも、どこまで任せてどこから人が見るのか、その線引きは、現場をやってきたからこそ決められる部分だと思っています。
同じようにメールの転記作業に時間を取られている方は、いきなり全部を自動化しようとせず、まず「確認を挟む場所」を1つ決めてみることをおすすめします。そこさえ決まれば、あとは順番に作っていけます。
次におすすめの記事はこちらです
あの呪文の正体はコレ!DifyとGASを繋ぐ魔法の箱「JSON」を超わかりやすく解説
次回は[不足書類チェックアプリ]を作ろうと思います。是非お楽しみに!


コメント