社用車の運転前後のアルコールチェックの記録を毎日点検し、記録漏れ・確認者の欠け・確認方法の書き漏れを安全運転管理者に知らせる
社用車の運転前後の酒気帯び確認の記録を、毎朝、前の日の分について点検します。記録漏れや数値の食い違いはスクリプトが車両の使用簿と照らして拾い、AI は確認の方法や指示事項の自由記述が記録として足りているかを判定します。不備だけが安全運転管理者に届きます。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- 商社/建設/物流/製造
- 対象部門
- 総務
- 対象業務
- 内容確認・チェック/台帳・マスタ管理
- 主な課題
- 人手が足りない/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 判定
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 安全運転管理者が、手の空いたときに回答のスプレッドシートを開き、自分の拠点の前の日の行を絞り込む
- 使用簿のシートを開き、前の日に社用車を使った運転者と車両を書き出す
- 使用簿の運転者ごとに、運転前と運転後の記録があるかを見る
- 記録の行ごとに、確認者、確認の方法、検知器の番号、測定値、酒気帯びの有無、指示事項が埋まっているかを見る
- 対面でない確認の行で、具体的な方法が書かれているかを読む
- 不備があれば、確認者か運転者に連絡して記録を補ってもらう
- 人安全運転管理者または補助者が、いまと同じように酒気帯び確認を行い、フォームで記録する
- 自動フォームの送信のたびに、測定値が0より大きいか、酒気帯びの有無が「有」なら、その拠点の安全運転管理者と副安全運転管理者にすぐメールで知らせる
- 自動毎朝7時台に、Apps Script が前の日の使用簿と記録を拠点ごとに読む
- 自動使用簿の運転者ごとに、運転前・運転後の記録の有無を照らす
- 自動記録の行ごとに、必須の欄、確認者が指定の一覧にいるか、検知器が台帳にあるか、数値と有無の食い違いを規則で見る
- 自動確認の方法・指示事項・備考の自由記述がある行を Claude API に渡す
- 自動AI が、記録として足りているか、欄どうしが食い違っていないかを判定する
- 自動拠点ごとの不備の一覧を、その拠点の安全運転管理者にメールで送り、点検の一覧のシートに書く
- 人安全運転管理者が不備の一覧を見て、確認者か運転者に連絡し、記録を補う
- 人本社の車両の管理の担当が、拠点ごとの不備の件数を週に1回見る
各工程の詳しい説明を読む
- 安全運転管理者が、手の空いたときに回答のスプレッドシートを開き、自分の拠点の前の日の行を絞り込む
- 使用簿のシートを開き、前の日に社用車を使った運転者と車両を書き出す
- 使用簿の運転者ごとに、運転前と運転後の記録があるかを見る
- 記録の行ごとに、確認者、確認の方法、検知器の番号、測定値、酒気帯びの有無、指示事項が埋まっているかを見る
- 対面でない確認の行で、具体的な方法が書かれているかを読む
- 不備があれば、確認者か運転者に連絡して記録を補ってもらう
(a)記録漏れに気づくのが遅れる。 3番の照合は、使用簿と記録を見比べないとできません。忙しい日が続くと3日分をまとめて見ることになり、運転後の記録が無いことに3日後に気づきます。 そのときには、運転者も確認者も、その日のことをよく覚えていません。
(b)確認者と確認の方法の書き漏れが多い。 直行直帰の確認は電話で済ませ、記録は運転者が自分でフォームを送ることがあります。確認者の欄に運転者の名前が入っていたり、方法の欄に「電話」としか書かれていなかったりします。
(c)欄どうしの食い違いに気づかない。 測定値に0より大きい数字が入っているのに酒気帯びの有無が「無」、備考に「前夜遅くまで飲酒」とあるのに指示事項が空。どれも1行ずつ読めば分かりますが、毎日の数十行を読む時間がありません。
(d)拠点ごとに点検の濃さが違う。 安全運転管理者は拠点の総務の仕事を兼ねていて、点検に使える時間は拠点によって違います。 本社からは、どの拠点の記録がそろっているかが見えません。
- 【人】 安全運転管理者または補助者が、いまと同じように酒気帯び確認を行い、フォームで記録する
- 【自動】 フォームの送信のたびに、測定値が0より大きいか、酒気帯びの有無が「有」なら、その拠点の安全運転管理者と副安全運転管理者にすぐメールで知らせる
- 【自動】 毎朝7時台に、Apps Script が前の日の使用簿と記録を拠点ごとに読む
- 【自動】 使用簿の運転者ごとに、運転前・運転後の記録の有無を照らす
- 【自動】 記録の行ごとに、必須の欄、確認者が指定の一覧にいるか、検知器が台帳にあるか、数値と有無の食い違いを規則で見る
- 【自動】 確認の方法・指示事項・備考の自由記述がある行を Claude API に渡す
- 【自動】 AI が、記録として足りているか、欄どうしが食い違っていないかを判定する
- 【自動】 拠点ごとの不備の一覧を、その拠点の安全運転管理者にメールで送り、点検の一覧のシートに書く
- 【人】 安全運転管理者が不備の一覧を見て、確認者か運転者に連絡し、記録を補う
- 【人】 本社の車両の管理の担当が、拠点ごとの不備の件数を週に1回見る
2番目は AI を通しません。 測定値と有無の欄だけで決まる規則で、フォームの送信の数秒後には安全運転管理者に届きます。 酒気帯びの疑いの知らせを、翌朝の点検まで待たせることはしません。
9番目は省けません。 記録を補うのは、確認をした人と運転者です。この構成が記録を書き換えることはありません。
02今回想定するシステム構成
安全運転管理者・補助者が酒気帯び確認を行い、フォームで記録する │ 回答は1つのスプレッドシートに入る ├─▶【トリガー】フォーム送信(インストール型) │ 測定値>0 か 有無=有 なら MailApp で安全運転管理者へ(AI を通さない) ▼【トリガー】毎朝7時台(時間主導型) Google Apps Script ├──▶ 前の日の使用簿と記録を拠点ごとに読む ├──▶ 規則の点検(記録漏れ・必須の欄・確認者・検知器・食い違い) ├──▶ Claude API(構造化出力) │ 確認の方法・指示事項・備考の記述の判定 ├──▶ 点検の一覧のシートに書く └──▶ MailApp で拠点ごとの不備の一覧を送る ▼ 【安全運転管理者が確認者・運転者に連絡し、記録を補う】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Make、Power Automate |
| 生成AI | Claude API(構造化出力) | Gemini API、OpenAI API |
| 保管 | Google スプレッドシート(記録の回答、使用簿、確認者の一覧、検知器の台帳、点検の一覧) | - |
| 通知 | Gmail(MailApp) | Google Chat |
新しく足すのは、Apps Script と、確認者の一覧、検知器の台帳、点検の一覧のシートだけです。 フォームと回答のスプレッドシート、使用簿は、いまのものを使います。検知器そのものや、勤怠のシステムにはつなぎません。
Apps Script は、回答のスプレッドシートに付けるスクリプトとして書きます。 トリガーは2つです。フォームの回答が入ったときに動くフォーム送信のインストール型トリガーと、毎朝動く時間主導型のトリガーです。公式のページでは、時間主導型のトリガーの時刻は少しずれることがあり、たとえば9時に設定すると9時から10時のあいだの時刻が選ばれ、その時刻が日をまたいで保たれるとされています。安全運転管理者の始業の前に届けばよいので、7時台に設定します。
インストール型のトリガーは、作った人のアカウントで動きます。 公式のページでは、トリガーから送ったメールはトリガーを作った人のアカウントから送られるとされています。安全運転管理者の個人のアカウントで作ると、異動のあとに知らせが止まります。総務部の共有のアカウントで作ります。
AI の処理は Claude API の構造化出力で行います。 Messages API の output_config.format に type: "json_schema" と JSON Schema を渡すと、その形に合う JSON が返ります。 Claude API では正式提供で、ベータのヘッダは要りません。
03どうやって実装するのか
処理の起点を決める
点検は、毎朝7時台に動く時間主導型のトリガーを起点にします。 ScriptApp.newTrigger() に timeBased()・everyDays(1)・atHour(7) を続けて作ります。動くと、前の日の0時から24時までの使用簿と記録を拠点ごとに読みます。
前の日の分を翌朝に見るのは、運転後の確認が夜になるためです。 帰着の遅い運転者の運転後の確認は、夜の9時、10時に記録されます。夕方に点検すると、まだ帰っていない運転者がすべて「運転後の記録なし」になります。 翌朝なら、前の日の運転はすべて終わっています。
1日に何度も運転する運転者でも、記録が運転の回数だけ要るとは限りません。 警察庁の Q&A では、確認は個々の運転の直前・直後にその都度行わなければならないものではなく、運転を含む業務の開始前や出勤時、終了後や退勤時に行うことで足りるとされています。そこで照合は、使用簿の運転者×日ごとに、運転前と運転後の記録が1件ずつあるかで見ます。
夜勤のある拠点は、日をまたぐ運転があります。 使用簿の使用の開始が前の日で、終わりが当日の朝になっている運転は、終わりの日の点検に回します。 使用簿に開始と終わりの日時を持たせ、スクリプトで判定します。
測定値と有無の知らせは、フォーム送信のトリガーで行います。 回答1件ごとに動き、測定値が0より大きいか、有無が「有」なら、その場でメールを送ります。 AI を呼ばないので、数秒で届きます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 確認の記録 | 確認の区分(運転前・運転後)、日時、運転者、車両の番号、確認の方法、方法の詳細、検知器の番号、測定値、酒気帯びの有無、確認者、指示事項、備考 | 回答のスプレッドシート |
| 車両の使用簿 | 使用の開始・終わりの日時、運転者、車両の番号、行き先 | 拠点ごとの使用簿のシート |
| 確認者の一覧 | 拠点ごとの安全運転管理者、副安全運転管理者、指定した補助者 | 確認者の一覧のシート |
| 検知器の台帳 | 検知器の番号、置き場所・携行者、最後に故障の有無を確かめた日 | 検知器の台帳のシート |
| 運転者の一覧 | 社員の番号、氏名、所属の拠点、名前の別の書き方 | 運転者の一覧のシート |
質を決めるのは、使用簿です。 記録漏れは「運転したのに記録が無い」ことなので、運転したことが分かる使用簿が無ければ、漏れを数えられません。 使用簿の書き漏れがあると、その運転は点検から消えます。第12章でも扱います。
確認者の一覧に補助者を入れるのは、警察庁の Q&A の考え方に沿うためです。 Q&A では、酒気帯び確認は安全運転管理者が行うのが原則で、不在のときなどには、副安全運転管理者や、あらかじめ補助者として指定し、確認の方法について指導・教育を行った者に行わせることは差し支えないとされています。一覧に無い人が確認者の欄にいれば、指定の漏れか、書き間違いかのどちらかです。
検知器の台帳は、Q&A の「常時有効に保持」のために持ちます。 Q&A では、検知器は取扱説明書に基づいて使い、管理し、保守するとともに、定期的に故障の有無を確認し、故障がないものを使用しなければならないとされています。最後に確かめた日が社内の決めた間隔を過ぎた検知器での記録を拾います。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 前の日の記録 | 回答のシート | 日時の列で範囲を絞り、拠点の列で分ける |
| 前の日の使用簿 | 拠点ごとの使用簿 | 使用の終わりの日時で範囲を絞る |
| 一覧と台帳 | 各シート | 実行の最初に一度に読む |
運転者の名前は、運転者の一覧で社員の番号にそろえてから照らします。 使用簿には姓だけ、フォームにはフルネーム、という違いがよくあります。番号にそろえられない名前は「運転者を特定できない」として拾います。
拠点ごとの処理は、次の順で行います。
1. 前の日の使用簿の運転者×車両の組と、記録の行を取り出す
2. 運転者の名前を社員の番号にそろえる
3. 使用簿の運転者ごとに、その日の運転前・運転後の記録があるかを見る(R1・R2)
4. 記録の行ごとに規則で見る
R3 確認者が空、または確認者の一覧にいない、または運転者と同じ
R4 確認の方法が対面以外で、方法の詳細が空
R5 測定値が0より大きいのに有無が「無」、または測定値が空
R6 検知器の番号が台帳に無い、または故障の有無の確認の期限を過ぎている
R7 運転後の記録の時刻が、運転前の記録の時刻より前
5. 方法の詳細・指示事項・備考のどれかに文がある行を、AI に渡す一覧にする
6. Claude API を呼び、JSON を受け取る(失敗したら規則の結果だけで送る)
7. 規則の結果と AI の判定を合わせて、拠点ごとの不備の一覧を作る
8. 点検の一覧のシートに書き、安全運転管理者にメールで送る
6番目で AI が失敗しても、メールは送ります。 記録漏れ(R1・R2)は規則だけで決まり、最も大事な知らせです。 AI の判定は後から足せますが、記録漏れの知らせが止まるのは避けます。
Claude API は UrlFetchApp で呼び、API キーはスクリプトのプロパティに置きます。 公式の割り当てでは、URL Fetch の呼び出しはGoogle Workspace のアカウントで1日10万回、MailApp の宛先は1日1,500で、1日に6拠点分を送るには十分です。
AIへ渡す前に整形する
- 運転者の名前を番号に置き換える … AI には社員の番号も名前も渡さず、行の番号だけを渡します
- 規則で決まったものは渡さない … R1〜R7 は AI の判定を待たずに不備として決まります
- 自由記述の無い行は渡さない … 方法の詳細・指示事項・備考がすべて空の行は、AI を呼びません
- 欄の値を添える … 確認の方法の選択肢、測定値、有無の値を、自由記述と一緒に渡します
- 体調や服薬の記述をそのまま扱う … 備考の文は省かずに渡します。この欄の読み取りが AI の役割の中心だからです
1番目で名前を渡さないのは、記録の性質のためです。 酒気帯び確認の記録には、体調や服薬、前の晩の飲酒のような、本人にとって知られたくない内容が書かれることがあります。誰の記録かは、行の番号でスクリプトの側だけが分かる形にします。
AIに処理させる
させるのは、記録の自由記述について、記録として足りているか、欄どうしが食い違っていないかを判定することです。
| 見るもの | 判定 | 例 |
|---|---|---|
| 対面でない確認の方法の詳細 | adequate/insufficient/unclear | 「ビデオ通話で顔色と声を確認し、検知器の表示を画面で確認」は足りる。「電話」だけは足りない |
| 備考と指示事項 | consistent/missing_instruction/unclear | 備考に「服薬」「寝不足」「前夜飲酒」があるのに指示事項が空 |
| 指示事項と有無の欄 | consistent/contradiction | 有無が「無」なのに指示事項が「運転中止」 |
方法の詳細の判定の基準は、警察庁の Q&A の例に置きます。 Q&A では、対面と同視できる方法の例として、カメラ・モニターで顔色や声の調子とともに測定結果を確認する方法と、電話や業務無線で声の調子を確認するとともに測定結果を報告させる方法が挙げられています。「何で(手段)」「何を(顔色・声の調子)」「測定結果をどう確かめたか」の3つが書かれているかを見させます。
備考の判定では、AI に体調の良し悪しを判断させません。 見るのは、備考に運転への影響がありうる記述があるときに、指示事項に何か書かれているかだけです。指示の中身が適切かどうかは、安全運転管理者が決めます。
| させないこと | 理由 |
|---|---|
| 酒気帯びかどうかの判断 | 安全運転管理者が状態の目視と検知器で確認する |
| 運転させてよいかの判断 | 安全運転管理者が決める |
| 測定値の大小の評価 | 0より大きいかは規則で見る。それ以上の評価はしない |
| 指示事項の中身の良し悪し | 安全運転管理者の判断 |
| 記録を補う・書き換える | 確認者と運転者が補う |
| 運転者の人物の評価 | 点検の目的ではない |
1行目と2行目が、この構成でいちばん守るべきことです。 AI に記録を読ませると、「測定値が低いので問題ない」のような判断を書き添えがちです。それが不備の一覧に載ると、安全運転管理者の判断の代わりのように読まれてしまいます。スキーマに判断を書く欄を作らないことで、書く場所を無くします。
指示内容を固定する
あなたは会社の総務部で、社用車の酒気帯び確認の「記録」がそろっているかを点検する立場です。
酒気帯びかどうか、運転してよいかは判断しません。記録の書き方だけを見てください。
【見ること】
1. method_detail:確認の方法が対面以外のとき、具体的な方法が書かれているか
- 足りる(adequate):手段、運転者の何を確かめたか(顔色・声の調子など)、
検知器の測定結果をどう確かめたか(画面で見た・報告を受けた)の3つが読み取れる
- 足りない(insufficient):3つのうち1つでも読み取れない
- 判断できない(unclear):文が途中で切れている、意味が取れない
2. note_vs_instruction:備考に、体調不良・服薬・睡眠不足・前日の飲酒など
運転に影響しうる記述があるとき、指示事項に何か書かれているか
3. instruction_vs_result:指示事項の内容と、酒気帯びの有無の欄が食い違っていないか
【厳守事項】
- 酒気帯びかどうか、運転してよいか、体調が悪いかを判断しないでください。
- 測定値の大小について評価しないでください。
- 指示事項の中身が適切かどうかを書かないでください。書かれているかだけを見てください。
- 書かれていないことを補わないでください。「たぶん対面だった」と推し量らないでください。
- evidence には、判定の根拠にした文をそのまま写してください。
【記録の行】{records_json}
(各行:row_id、check_type、method、method_detail、measured_value、
alcohol_detected、instruction、note)
冒頭で「判断しません」を言い切るのは、この題材の性質のためです。 酒気帯び確認の記録を渡すと、AI は安全のために何か言おうとして、「念のため運転を控えるべき」のような助言を足します。 点検の一覧に載る文は、記録の不備の指摘だけにします。
3つの要素を並べて書くのは、判定をそろえるためです。 「足りる」の基準を「具体的に書かれていれば」とだけ書くと、「携帯で確認」を足りると判定する回と足りないと判定する回が出ます。 要素の数で判定させると、安全運転管理者が読んでも理由が分かります。
出力形式を固定する
構造化出力で、次の形の JSON を受け取ります。
{
"results": [
{ "row_id": "",
"method_detail": "adequate | insufficient | unclear | not_applicable",
"method_missing": ["means | observed | result_check"],
"note_vs_instruction": "consistent | missing_instruction | unclear | not_applicable",
"instruction_vs_result": "consistent | contradiction | not_applicable",
"evidence": "" }
]
}
スキーマでは判定の欄をすべて enum で縛り、オブジェクトに additionalProperties: false を付けます。自由に書ける欄は evidence だけにして、判断や助言を書く欄を作りません。 公式のページでは、minimum などの数値の制約は使えないとされていますが、この形では数値の欄が無いので当たりません。
method_missing で、足りない要素を返させます。 不備の一覧には「方法の詳細に、測定結果をどう確かめたかが書かれていません」のように、何を補えばよいかが一文で出ます。 確認者が記録を補うときに迷いません。
row_id は、渡した行と1対1で突き合わせます。 抜けた行は「AI の判定なし」として、規則の結果だけで一覧に載せます。
拠点ごとのメールは、次の順に並べます。
| 順 | 中身 |
|---|---|
| 1 | 運転前・運転後の記録漏れ(R1・R2)。運転者と車両 |
| 2 | 数値と有無の食い違い(R5)、指示事項との食い違い(contradiction) |
| 3 | 確認者の欠け・一覧にいない(R3) |
| 4 | 対面でない確認の方法の書き漏れ(R4、insufficient) |
| 5 | 備考に対する指示事項の空(missing_instruction) |
| 6 | 検知器の台帳・故障の確認の期限(R6)、時刻の並び(R7) |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 回答のスプレッドシート | Apps Script(読み取り) | 前の日の記録 |
| 使用簿 | Apps Script(読み取り) | 前の日の運転 |
| 一覧と台帳 | Apps Script(読み取り) | 確認者、検知器、運転者 |
| Claude API | UrlFetchApp | 自由記述の判定 |
| 点検の一覧 | Apps Script(追記) | 拠点・日付ごとの不備と、対応の欄 |
| Gmail | MailApp | 拠点ごとの不備の一覧、測定値の知らせ |
回答のシートには書き込みません。 記録を補うときは、確認者がフォームで「訂正・追記」の区分の回答を新しく送り、元の行を指す番号を書きます。元の記録を書き換えないのは、1年間保存する記録だからです。 いつ、誰が、何を補ったかが残ります。
人が確認する
- 安全運転管理者が、メールの1番と2番を最初に見る … 記録漏れは、運転者と確認者に当日中に連絡します。数値や指示事項の食い違いは、確認したときの状況を確認者に聞きます
- 3番から5番は、確認者に補ってもらう … 訂正・追記の区分で、足りない要素を書いてもらいます
- 6番は、検知器の台帳を直すか、検知器を確かめる
- 点検の一覧の対応の欄に、何をしたかを書く
- 本社の担当が、週に1回、拠点ごとの不備の件数を見る
1番目の記録漏れは、記録の問題で終わらないことがあります。 運転後の記録が無いのは、確認を忘れただけかもしれませんし、確認をしないまま帰宅したのかもしれません。 どちらだったかは、安全運転管理者が運転者に聞いて確かめます。
例外に対処する
| 起きること | 対応 |
|---|---|
| 使用簿に運転者が書かれていない | 「使用簿の書き漏れ」として、車両と時刻を一覧に載せる |
| 運転者の名前を番号にそろえられない | 「運転者を特定できない」として載せ、運転者の一覧に別の書き方を足す |
| 出張で別の拠点で確認した | 確認者の一覧の全拠点を見て、他の拠点の安全運転管理者なら不備にしない。所属の拠点への報告の有無は備考で見る |
| 日をまたぐ運転 | 使用の終わりの日の点検に回す |
| 休日に運転があった | 翌営業日の朝に、休日の分もまとめて点検する |
| API が失敗した・応答しない | 規則の結果だけでメールを送り、「AI の判定なし」と書く |
| 6分を超えそう | 拠点ごとに分けて、処理済みの拠点をスクリプトのプロパティに書く |
| 訂正・追記の回答が来た | 次の朝の点検で、元の行の不備が埋まったかを見直す |
3行目は、警察庁の Q&A の考え方を反映しています。 Q&A では、出張先の事業所の安全運転管理者が確認することも可能で、その結果を運転者が所属する事業所の安全運転管理者に報告するよう示されています。
記録を残す
- 毎朝の点検の日時、拠点ごとの使用簿の件数と記録の件数
- 規則の判定の結果(R1〜R7)と、AI に渡した行と返ってきた JSON
- 拠点ごとに送ったメールの日時と宛先
- 点検の一覧の対応の欄 … 誰が、いつ、何をしたか
- 訂正・追記の回答と、元の行の対応
記録そのものは、回答のスプレッドシートに1年間以上残します。 点検の一覧も同じ期間残し、閲覧できる人を総務部と各拠点の安全運転管理者に限ります。
04実装レベルの3段階
本記事の想定は半自動化です。 1件20分のうち、使用簿との照合と欄の確認と自由記述の読み取りが自動になり、安全運転管理者に残るのは、不備の一覧を見て確認者と運転者に連絡することです。 半自動化を1か月回すと、不備の型が拠点ごとに見えてきます。 確認者の書き漏れが多い拠点、直行直帰の方法の詳細が短い拠点。型が分かれば、フォームの欄の説明や選択肢を直して、書き漏れを入力の段階で減らせます。 本格構成で足すのは、検知器の記録との照合です。 検知器に記録の機能があり、データを書き出せる機種なら、フォームに手で写した測定値と照らせます。書き出しの方法は機種によるので、検知器の提供元に確かめてください。
05工数削減シミュレーション
導入後 120件 × 5分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 白ナンバーの社用車を複数の拠点で使い、拠点ごとに安全運転管理者を置いている物流・建設・製造・商社などの企業。運転前後の酒気帯び確認を Google フォームやスプレッドシートで記録しているが、記録漏れや確認者の書き漏れの点検が後回しになっている場合。直行直帰が多く、対面でない確認の記録が増えている場合。Google Workspace を使っている場合。
- 社用車が数台で、安全運転管理者が毎日すべての記録を見られる場合。記録が紙だけで、入力の仕組みを変える予定が無い場合。アルコール検知器と一体の記録のサービスで、記録漏れの検出まで済んでいる場合。事業用(緑ナンバー)の車両の点呼の記録(別の規則による)。なお、酒気帯びかどうかの判断と、運転させるかどうかの判断は、この構成では代替できません。
07最小構成で試す方法
- 1つの拠点の、先週5日分の記録と使用簿を用意する
- 記録のうち、対面でない確認の行と、備考や指示事項に文がある行を選び、運転者の名前を消してテキストに書き出す
- 社内で使ってよいAIサービスの画面に貼り付ける
- 「それぞれの行について、対面でない確認の方法の詳細に、手段・運転者の何を確かめたか・検知器の測定結果をどう確かめたか の3つが書かれているかを判定してください。備考に体調や服薬や飲酒の記述があるのに指示事項が空の行を挙げてください。酒気帯びかどうかや、運転してよいかは判断しないでください」と指示する
- 出てきた判定を、安全運転管理者が同じ行を読んだ判断と見比べる
使用簿との照合は、この段階では試さなくて構いません。 照合はスクリプトの規則で行うので、最小構成で見るのは自由記述の判定を AI に任せられるかだけです。
| 出てきた内容 | 判断 |
|---|---|
| 安全運転管理者の判断とおおむね同じ | Apps Script の組み立てに進む |
| 判断や助言を書き添える | 指示とスキーマで書く場所を無くす。構成は有効 |
| 「足りる」の判断が安全運転管理者のあいだで割れる | 記録の書き方の社内の手引きを作るのが先 |
3行目が出たら、それが第3章の(b)の正体です。 何が書かれていれば足りるかを、6拠点の安全運転管理者で決めます。決めた書き方を、フォームの方法の詳細の欄の説明文に載せると、書き漏れそのものが減ります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 使用簿の書き漏れで、記録漏れが見えない | 使用簿の無い車両の使用を作らない運用にする。 鍵の貸し出しと使用簿を結ぶ |
| AI が「運転を控えるべき」と書き添える | 判断しないと指示し、スキーマに判断を書く欄を作らない |
| 「足りる」の判定が回によって揺れる | 3つの要素で判定させ、足りない要素を返させる |
| 夕方に点検して運転後がすべて漏れになる | 翌朝に前の日の分を点検する |
| 夜勤の運転が日をまたぐ | 使用の終わりの日の点検に回す |
| 名前の書き方の違いで照合できない | 社員の番号にそろえ、別の書き方を一覧に足す |
| 確認者の欄に運転者自身の名前 | 規則で「運転者と同じ」を拾う |
| 出張先の確認を不備にしてしまう | 確認者の一覧を全拠点で見る |
| 記録を直接書き換えてしまう | 訂正・追記の回答を足す形にする |
| AI の失敗で記録漏れの知らせが止まる | AI が失敗しても規則の結果だけで送る |
| 異動で知らせが止まる | トリガーは総務部の共有のアカウントで作る |
| 毎朝の時刻がずれる | 時間主導型は1時間の幅で動く。始業の前に余裕を持たせる |
上の2行が、この構成の失敗のほとんどです。 1行目は記録漏れを見えなくし、2行目は AI の文を安全運転管理者の判断の代わりにしてしまいます。どちらも、仕組みの外の運用とスキーマの形で防ぎます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 運転者の氏名、車両の番号、確認の日時、検知器の測定値と酒気帯びの有無、体調や服薬、前日の飲酒などの備考です。本人にとって知られたくない内容を含みます。
- AI に名前を渡さない … 行の番号だけを渡し、誰の記録かはスクリプトの側だけが分かる形にします
- 酒気帯びの判断と運転の可否を AI に任せない … 確認は安全運転管理者または指定した補助者が行い、運転させるかどうかも安全運転管理者が決めます。 AI が出すのは記録の不備の指摘だけです
- 測定値の知らせを AI に頼らない … フォーム送信のトリガーの規則で送ります
- 記録を書き換えない … 警察庁の Q&A では記録を1年間保存するよう示されています。補うときは訂正・追記の回答を足します
- 閲覧できる人を絞る … 回答のスプレッドシートと点検の一覧は、総務部と各拠点の安全運転管理者・補助者に限ります。運転者の上司に一覧を広く配ることはしません
- 不備の件数を運転者の評価に直接使わない … 記録漏れの多くは、確認者の側の書き漏れです。件数は、確認の手順と記録の書き方を直すために使います
- 外部の AI に渡してよいかを確かめる … 体調や服薬の記述を外部のサービスに渡してよいかは、社内の個人情報の取り扱いの規程によります。 渡さない場合は、備考の欄を AI の判定から外し、規則(備考に文があって指示事項が空)だけで拾います
誤りが起きた場合のリスクは、記録漏れを見落とすことと、AI の文が安全運転管理者の判断の代わりに読まれることの2つです。 前者は使用簿の書き漏れから、後者は AI の助言から起きます。使用簿の運用と、判断を書く欄の無いスキーマで防ぎます。
10まず何から始めるか
1週目:一覧と台帳を作る
6拠点の安全運転管理者、副安全運転管理者、指定した補助者を確認者の一覧に書き出します。検知器の番号、置き場所、最後に故障の有無を確かめた日を台帳にします。補助者の指定と指導の記録が無ければ、ここで整えます。
2週目:1拠点で試す
1拠点の先週5日分の自由記述の行を、名前を消して手元のAIサービスで判定させます。判断や助言を書き添えないか、「足りる」の判定が安全運転管理者の見方と合うかを見ます。
3週目:規則の点検をつなぐ
Apps Script で、使用簿と記録の照合と R1〜R7 の規則を作り、毎朝のトリガーで点検の一覧に書きます。測定値の知らせもフォーム送信のトリガーで動かします。この時点では AI を呼ばず、メールも送らずに、安全運転管理者が点検の一覧を毎朝見ます。
4週目:AI の判定と知らせを足す
Claude API の判定を足し、拠点ごとのメールを送り始めます。初回は2拠点だけで動かします。
2か月目: 6拠点に広げ、拠点ごとの不備の型を数えます。3か月目以降: フォームの欄の説明を直し、1件20分が何分になったかを実測します。前の日の記録漏れが翌朝に必ず安全運転管理者に届き、その日のうちに補われるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 安全運転管理者が運転しようとする運転者と運転を終了した運転者について、目視等と検知器で酒気帯びの有無を確認すること。業務の開始前や出勤時、終了後や退勤時に行うことで足りること。対面が原則で、直行直帰などではカメラ・モニターや携帯電話・業務無線で測定結果を確認・報告させる方法が考えられること。検知器を常時有効に保持し、定期的に故障の有無を確認すること。副安全運転管理者や指定した補助者に確認を行わせられること。出張先の安全運転管理者が確認し、所属の事業所に報告すること。確認者名・運転者の氏名・登録番号等・日時・方法(対面でない場合は具体的方法等)・有無・指示事項・その他を記録し1年間保存すること | 警察庁: 安全運転管理者による酒気帯び確認等に関する Q&A(PDF) | 2026-10-08 |
| 時間主導型とフォーム送信のトリガーがあること。時刻が少しずれることがあり、指定した時刻の1時間のあいだで選ばれ保たれること。インストール型のトリガーが作った人のアカウントで動き、メールもその人のアカウントから送られること | Google Apps Script: Installable Triggers | 2026-10-08 |
| 1回の実行が6分までであること。URL Fetch の呼び出しが Google Workspace で1日10万回であること。MailApp の宛先が Google Workspace で1日1,500であること | Google Apps Script: Quotas for Google Services | 2026-10-08 |
Messages API の output_config.format に type: "json_schema" とスキーマを渡すと、スキーマに合う JSON が返ること。Claude API で正式提供でベータのヘッダが要らないこと。enum が使えること。オブジェクトに additionalProperties: false が必要なこと。minimum などの数値の制約が使えないこと | Claude API Docs: Structured outputs | 2026-10-08 |
酒気帯び確認の方法と記録の内容は、警察庁と所轄の警察署の案内、社内の規程に沿って決めてください。 本記事は上記の公式の資料とページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1124)についてのご相談はこちらから。
