建設現場で毎日手書きされる安全日誌を読み取り、作業内容・人数・指示事項・巡視の記録を現場ごとの記録データにそろえて、記入漏れと是正の未完了を拾う
建設現場で毎日手書きされる安全日誌を読み取り、作業内容・人数・指示事項・巡視の記録を現場ごとの記録データにそろえます。巡視欄の空欄と、指摘したまま是正の記載が無い事項を、翌日のうちに本社の担当へ出します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- 建設
- 対象部門
- 品質管理
- 対象業務
- データ入力・転記/台帳・マスタ管理
- 主な課題
- 入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 現場の職員が、その日の日誌をスキャンして、現場ごとの共有ドライブのフォルダに保存する
- 本社の安全の担当が、翌朝に各現場のフォルダを開き、新しい日誌を1枚ずつ見る
- 作業内容、協力会社ごとの人数、合計人数、安全指示事項を、現場ごとの記録の表に写す
- 巡視の記録の指摘事項を指摘台帳に足す。是正確認の□に印があれば、前の指摘を探して「是正済み」にする
- 巡視の欄が空の日、合計人数の書かれていない日、所長の確認欄が空の日にメモを付ける
- メモがたまったら、現場の所長に電話かメッセージで確かめる
- 月末に指摘台帳を見直し、是正されていない指摘を現場に問い合わせる
- 人現場の職員が、その日の日誌をスキャンして、現場ごとの共有ドライブの「受付」フォルダに保存する
- 自動Google Apps Script が毎日夜に各現場の「受付」フォルダを確かめ、新しいPDFを Google Document AI の Form Parser に送る
- 自動Form Parser が、日誌の欄のキーと値、協力会社の表、是正確認の□の印、それぞれの信頼度を返す
- 自動Gemini API が、読み取り結果を記録データの行(日誌の見出し、協力会社ごとの行、指示事項、巡視の指摘)にそろえる
- 自動Gemini API が、その現場の未完了の指摘の一覧と日誌を照らし、是正の済みがはっきり書かれた記述だけを、根拠の一文とともに書き出す
- 自動Apps Script が、巡視の欄の空欄、人数の合計の食い違い、協力会社の引き当て、未完了の指摘の日数を規則で確かめ、印を付ける
- 自動現場ごとの記録の表と指摘台帳の「確認待ち」の列に書き込み、印の付いた行に日誌の写しのリンクを付ける
- 人本社の安全の担当が、翌朝に印の付いた行を日誌の写しと見比べ、是正の記載を確かめて台帳を「是正済み」にする
- 人巡視の欄の空欄と、期限を過ぎた未完了の指摘を、現場の所長に確かめる
各工程の詳しい説明を読む
- 現場の職員が、その日の日誌をスキャンして、現場ごとの共有ドライブのフォルダに保存する
- 本社の安全の担当が、翌朝に各現場のフォルダを開き、新しい日誌を1枚ずつ見る
- 作業内容、協力会社ごとの人数、合計人数、安全指示事項を、現場ごとの記録の表に写す
- 巡視の記録の指摘事項を指摘台帳に足す。是正確認の□に印があれば、前の指摘を探して「是正済み」にする
- 巡視の欄が空の日、合計人数の書かれていない日、所長の確認欄が空の日にメモを付ける
- メモがたまったら、現場の所長に電話かメッセージで確かめる
- 月末に指摘台帳を見直し、是正されていない指摘を現場に問い合わせる
(a)写す作業が多い。 25現場から毎日届く日誌を、1枚ずつ表に写します。協力会社の行が10行を超える日誌もあり、写し漏れの行が出ます。 写し漏れた会社は、その日に現場にいなかったことになります。
(b)是正の確認が漏れる。 4番目は、□に印があるものしか追えません。「是正済み」と文章で書かれ、□に印が無い日誌や、指摘の翌々日に是正が書かれた日誌は、前の指摘と結びつけられないまま残ります。 結びつけられなかった指摘は、台帳の上ではずっと未完了で、本当に未完了のものと区別がつきません。
(c)巡視の欄の空欄に気づくのが遅い。 元請が特定元方事業者に当たる現場では、作業場所の巡視を毎作業日に少なくとも1回行うことが求められています。巡視をしたのに書かなかったのか、巡視ができなかったのかは、日誌を見ただけでは分かりません。 気づくのが月末の見直しでは、所長も3週間前の日のことを思い出せません。
(d)担当によって見るところが違う。 同じ日誌でも、誰が見たかで拾われる記入漏れが変わります。
- 【人】 現場の職員が、その日の日誌をスキャンして、現場ごとの共有ドライブの「受付」フォルダに保存する
- 【自動】 Google Apps Script が毎日夜に各現場の「受付」フォルダを確かめ、新しいPDFを Google Document AI の Form Parser に送る
- 【自動】 Form Parser が、日誌の欄のキーと値、協力会社の表、是正確認の□の印、それぞれの信頼度を返す
- 【自動】 Gemini API が、読み取り結果を記録データの行(日誌の見出し、協力会社ごとの行、指示事項、巡視の指摘)にそろえる
- 【自動】 Gemini API が、その現場の未完了の指摘の一覧と日誌を照らし、是正の済みがはっきり書かれた記述だけを、根拠の一文とともに書き出す
- 【自動】 Apps Script が、巡視の欄の空欄、人数の合計の食い違い、協力会社の引き当て、未完了の指摘の日数を規則で確かめ、印を付ける
- 【自動】 現場ごとの記録の表と指摘台帳の「確認待ち」の列に書き込み、印の付いた行に日誌の写しのリンクを付ける
- 【人】 本社の安全の担当が、翌朝に印の付いた行を日誌の写しと見比べ、是正の記載を確かめて台帳を「是正済み」にする
- 【人】 巡視の欄の空欄と、期限を過ぎた未完了の指摘を、現場の所長に確かめる
8番目が、この設計の分かれ目です。 指摘台帳を「是正済み」にするのは、人が日誌の記述を確かめたときだけです。AIが書き出すのは「是正の記載がある」という候補で、台帳の状態は変えません。
本社の担当が朝に見るのは、印の付いた行だけです。 印の無い日誌は、現場ごとの件数を流し見て確認済みにします。
02今回想定するシステム構成
安全日誌(手書き、現場で毎日) │ 現場の職員がスキャンし、現場ごとのフォルダへ ▼【トリガー】Apps Script の時間主導型トリガー(毎日夜) Google Apps Script ── 各現場の「受付」フォルダの新しいPDFを探す ▼ Google Document AI(Form Parser) │ 欄のキーと値、協力会社の表、是正確認の□、信頼度 ▼ Gemini API ── ① 記録データの行にそろえる │ ② 未完了の指摘と照らし、是正の記載の候補を書き出す ▼ Google Apps Script ── 巡視の空欄/人数の食い違い/協力会社の引き当て/未完了の日数 ▼ 現場ごとの記録の表・指摘台帳の「確認待ち」(印と日誌の写しのリンク) ▼ 【本社の安全の担当が印の付いた行を確かめ、台帳を是正済みにする】 ▼ 現場の所長への確認/月次の安全衛生協議会の資料
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence |
| 生成AI | Gemini API(記録データの行にそろえ、是正の記載の候補を書き出す) | Claude API、OpenAI API |
| 連携 | Google Apps Script(フォルダの確認、各APIの呼び出し、シートへの書き込み) | Python |
| 差異計算 | Google Apps Script(人数の合計、巡視の空欄、未完了の日数) | Python |
| 保管 | Google ドライブ(日誌のPDFと読み取り結果) | 社内のファイルサーバー |
新しく足すのは、協力会社の呼び名の一覧と、指摘台帳の「確認待ち」の列です。 日誌の会社名は「○○建設」「○○」「○○(とび)」と書き方がまちまちです。協力会社のコードに引き当てるための呼び名の一覧を、安全の担当が作ります。
土台は Document AI の Form Parser です。 公式のプロセッサ一覧では、OCRのテキストに加えてキーと値のペア、チェックボックス、表を抽出するとされ、言語の一覧で日本語(ja)は手書きに対応する言語として示されています。日誌の「天候」「合計人数」はキーと値のペアとして、協力会社ごとの行は表として、是正確認の□はチェックボックスとして読めます。
Form Parser の注意書きのうち、この題材で効くのは2つです。 表はセルが行や列にまたがらない単純なものだけが対象とされていること、値が空のキーと値のペアは確実には読み取れないとされていることです。協力会社の表で「作業内容」の欄を2行にまたがって書いた日誌は、行がずれて返ることがあります(第7章)。
処理する場所は、リージョンの一覧から選びます。 マルチリージョンの us と eu、シンガポール(asia-southeast1)などがあり、日本のリージョンはありません。 日誌には発注者の建物の工程と協力会社の名前が書かれるので、発注者との契約や自社の決まりに照らして、国外で処理してよいかを導入前に確かめます(第13章)。
03どうやって実装するのか
処理の起点を決める
Apps Script の時間主導型トリガーで、毎日夜に1回動かします。 公式のページでは、時間主導型のトリガーは毎分から月1回までの間隔で設定でき、実行の時刻はわずかにずれることがあるとされています。日誌は夕方の片付けの後にスキャンされるので、夜に1回まとめて動かせば、翌朝に担当が出社したときには印が付いています。
数分おきにしないのは、日誌が1日の終わりにしか完成しないためです。 日中に書きかけの日誌がスキャンされることは少なく、夜にまとめて読めば、同じ現場の日誌を1日1回だけ照らせば済みます。 遅れて保存された日誌は、翌日の実行で拾います。
処理が終わったPDFは、現場ごとの「処理済み」フォルダへ移します。 移すのは、記録の表と台帳への書き込みが終わったときだけです。「受付」フォルダに残っている数が、そのまま未処理の数になります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 日誌のPDF | スキャンした画像。保存した日時、保存したフォルダ(現場) | 現場ごとの「受付」フォルダ |
| 読み取り結果 | 欄のキーと値、協力会社の表のセル、□の印、各要素の信頼度と位置 | Google Document AI |
| 未完了の指摘の一覧 | その現場の指摘の番号、指摘日、指摘事項、場所 | 指摘台帳(状態が「未完了」の行) |
| 協力会社の呼び名の一覧 | 日誌に書かれうる会社の呼び方と、協力会社のコード | 新しく作る一覧 |
| 現場の一覧 | 現場コード、現場名、所長、作業日のカレンダー(休工日) | 現場の台帳のシート |
| 確認の決まり | 必須の欄、未完了の指摘を確かめる日数 | 安全品質部で決める表 |
質を決めるのは、現場の作業日のカレンダーです。 巡視の欄の空欄を拾うには、その日が作業日だったかが分からなければなりません。休工日の日誌が届かないことを「提出漏れ」と扱うと、毎週日曜に25現場分の印が付きます。
未完了の指摘を何日で確かめるかは、安全品質部で決めます。 この構成は決めた日数で機械的に印を付けるだけで、是正の期限そのものは、指摘したときに所長が決めた内容が台帳に入っている前提です。
データの取得方法を決める
Apps Script は、現場ごとの「受付」フォルダの getFiles() で新しいPDFを探し、Form Parser のプロセッサに送ります。日誌は1枚か2枚なので、最大15ページのオンラインの処理で足ります。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 見出しの欄 | 各ページの formFields(fieldName/fieldValue) | 日付、天候、合計人数、新規入場者の人数 |
| 協力会社の表 | 各ページの tables(headerRows/bodyRows のセル) | 会社名・職種・人数・作業内容・作業場所 |
| 是正確認の印 | fieldValue の valueType(filled_checkbox/unfilled_checkbox) | 巡視の指摘の是正確認 |
| 全文 | 応答の text | 指示事項、巡視の記録の自由記述 |
| 信頼度と位置 | 各要素の layout の confidence・boundingPoly | 読めない値の区別と、写しの該当箇所 |
公式のページでは、Form Parser の表のセルの rowSpan と colSpan は常に1とされています。2行にまたがって書かれた作業内容は、2つの行に分かれて返ることがあり、2行目は会社名と人数が空の行になります。これを1つの行に戻すのは、次の生成AIの仕事です。
未完了の指摘の一覧は、その現場の分だけを指摘台帳から読みます。 他の現場の指摘を混ぜると、似た指摘(「開口部の養生」はどの現場にもあります)を別の現場の是正と結びつけてしまいます。
AIへ渡す前に整形する
- 形式の確認 … 公式の対応形式は PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などです。現場の複合機の出力はPDFにそろえます
- 解像度の確認 … 公式のページでは、スキャンは最低200dpiが望ましく、300dpi以上が一般に最もよいとされています。現場の複合機の既定の設定を300dpiに変えてもらいます
- 現場の決定 … 保存されたフォルダから現場コードを決めます。日誌の現場名の欄は照らし合わせに使うだけにします
- 日付の確認 … 日誌の日付と保存した日が大きく離れていれば、前の日の書き忘れか、日付の書き間違いの印を付けます
- 重複の確認 … 同じ現場・同じ日付の日誌が2枚あれば、書き直しか二重のスキャンかを担当に確かめる印を付けます
- 未完了の指摘を添える … その現場の未完了の指摘を、番号・指摘日・指摘事項・場所だけにして添えます
3番目でフォルダから現場を決めるのは、日誌の現場名が略称で書かれることが多いためです。 「○○マンション新築」が「○○M」と書かれていても、保存されたフォルダが現場を決めます。 現場名の欄とフォルダが食い違ったときだけ、印を付けます。
AIに処理させる
させるのは2つです。読み取り結果を記録データの行に書かれたとおりに写すことと、未完了の指摘について、是正の済みがはっきり書かれた記述を探して写すことです。 人数の合計、巡視の空欄、未完了の日数は、Apps Script の規則で確かめます。
| させること | 中身 | 判断できないときの扱い |
|---|---|---|
| 見出しの写し | 日付、天候、合計人数、新規入場者の人数 | 読めなければ unreadable、空欄なら blank |
| 協力会社の行の写し | 会社名(書かれたとおり)・職種・人数・作業内容・作業場所 | 人数が読めなければ unreadable |
| 行のそろえ直し | 2行にまたがって分かれた作業内容を、1つの会社の行に戻す | 戻せなければ table_broken |
| 巡視の記録の写し | 時刻、巡視者、指摘事項、是正の指示、是正確認の□ | 巡視の欄が空なら patrol_blank |
| 是正の記載の候補 | 未完了の指摘ごとに、日誌の中で是正の済みがはっきり書かれた記述 | 無ければ no_mention、あいまいなら unclear |
5行目が、AIを使う理由です。 是正の記載は「昨日指摘の2F東開口部、手すり復旧済み」のように、台帳の指摘事項とは違う言葉で書かれます。 どの指摘のことかを場所と内容から結びつけるのは、決まった規則では書きにくい作業です。
| させないこと | 理由 |
|---|---|
| 是正済みと判定する | 台帳の状態を変えるのは、記述を確かめた人 |
| 「確認」「点検」を是正済みと読む | 見ただけで直したとは限らない |
| 人数の合計を合わせる | 合わないことが、書き落としの手がかり |
| 会社名を似た協力会社に寄せる | 呼び名の一覧で引く。引けなければ人が決める |
| 指摘事項の危険度を決める | 作業を止めるかは所長と安全の担当が決める |
2行目がいちばん大事です。 「開口部の養生を確認」は、手すりを戻したことを意味するとは限りません。「確認」「点検」「注意した」を是正済みと読むと、直っていない開口部が台帳の上で閉じられます。 そうした記述は unclear にして、人が日誌を読んで決めます。
指示内容を固定する
あなたは建設会社の安全品質部の担当で、現場の安全日誌の読み取り結果を、
記録データに写す立場です。OCRが返した結果だけを見て、
書かれていることを写してください。推測で埋めないでください。
【写す項目】
見出し:diary_date、weather、total_workers、new_entrants
協力会社の行:company_text(書かれたとおり)、trade、workers、work、place
巡視:patrol_time、patrol_by、finding、instruction、checked(□の印)
【厳守事項】
- 人数は書かれたとおりの文字列で写してください。
協力会社ごとの人数の合計と total_workers が合わなくても、直さないでください。
- 会社名は書かれたとおりに写してください。正式な社名に直さないでください。
- 欄が空欄なら blank、文字はあるが読めなければ unreadable にしてください。
- 作業内容が2行に分かれ、2行目の会社名と人数が空のときは、
前の行の続きとしてつなげてください。つなげられなければ
table_broken を true にし、無理に行を作らないでください。
- 巡視の記録が何も書かれていなければ patrol_blank を true にしてください。
【是正の記載の探し方】
下の「未完了の指摘」それぞれについて、この日誌の中に、
その指摘が直された・是正された・復旧したとはっきり書かれた記述があれば、
mentions に指摘の番号と、その記述をそのまま写してください。
- 「確認した」「点検した」「注意した」「指導した」だけの記述は、
直したことにはなりません。status を unclear にしてください。
- 場所か内容のどちらかしか一致しない記述も unclear にしてください。
- 該当する記述が無ければ no_mention にしてください。
- 是正済みかどうかの結論は書かないでください。
【未完了の指摘】{open_findings}
【読み取り結果】{ocr_result}
「確認した」を是正と読まない、を名指しで書いているのは、日誌にこの言葉がいちばん多く出るためです。 何も言わなければ、指摘と同じ場所で「確認」と書かれた記述を、是正の記載として返します。禁じたい言葉を並べることで、unclear の側に倒します。
未完了の指摘をAIに渡しているのは、結びつけのためだけです。 指摘の一覧を見せると「どれかは直っているはず」と寄せる心配がありますが、記述をそのまま写させ、結論を書かせないことで、寄せた結果が台帳に入らないようにしています。
出力形式を固定する
次の形のJSONで受け取ります。 Gemini API の構造化出力(/v1beta/interactions に response_format として mime_type: application/json と schema を渡す方式)を使い、形を固定します。
{
"document_type": "safety_diary",
"header": [
{ "item": "diary_date | weather | total_workers | new_entrants",
"value": "", "status": "read | blank | unreadable" }
],
"companies": [
{ "company_text": "", "trade": "", "workers": "", "workers_status": "read | blank | unreadable",
"work": "", "place": "" }
],
"table_broken": false,
"patrol_blank": false,
"patrols": [
{ "patrol_time": "", "patrol_by": "", "finding": "", "instruction": "", "checked": "filled | unfilled | unclear" }
],
"mentions": [
{ "finding_no": "", "status": "mentioned | unclear | no_mention", "evidence": "" }
]
}
1つ目の理由は、記録の表と指摘台帳に書き分けられることです。 companies は現場ごとの記録の表へ、patrols の新しい指摘は指摘台帳の新しい行へ、mentions は台帳の既存の行の「確認待ち」の列へ入ります。
2つ目は、確かめを Apps Script の規則で持てることです。
| 条件 | 印 |
|---|---|
作業日なのに patrol_blank | no_patrol |
協力会社ごとの人数の合計と total_workers が合わない | count_mismatch |
| 会社名が呼び名の一覧で引き当てられない | company_unknown |
未完了の指摘が、決めた日数を過ぎても mentioned にならない | overdue |
mentions が mentioned | close_candidate(担当が確かめて是正済みにする) |
mentions が unclear | check_mention |
必須の欄が blank、または作業日なのに日誌が届いていない | incomplete |
該当の欄が unreadable、または table_broken | check_image |
overdue と no_patrol は、他の印より先に担当に出します。 どちらも、現場の所長にその日のうちに確かめる必要がある印です。
公式のページでは、出力は構文として正しいJSONになるが、値の正しさはアプリケーションの側で確かめる必要があるとされています。finding_no が渡した未完了の指摘の一覧に無い番号なら、その行は捨てて check_mention にします。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 共有ドライブ | Apps Script の getFiles() | 現場ごとの「受付」フォルダの新しいPDFを探し、処理済みへ移す |
| Google Document AI | REST API の呼び出し | 欄、協力会社の表、□の印、信頼度を返す |
| Gemini API | REST API の呼び出し | 記録データの行と、是正の記載の候補 |
| 指摘台帳・現場の台帳 | スプレッドシートの読み取り | 未完了の指摘、作業日のカレンダー |
| 記録の表・指摘台帳 | 書き込み | 日誌の行、新しい指摘、「確認待ち」の列、印 |
指摘台帳の「状態」の列には、この構成から書き込みません。 書き込むのは「確認待ち」の列だけで、状態を「是正済み」に変えるのは、日誌の記述を確かめた担当の操作だけです。
現場への問い合わせも、この構成からは送りません。 所長に何を確かめるかは、印を見た担当が決めます。
人が確認する
本社の安全の担当が見るのは、印の付いた行だけです。 印の無い日誌は、現場ごとの件数を流し見て確認済みにします。
overdueとno_patrolを先に見る … 現場の所長に、指摘が是正されたか、巡視をしたかを確かめますclose_candidateを見る …evidenceの一文を日誌の写しで確かめ、直したことが読み取れれば台帳を是正済みにしますcheck_mentionを見る … 「確認した」などの記述を読み、必要なら所長に是正の状況を聞きますcount_mismatchとcompany_unknownを見る … 書き落としの会社がないかを確かめ、呼び名の一覧に新しい書き方を足しますcheck_imageとincompleteを見る … 写しの該当箇所を読み、読めないものは推測せず現場に確かめます
目標は、480件をならして1件2分です。 印の無い日誌は流し見で数十秒、overdue や close_candidate の付いた日誌は台帳と見比べるので数分かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 作業日なのに日誌が届かない | incomplete。翌朝に担当が現場に確かめる |
| 協力会社の表の行がずれて返る | AIが行をそろえ直す。戻せなければ table_broken で担当へ |
| 日誌の日付と保存した日が離れている | 書き忘れの後書きか、日付の誤りか。担当が確かめる |
| 同じ日付の日誌が2枚ある | 重複の印。どちらが正かを担当が決め、古いほうを自動で消さない |
| AIが一覧に無い指摘の番号を返す | その行を捨てて check_mention |
| 指摘が他の現場の協力会社に関わる | 台帳は指摘した現場の行のまま。現場をまたいで結びつけない |
| OCR・AIが応答しない | PDFを「受付」フォルダに残す。翌日の実行で拾い直す |
| 1回の実行が長くなる | 公式の上限は1回6分。現場ごとに実行を分け、続きを次の実行に回す |
2行目が、この構成の数字を守る行です。 行がずれたまま写すと、ある会社の人数が隣の会社に付き、その日その会社が何人で何をしていたかの記録が入れ替わります。
記録を残す
- 元の日誌のPDFと、保存した日時・保存したフォルダ
- OCRが返したJSONの全文と、Gemini API の応答の全文
- 照らすときに渡した未完了の指摘の一覧(そのときの台帳の状態)
- 担当が台帳を是正済みにした記録 … どの指摘を、どの日誌のどの記述で、いつ、誰が
- 付いた印と、所長への確認の結果
- 現場ごとの
no_patrolとoverdueの件数
4つ目が、この構成でいちばん大事な記録です。 指摘が是正済みになった根拠が日誌のどの一文かが残っていれば、後で同じ場所で災害が起きたとき、いつ誰がどの記述で閉じたかを説明できます。
最後の行は、月次の安全衛生協議会の資料になります。 巡視の空欄や是正の遅れが特定の現場に偏っていれば、その現場の体制に理由があります。
04実装レベルの3段階
半自動化で、1件5分が3分程度になります。 写す作業は無くなりますが、是正の記載を前の指摘と照らす作業と、記入漏れの確認は目で行う作業として残ります。 本格構成で2分になり、この段階が本記事の想定です。 差が大きいのは、是正の記載の結びつけと記入漏れの確認が、印として朝に並んでいるためです。 段階を飛ばさないでください。 半自動化の表を1か月見ると、行がずれやすい書き方と、呼び名の一覧に無い会社の書き方が分かります。
05工数削減シミュレーション
導入後 480件 × 2分 ÷ 60 = 16 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 元請として同時に20〜30の現場を持ち、各現場の所長や職員が紙の安全日誌に作業内容・協力会社ごとの人数・朝礼の指示事項・巡視の記録を毎日手書きしている建設会社。本社の安全の担当が日誌を集めて表に写し、巡視で出た指摘事項が是正されたかを現場ごとに追いかけている場合。指摘事項の是正の確認が漏れ、同じ指摘が翌月の巡視でまた出ることがある場合。
- 安全日誌をすでに施工管理のアプリや電子の書式で書いており、手書きの日誌がほとんど無い場合。現場が数か所で、本社の担当が日誌を目で見て足りる場合。現場の記録を国外のリージョンで処理することを、発注者との契約や自社の決まりで認められない場合。なお、指摘事項の是正が十分か、作業を止めるべきかの判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の日誌から、是正済みの書き方が違う日、協力会社の多い日、巡視の欄が空の日を含めて30枚を選ぶ
- その30枚について、当時の指摘台帳の記録と、担当のメモを用意する
- 日誌の画像を手元のAIサービスの画面に1枚ずつ貼り付ける
- 「この安全日誌の日付、協力会社ごとの会社名・人数・作業内容、合計人数、巡視の指摘事項を、書かれたとおりに写してください。人数の合計を合わせないでください。次の指摘について、直したとはっきり書かれた記述があれば写してください。『確認した』だけのものは分けてください」と指示し、当時の未完了の指摘を添える
- 写された値と是正の記載を、当時の台帳と比べる
| 出てきた内容 | 判断 |
|---|---|
| 当時の台帳と同じ指摘が、同じ日誌で是正の記載ありと出た | OCRと Apps Script の連携に進む |
| 「確認した」を是正の記載として返した | 指示の書き方で直る。構成は有効 |
| 協力会社の表の行がずれる | 書き方の傾向を見る。直らなければ書式の見直しを現場と相談 |
| 読めない欄が多い | スキャンの解像度が先 |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 「確認した」で是正済みになる | 禁じる言葉を指示に並べ、unclear に倒す。 状態は人が変える |
| 人数の合計をAIが合わせる | 帳尻を合わせないことを指示に書く |
| 2行にまたがる作業内容で行がずれる | 単純な表だけが対象。AIに行をつなげさせ、戻せなければ人へ |
| 休工日に提出漏れの印が付く | 現場ごとの作業日のカレンダーを持つ |
| 他の現場の指摘と結びつく | 未完了の指摘はその現場の分だけ渡す |
| 協力会社が引き当てられない | 呼び名の一覧を作り、確認のたびに足す |
| 空欄と読めない欄が混ざる | 値が空のキーと値は確実に読めない。全文と信頼度で分ける |
| 現場の複合機の解像度が低い | 200dpi以上が望ましい。既定の設定を300dpiに変えてもらう |
| 国外での処理を確かめていない | 日本のリージョンが無い。発注者との契約を先に確かめる |
上の2行が、この構成の失敗のほとんどです。 どちらも、AIが「そろっている」側に寄せてしまうという同じ型の失敗です。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 現場名と工程、協力会社の名前と人数、作業の内容と場所、巡視の指摘事項です。作業員一人ひとりの名前は扱わない書式を前提にします。 ただし、工程と指摘事項は、発注者の建物の情報と、自社の安全管理の弱点が書かれた情報です。
- 国外で処理することを確かめる … Document AI のリージョンの一覧に日本はありません。発注者との契約や自社の決まりで、現場の記録を国外のリージョンで処理してよいかを確かめます。認められない場合は、日本のリージョンで処理できる製品を検討します
- 生成AIに渡す範囲を絞る … 渡すのは、日誌の読み取り結果と、その現場の未完了の指摘だけです。他の現場の記録や協力会社の契約の情報は渡しません
- 台帳を自動で閉じない … 是正済みにするのは、日誌の記述を確かめた担当の操作だけです。直っていない開口部が台帳の上で閉じられることが、この構成で起こしうるいちばん重い誤りです
- 安全上の判断をAIにさせない … 指摘事項の危険度や、作業を止めるかどうかは、所長と安全の担当が決めます。印は確かめの順番を決めるためのもので、危険の大きさを表しません
- 原本を現場に残す … 拠り所は紙の日誌です。PDFやAIの写しは、原本の代わりにしません
- 記録の表と台帳の共有範囲を絞る … 現場ごとの指摘と是正の状況が並ぶため、安全品質部と各現場の所長だけが見られるようにします
誤りが起きた場合のリスクは、是正されていない指摘を閉じてしまうことと、巡視の空欄を見落とすことの2つです。 状態を人が変えることと、作業日を表で持つことで、設計の側から防ぎます。
10まず何から始めるか
1週目:呼び名の一覧と作業日のカレンダーを作る
先月の日誌を見て、協力会社がどう書かれているかを書き出し、協力会社のコードと対応させます。あわせて、現場ごとの作業日と休工日を表にし、未完了の指摘を何日で確かめるかを決めます。
2週目:30枚で試す
先月の日誌30枚を手元のAIサービスに貼り付けて、欄と指摘を写させ、是正の記載を探させます。「確認した」を是正として返していないか、人数の合計を合わせていないかを最優先で見ます。
3週目:国外での処理を確かめ、スキャンの設定をそろえる
現場の記録を国外のリージョンで処理してよいかを、発注者との契約と自社の決まりで確かめます。 あわせて、各現場の複合機の解像度を300dpiにそろえます。
4週目:フォルダから記録の表までをつなぐ
Apps Script で各現場の「受付」フォルダを確かめ、OCRを呼び、写した値を記録の表に書き出すところまで作ります。この時点では是正の記載の候補を出しません。
2か月目: 未完了の指摘との照らし合わせと印を足し、印の付いた行だけを見る運用を始めます。3か月目以降: 1件5分が何分になったかを実測します。是正の未完了が翌朝に見え、安全衛生協議会の資料が指摘台帳からそのまま作れるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 特定元方事業者が、作業が同一の場所で行われることによる労働災害を防ぐため、協議組織の設置及び運営、作業間の連絡及び調整、作業場所の巡視などの措置を講じなければならないこと(第30条第1項) | e-Gov 法令API: 労働安全衛生法 | 2026-10-13 |
| 特定元方事業者が、作業場所の巡視を毎作業日に少なくとも1回行わなければならないこと(第637条)。協議組織の会議を定期的に開催すること(第635条) | e-Gov 法令API: 労働安全衛生規則 | 2026-10-13 |
Form Parser がOCRのテキストに加えてキーと値のペア、チェックボックス、表を抽出すること。言語の一覧で日本語(ja)が手書きに対応する言語として示されていること。オンラインの処理が最大15ページであること | Google Cloud: Processor list | 2026-10-13 |
| 値の入っていないキーと値の組を確実には読み取れないこと。表はセルが行や列にまたがらない単純なものが対象であること | Google Cloud: Form Parser | 2026-10-13 |
formFields の fieldName/fieldValue、チェックボックスの valueType(filled_checkbox/unfilled_checkbox)、layout の confidence・boundingPoly、表の headerRows/bodyRows と、Form Parser では rowSpan・colSpan が常に1であること | Google Cloud: Handle the processing response | 2026-10-13 |
| 対応形式が PDF、GIF、TIFF、JPEG、PNG、BMP、WebP であること。スキャンは最低200dpiが望ましく、300dpi以上が一般に最もよいこと | Google Cloud: Supported files | 2026-10-13 |
マルチリージョンが us と eu で、単一リージョンにシンガポール(asia-southeast1)などがあり、日本のリージョンが一覧に無いこと | Google Cloud: Regional and multi-regional support | 2026-10-13 |
構造化出力が /v1beta/interactions に response_format(mime_type: application/json と schema)を付けて指定すること。出力は構文として正しいJSONになるが、値の正しさはアプリケーションの側で確かめる必要があること | Gemini API: Structured output | 2026-10-13 |
| 時間主導型のトリガーが毎分から月1回までの間隔で設定でき、実行の時刻がわずかにずれることがあること | Apps Script: Installable triggers | 2026-10-13 |
| 1回の実行が6分までであること | Apps Script: Quotas | 2026-10-13 |
Folder.getFiles() でフォルダ内のファイルを取得できること | Apps Script: Class Folder | 2026-10-13 |
指摘事項の是正が十分か、作業を止めるべきか、現場の記録を外部のサービスで処理してよいかは、自社の安全管理の決まりと発注者との取り決めに沿って決めてください。 本記事は各製品の公式ページと法令で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1400)についてのご相談はこちらから。
