建設現場で毎朝手書きされる危険予知(KY)活動表を読み取り、危険のポイントと対策を工種・事故の型で分類して、対策の書き漏れと毎月の危険の傾向を安全担当へ出す
建設現場で職長が毎朝手書きする危険予知活動表を読み取り、危険のポイントと対策を工種と事故の型に分類します。対策の書き漏れはその日のうちに現場へ返し、毎月の危険の傾向を安全担当へ出します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- 建設/物流/製造
- 対象部門
- 品質管理/生産
- 対象業務
- 分類・仕分け/集計・分析
- 主な課題
- データ分析に時間がかかる/人手が足りない/確認ミスが多い
- AIで行う処理
- 分類
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 職長が朝の危険予知活動で表を書き、班の全員が署名する
- 表は現場事務所の棚に日付順にとじる
- 安全担当が巡回の日に、たまった表を束で開く
- 1枚ずつ、危険のポイントと対策がそろっているか、署名があるかを見る
- 気になった表は付箋を付け、所長に口頭で伝える
- 月末に、表の内容を工種と事故の型でスプレッドシートに手で数える
- 数えた結果を安全衛生協議会の資料に貼る
- 人職長が危険予知活動の後、表をスマートフォンで撮り、現場ごとの取込フォルダに保存する
- 自動Apps Script が15分おきに取込フォルダを見て、新しい画像を拾う
- 自動Document AI(Form Parser)が表の行と、欄ごとの文字と信頼度を返す
- 自動Claude API が、危険のポイントと対策の組を工種と事故の型に分類し、書き方の印を付ける
- 自動Apps Script が、対策の空欄、署名の欄の空き、読み取りに自信のない欄を規則で拾う
- 自動書き漏れのある表を、その日の昼までに現場の所長へ Google Chat で知らせる
- 人所長が職長に確かめ、対策を書き足すか、作業の前に話し合った内容を聞き取る
- 人安全担当が、AIの分類のうち `unclear` のものと、書き漏れの理由を確かめる
- 自動月末に、工種×事故の型の件数と前月との差を集計し、災害とヒヤリハットの件数と並べる
- 人安全担当が集計を読み、安全衛生協議会で取り上げる組み合わせを決める
各工程の詳しい説明を読む
- 職長が朝の危険予知活動で表を書き、班の全員が署名する
- 表は現場事務所の棚に日付順にとじる
- 安全担当が巡回の日に、たまった表を束で開く
- 1枚ずつ、危険のポイントと対策がそろっているか、署名があるかを見る
- 気になった表は付箋を付け、所長に口頭で伝える
- 月末に、表の内容を工種と事故の型でスプレッドシートに手で数える
- 数えた結果を安全衛生協議会の資料に貼る
(a)書き漏れに気づくのが遅すぎる。 4番目で対策が空いた表を見つけても、その日の作業はとうに終わっています。 安全担当が伝えられるのは「次から書いてください」だけで、その日の班が何を気をつけたのかは誰にも分かりません。
(b)対策が「注意する」だけの表が多い。 「足元に注意する」「声を掛け合う」と書いてあれば、空欄ではないので目視では通ります。具体的な行動になっていない対策は、数えなければ多いのか少ないのかも分かりません。
(c)数える作業が後回しになる。 6番目は1枚ごとに工種と事故の型を読み分ける作業で、900枚を手で数える時間は月末にはありません。 結果として、協議会の資料は「今月の主な指摘事項」の文章だけになり、傾向は毎月の比べようがありません。
(d)分類が人によって違う。 「脚立から落ちる」を墜落・転落とするか転倒とするか、「資材が倒れてくる」を崩壊・倒壊とするか激突されとするかは、数える人によって分かれます。 分け方の決まりが紙に書かれていないためです。
- 【人】 職長が危険予知活動の後、表をスマートフォンで撮り、現場ごとの取込フォルダに保存する
- 【自動】 Apps Script が15分おきに取込フォルダを見て、新しい画像を拾う
- 【自動】 Document AI(Form Parser)が表の行と、欄ごとの文字と信頼度を返す
- 【自動】 Claude API が、危険のポイントと対策の組を工種と事故の型に分類し、書き方の印を付ける
- 【自動】 Apps Script が、対策の空欄、署名の欄の空き、読み取りに自信のない欄を規則で拾う
- 【自動】 書き漏れのある表を、その日の昼までに現場の所長へ Google Chat で知らせる
- 【人】 所長が職長に確かめ、対策を書き足すか、作業の前に話し合った内容を聞き取る
- 【人】 安全担当が、AIの分類のうち
unclearのものと、書き漏れの理由を確かめる - 【自動】 月末に、工種×事故の型の件数と前月との差を集計し、災害とヒヤリハットの件数と並べる
- 【人】 安全担当が集計を読み、安全衛生協議会で取り上げる組み合わせを決める
6番目が、この設計の分かれ目です。 書き漏れを月末ではなく当日の昼までに戻せれば、午後の作業の前に班で話し直すことができます。 全件を人が見てから戻す設計にすると、また巡回の日まで遅れます。
10番目を人に残しているのも、意図してのことです。 件数の多い組み合わせが危ない組み合わせとは限りません。挙がっていない組み合わせのほうに、見落としがあることもあります。 どれを取り上げるかは、現場の工程を知る人が決めます。
02今回想定するシステム構成
危険予知活動表(手書き、A4横1枚) │ 職長がスマートフォンで撮影 ▼【トリガー】Apps Script の時間主導型トリガー(15分おき) Google Apps Script ── 形式・現場コード・撮影日の確認 ▼ Google Document AI(Form Parser) │ 表の行と列、欄の文字、信頼度を返す ▼ Google Apps Script ── 行ごとに「作業/危険のポイント/対策」の組にまとめる ▼ Claude API ── 構造化出力で分類する │ 工種/事故の型/対策の書き方(具体的・抽象的・空欄) ▼ Google Apps Script ── 書き漏れの規則と信頼度で振り分け │ ok/no_measure/vague_measure/no_signature/unreadable ├──▶ 当日の書き漏れの通知(現場の所長へ Google Chat) └──▶ 分類の台帳(スプレッドシート) ▼ 【月末】工種×事故の型の集計 ──【安全担当が読み、協議会の議題を決める】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence |
| 生成AI | Claude API(工種・事故の型の分類と対策の書き方の印) | Gemini API、OpenAI API |
| 連携 | Google Apps Script(取込フォルダの監視、行のまとめ、通知、台帳への書き込み) | Python |
| 集計 | Google Apps Script(工種×事故の型の月次集計と前月との差) | Python |
| 保管 | Google ドライブ(共有ドライブ)、Google スプレッドシート | 社内のファイルサーバー |
新しく作るのは、工種の一覧と、事故の型の分け方の決まりの2つです。 工種の一覧は、自社が工程表で使っている工種の名前をそのまま並べます。事故の型は、職場のあんぜんサイトの21分類を使い、迷いやすい組み合わせの決め方を一覧に書き足します。
土台は Document AI の Form Parser です。 公式のプロセッサ一覧では、OCRのテキストに加えて、キーと値のペア、チェックボックス、表を抽出するとされ、言語の一覧で日本語(ja)は手書きに対応する言語として示されています。活動表は「作業内容」「危険のポイント」「対策」が列に並ぶ表なので、表の抽出がそのまま使えます。
Form Parser には、この題材で効く注意書きが3つあります。 1つは、表の抽出が行や列をまたぐセルの無い、単純な表を対象にしていること。2つ目は、ラジオボタンの読み取りに対応しないこと。3つ目は、値の入っていないキーと値の組を確実には読み取れないことです。活動表の様式を、この3つに合わせて直すところから始めます(第7章)。
処理する場所にも注意が要ります。 Document AI のリージョンの一覧には、マルチリージョンの us と eu のほか、シンガポール(asia-southeast1)などの単一リージョンが並んでいますが、日本のリージョンはありません。 活動表には作業員の氏名の署名が入るので、国外で処理してよいかを先に社内で確かめます。
03どうやって実装するのか
処理の起点を決める
職長が危険予知活動の後に、表をスマートフォンで撮って現場ごとの取込フォルダに保存することを起点にします。 現場事務所にスキャナが無いことが多いため、撮影を前提にします。ファイル名は「現場コード_日付_班名」にし、共有ドライブのアプリから保存します。
Apps Script の時間主導型トリガーが、15分おきに10現場の取込フォルダを順に見ます。 朝の危険予知活動は8時台に集中するので、9時から11時のあいだに大半の表が届きます。 1回の実行で扱う枚数に上限を置き、残りは次の実行に回します。処理済みのフォルダへ移すのは、台帳への書き込みまで成功したときだけです。取込フォルダに残っている枚数が、そのまま未処理の枚数になります。
11時を過ぎても表が1枚も届いていない現場は、所長に知らせます。 撮り忘れなのか、雨天で作業が中止なのかは、この仕組みからは分かりません。届いていないことを知らせるだけにして、理由は所長が返します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 活動表の画像 | JPEG。現場コード、日付、班名 | 現場の取込フォルダ |
| 読み取り結果 | 表の行と列、欄の文字、要素ごとの信頼度 | Document AI(Form Parser) |
| 工種の一覧 | 工種の名前、よく書かれる言い方(「鉄筋」「配筋」「鉄筋組立」など) | 安全環境部で用意する一覧 |
| 事故の型の決まり | 21分類の名前と、迷いやすい例の決め方 | 安全環境部で用意する一覧 |
| 現場の工程 | その日の主な工種と、協力会社の名前 | 工事部の週間工程表 |
| 災害とヒヤリハットの記録 | 発生日、工種、事故の型 | 安全環境部のスプレッドシート |
質を決めるのは、事故の型の決まりの一覧です。 職場のあんぜんサイトは、事故の型を「傷病を受けるもととなった起因物が関係した現象」と説明し、複数の型が競合する場合は災害防止対策を考える上で主要なものを選ぶとしています。どれを主要とするかは、自社で例を挙げて決めておかないと、AIも人も毎回違う答えを出します。
現場の工程は、工種の手がかりに使います。 「上の階で作業」としか書かれていない表でも、その日の工程が型枠の建込みなら、型枠の工種の候補として扱えます。 ただし、工程から工種を決めつけず、AIには候補として渡します。
データの取得方法を決める
読み取りは、Apps Script から Document AI の処理の API を呼ぶだけです。画像を渡すと、Document という形の応答が返ります。
| 取るもの | 応答のどこから | 何に使うか |
|---|---|---|
| 表の行と列 | pages[].tables[] の headerRows と bodyRows | 「作業内容」「危険のポイント」「対策」の組 |
| 項目名と値の組 | pages[].formFields[] の fieldName と fieldValue | 日付、現場名、班名、職長名、作業人数 |
| チェックボックス | fieldValue の valueType(filled_checkbox/unfilled_checkbox) | 「指差し唱和を行った」などの □ |
| 全文のテキスト | text と各要素の textAnchor | 表として取れなかった欄の拾い直し |
| 信頼度 | 各要素の layout の confidence | 手書きの字の読み取りが確かかの判定 |
行を「危険のポイントと対策の組」にまとめるのは Apps Script です。 同じ行の「危険のポイント」の升と「対策」の升を1組にし、組の番号を振ってから AI に渡します。 どの危険にどの対策が対応するかを AI に推し量らせると、空いていた対策の升が、隣の行の対策で埋まってしまいます。
署名の欄は、人数だけを数えます。 署名の文字を読んで氏名にする必要はありません。欄に何かが書かれている升の数を、表の上の「作業人数」と比べるだけです。 氏名を読まないので、AIに作業員の名前を渡さずに済みます。
AIへ渡す前に整形する
- 形式の確認 … Document AI の対象は PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などです。スマートフォンの写真の JPEG はそのまま入れられます
- 画質の確認 … 公式には、スキャンは最低200dpiが望ましく、300dpi以上が一般に最もよい結果になるとされています。A4の表を枠いっぱいに撮るよう、撮り方を1枚の紙で職長に配ります
- 圧縮の確認 … 非可逆の形式は、ファイルを小さくすると画質と精度が落ちることがあるとされています。チャットのアプリで送り直した画像は使いません
- 様式の確認 … 表の四隅にある様式の番号を読み、旧い様式は別の扱いにします
- 向きと傾きの確認 … 斜めに撮った画像は、向きを直してから入れます
- 重複の検知 … 同じ現場・日付・班の画像が2枚あれば、後のものを「撮り直し」として扱います
4番目のために、様式そのものを直します。 活動表によくある「危険のポイント」の升を2行にまたがせる作り、「指差し呼称 実施・未実施」を○で囲む作りは、Form Parser の苦手なところにそのまま当たります。行をまたぐセルを無くし、○で囲む欄を □ に変えた様式を1つ作り、全現場で使います。
AIに処理させる
させるのは、Apps Script がまとめた「作業/危険のポイント/対策」の組ごとに、工種と事故の型を選び、対策の書き方に印を付けることだけです。
| 付けるもの | 選び方 | 判断できないときの扱い |
|---|---|---|
| 工種 | 工種の一覧から1つ。作業内容と危険のポイントから選ぶ | 一覧に当たらなければ unclear |
| 事故の型 | 21分類から1つ。危険のポイントに書かれた現象から選ぶ | 現象が書かれていなければ unclear |
| 事故の型の根拠 | 危険のポイントのうち、型を決めた部分の文字列 | ― |
| 対策の書き方 | concrete(誰が何をするかが書かれている)/vague(「注意する」など行動が無い)/empty | 読めなければ unreadable |
| 対策の根拠 | 対策の欄の文字列をそのまま写したもの | ― |
事故の型は、危険のポイントの「〜になる」の部分で選ばせます。 危険予知活動の危険のポイントは、職場のあんぜんサイトの説明でも「危険要因とその要因がひきおこす現象」を出し合うものとされています。「脚立の天板に乗るので、バランスを崩して落ちる」なら、選ぶ手がかりは「落ちる」です。
vague の印は、対策の良し悪しではありません。 「足元に注意する」は、その班にとって十分な対策かもしれません。AIが見るのは、行動の形(〜を使う、〜を置く、〜してから〜する)で書かれているかどうかだけです。
| させないこと | 理由 |
|---|---|
| 対策が十分かどうかの判断 | 現場の状況を知る所長と安全担当が決める |
| 書かれていない危険の追加 | 書かれていない危険を足すと、班が予想できなかった事実が消える |
| 空いた対策の補完 | 書き漏れが見えなくなる |
| 作業を止めるかどうかの判断 | 現場の権限。AIの出力を作業中止の根拠にしない |
| 職長や班の評価 | 書き方の印は、表の書き方の記録にとどめる |
2行目がいちばん起きやすい失敗です。 「足場の上で鉄筋を運ぶ」と書かれた表を渡すと、AIは書かれていない「飛来・落下」の危険まで挙げようとします。挙げれば役に立ちそうに見えますが、それをすると「班が何を予想したか」の記録ではなくなります。
指示内容を固定する
あなたは建設会社の安全環境部で、現場の危険予知活動表を分類する立場です。
渡すのは、表の行を「作業/危険のポイント/対策」の組にまとめた読み取り結果です。
書かれている文字だけを見て分類してください。推測で埋めないでください。
【やること】組ごとに次を付けてください。
1. trade:工種の一覧から1つ。当たらなければ unclear
2. accident_type:事故の型の一覧から1つ。危険のポイントのうち
「〜になる」「〜する」にあたる現象の部分で選んでください。
現象が書かれていなければ unclear
3. accident_evidence:型を決めた根拠の文字列をそのまま写す
4. measure_style:concrete/vague/empty/unreadable
- concrete … 何を使う、どこに置く、何をしてから何をする、が書かれている
- vague ……… 「注意する」「気をつける」「確認する」だけで行動が書かれていない
- empty ……… 対策の欄に文字が無い
- unreadable … 文字はあるが読み取りの信頼度が低く確定できない
5. measure_text:対策の欄の文字列をそのまま写す
【厳守事項】
- 書かれていない危険を足さないでください。組の数を増やさないでください。
- 対策が空なら empty とし、他の行の対策で埋めないでください。
- 対策が十分かどうかは書かないでください。vague は書き方の印です。
- 型が2つ考えられるときは、事故の型の決まりの一覧に従ってください。
一覧に無い組み合わせなら unclear にし、候補を note に書いてください。
- 工程表の工種は候補です。表に書かれた作業内容と食い違うときは、
表の作業内容を優先し、note に食い違いを書いてください。
- 作業員の氏名や職長への評価を書かないでください。
【工種の一覧】{trades}
【事故の型の一覧と決まり】{accident_rules}
【その日の工程の工種(候補)】{schedule_trades}
【読み取り結果】{rows}
「書かれていない危険を足さない」を最初に書いているのは、AIが親切に危険を補うからです。 補われた危険は、もっともらしいほど目立ちません。月末の集計に「班が予想していなかった危険」が混ざると、集計の意味が逆になります。
型が2つ考えられるときの扱いを、一覧に委ねているのも同じ理由です。 その場で選ばせると、日によって選び方が変わります。決まりを一覧に書き、一覧に無ければ unclear にして人に回します。
出力形式を固定する
Claude API の構造化出力を使い、次の形のJSONで受け取ります。 output_config.format に JSON スキーマを渡すと、応答がそのスキーマに沿った形になります。
{
"sheet_id": "S07_20261007_tobi",
"rows": [
{
"row_no": 1,
"work": "3階床 型枠の建込み",
"trade": "型枠",
"accident_type": "墜落・転落",
"accident_evidence": "開口部から落ちる",
"measure_style": "concrete",
"measure_text": "開口部に蓋をしてから作業する",
"note": ""
},
{
"row_no": 2,
"work": "資材の荷揚げ",
"trade": "unclear",
"accident_type": "飛来・落下",
"accident_evidence": "上から材料が落ちてくる",
"measure_style": "vague",
"measure_text": "上下作業に注意する",
"note": "工程表は型枠。表の作業内容からは工種を決められない"
}
]
}
1つ目の理由は、Apps Script がそのまま規則にかけられることです。 measure_style が empty の行があれば no_measure、vague だけの表は vague_measure として、同じ規則で全現場を振り分けます。
2つ目は、trade と accident_type を列挙の値に固定できることです。 スキーマの enum に工種の一覧と21分類を並べれば、「墜落」「転落・墜落」のような書き方の揺れが集計に入りません。 ただし公式は、列挙の値の大文字・小文字までは保証しないとしているので、照合は書き方の揺れを許す形で行います。
3つ目は、stop_reason で失敗を見分けられることです。 公式には、応答が max_tokens で打ち切られたときや断ったときは、スキーマに合わない出力になりうるとされています。Apps Script は stop_reason を見て、そのときは台帳に書かずにやり直します。
| 表の判定 | 条件 | 行き先 |
|---|---|---|
ok | すべての行が concrete、署名の数が作業人数とそろう | 台帳のみ |
no_measure | empty の行がある | 当日の通知 |
vague_measure | vague の行だけで concrete が無い | 当日の通知(参考) |
no_signature | 署名の升の数が作業人数より少ない | 当日の通知 |
unreadable | unreadable または信頼度の低い升がある | 安全担当の確認 |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 取込フォルダ(共有ドライブ) | Apps Script の時間主導型トリガー | 新しい画像を拾う |
| Google Document AI | API呼び出し | 表の行と列、欄の文字、信頼度を返す |
| Claude API | API呼び出し(構造化出力) | 工種・事故の型・対策の書き方の印 |
| 分類の台帳(スプレッドシート) | Apps Script の書き込み | 行ごとの分類と表の判定 |
| Google Chat | Apps Script からの投稿 | 現場の所長への当日の通知 |
台帳は、行ごとに1行にします。 1枚の表が4行なら4行です。月末の集計は、この台帳の工種と事故の型を数えるだけになります。 災害とヒヤリハットの記録も同じ事故の型の列を持つので、同じ升目で並べられます。
当日の通知に入れるのは、表の画像へのリンクと、どの行の何が空いているかだけです。 AIが付けた事故の型は通知に入れません。所長が見るべきなのは「対策が書かれていない行がある」という事実で、分類の正しさを現場で議論させないためです。
人が確認する
- 所長が当日の通知を見る …
no_measureとno_signatureは、職長に聞いて書き足すか、話し合った内容を通知の返信に書きます - 安全担当が
unreadableとunclearを見る … 画像を開き、読み取りと分類を直します。直した結果は台帳に「人が直した」として残します - 安全担当が
vague_measureを週に1回まとめて見る … 同じ職長に続いていれば、巡回の日に書き方を一緒に考えます - 月末の集計を読む … 件数の多い組み合わせだけでなく、災害やヒヤリハットが多いのに表に挙がっていない組み合わせを探します
2番目の直しを残すのは、決まりの一覧を育てるためです。 人が直した組み合わせを月に一度見直し、同じ直しが3回あれば一覧に決め方を書き足します。 そうすると unclear が減っていきます。
安全担当が開くのは、ならして全体の2割前後という想定です。 それより多い月は、撮り方が崩れているか、新しい協力会社が入って書き方が変わっています。
例外に対処する
| 起きること | 対応 |
|---|---|
| 画像が暗い・ぶれている | 信頼度の低い升が多ければ unreadable。所長へ撮り直しを頼む |
| 旧い様式の表 | 様式の番号で見分け、表として読めなければ全文から拾い、安全担当へ |
| 表が行をまたいで書かれている | 1つの危険が2行にわたるものは、Apps Script が対策の升の空きで結合を試み、迷えば unreadable |
| 外国籍の作業員が母語で書いた欄 | 読み取りはするが、分類は unclear にして安全担当へ |
| 活動表でない紙が撮られた | 表が見つからなければ分類せず、所長に戻す |
| 同じ班の表が2枚 | 後のものを撮り直しとして扱い、二重に数えない |
| 11時を過ぎて表が無い現場 | 所長へ知らせる。理由は所長が返す |
| Document AI や Claude API が応答しない | 取込フォルダに残し、次の実行でやり直す |
上から3行目までが大半を占めます。 どれもAIの問題ではなく、撮り方と様式の問題です。 判定の精度を上げるより、様式を直して撮り方の紙を配るほうが効きます。
記録を残す
- 活動表の画像と、現場コード・日付・班名・取り込んだ時刻
- Document AI が返したJSONの全文
- Claude API に渡した組と、返ってきた分類の全文、
stop_reason - そのとき使った工種の一覧と事故の型の決まりの版
- 表の判定と、当日の通知を送った時刻、所長の返信
- 人が直した分類(どの行を、何から何へ)
4つ目で一覧の版を残すのは、決まりが後から変わるためです。 「脚立からの転落」の扱いを変えると、過去の月との比べ方が変わります。当時の版が残っていないと、前月との差が決まりの変更によるものか、現場の変化によるものかが分かりません。
署名の升は数だけを残し、氏名は保存しません。
04実装レベルの3段階
最小構成は、分け方を確かめるための段階です。 900枚には使えません。 半自動化で、1枚4分が2分程度になります。 分類と台帳への記録は自動になりますが、書き漏れの拾い出しと所長への連絡が手で残ります。本格構成で1分になり、この段階が本記事の想定です。 差が大きいのは、当日の通知と月末の集計が、1枚ずつの手作業だからです。 段階を飛ばさないでください。 半自動化の台帳を1か月見ると、unclear の多い工種と、撮り方の崩れやすい現場が先に分かります。そこを直してから当日の通知を始めるほうが、所長への空振りの通知が減ります。
05工数削減シミュレーション
導入後 900件 × 1分 ÷ 60 = 15 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 同時に10前後の現場を持ち、各現場で職長が毎朝手書きの危険予知活動表を書いている建設会社。活動表は現場事務所の棚にたまるだけで、本社や支店の安全担当が月に一度めくって確かめている場合。危険のポイントだけ書いて対策が空いている、対策が「注意する」だけ、という表がどれくらいあるかを数えられていない場合。Google Workspace を使っている場合。
- 危険予知活動をすでにタブレットのアプリで入力しており、紙の活動表が残っていない場合。現場が1〜2か所で、安全担当が毎日すべての活動表を目で見られる場合。活動表の様式が職長ごとにばらばらで、共通の欄を決められない場合。なお、対策が十分かどうかの判断、作業を止めるかどうかの判断、労働災害の原因の分析は、この構成では代替できません。
07最小構成で試す方法
- 先月の活動表から、3現場分の30枚を選ぶ(うち数枚は、対策が空いている表を入れる)
- 30枚をスマートフォンで撮り直す
- 工種の一覧と、事故の型の21分類を用意する
- 手元のAIサービスの画面に1枚ずつ貼り、「危険のポイントごとに、工種を一覧から1つ、事故の型を21分類から1つ選んでください。対策が具体的な行動で書かれているか、注意だけか、空かを付けてください。書かれていない危険を足さないでください」と指示する
- 安全担当が同じ30枚を自分で分類し、突き合わせる
30枚は必ずやってください。 つなぐ前に、「読めれば分類できるのか」と「分け方が人とそろうか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 安全担当の分類とほぼ同じになった | Form Parser とのつなぎに進む |
| 事故の型が人とずれた | 決まりの一覧に例を足せば直る。構成は有効 |
| 書かれていない危険を足した | 指示の書き方で直る |
| 手書きが読めずに分類できない枚数が多い | 撮り方と様式が先。 AIの問題ではない |
2行目が出ることは珍しくありません。 ずれた組み合わせは、そのまま決まりの一覧の最初の項目になります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 行をまたぐ升で表が崩れる | Form Parser の表は単純な表が対象。行をまたぐセルを無くした様式にする |
| ○で囲む欄が読めない | ラジオボタンに対応しない。□ に変える |
| 空いた対策の升が返ってこない | 値の無いキーと値の組は確実には読めない。行の位置で組を作り、返ってこない升を空欄と決めつけない |
| 書かれていない危険をAIが足す | 指示で禁じ、組の数が入力と出力でそろうかを Apps Script で数える |
| 事故の型が日によって変わる | 決まりの一覧に例を書き、迷えば unclear |
| 写真が暗い・斜め | 撮り方の紙を配り、信頼度の低い升は撮り直し |
| チャットで送り直した画像を入れる | 非可逆の圧縮で精度が落ちうる。共有ドライブのアプリから直接保存する |
| 署名の氏名を読み取って保存する | 数だけを数える。氏名は読まない |
| 当日の通知が多すぎて読まれない | vague_measure は参考扱いにし、週に1回まとめる |
| 集計の多い順だけを見る | 災害とヒヤリハットが多いのに表に挙がらない組み合わせも見る |
上の3行が、この構成の失敗のほとんどです。 どれも Form Parser の公式の注意書きに書かれていることで、様式を先に直せば避けられます。 通知は最初は no_measure だけにし、慣れてから広げてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 現場の名前と工程、協力会社の名前、班の作業内容、そして署名の欄に書かれた作業員の氏名です。
- 作業員の氏名をAIに渡さない … 署名の升は数だけを数えます。Claude API に渡すのは「作業/危険のポイント/対策」の組だけです
- 処理する場所を先に決める … Document AI のリージョンに日本はありません。シンガポールなどの国外で処理してよいかを、情報システムの担当と確かめます
- AIの分類を作業中止の根拠にしない … 作業を止めるかは現場の権限です。分類は集計のための記録にとどめます
- 職長の評価に使わない …
vague_measureは書き方の印です。人事の評価や協力会社の選定に使うと、職長が無難な対策を書くだけになります - 元の画像を原本として残す … 読み取り結果や分類を、元の表の代わりにしません。労働基準監督署への説明などで求められるのは紙の表か画像です
- 災害の記録との突き合わせは安全環境部の中で行う … 災害の記録には被災者の情報が含まれます。AIに渡すのは工種と事故の型の件数だけにします
誤りが起きた場合のリスクは、書き漏れを見落とすことと、分類のずれで傾向を読み違えることの2つです。 前者は unreadable を ok に混ぜると起き、後者は決まりの一覧を育てないと起きます。どちらも人の確認の段で拾う設計にしています。
10まず何から始めるか
1週目:様式を直す
活動表の様式を、行をまたぐ升の無い表に直し、○で囲む欄を □ に変えます。 「作業内容」「危険のポイント」「対策」の3列と、署名の升、作業人数の欄を残します。協力会社の職長会で、新しい様式の書き方と撮り方を説明します。
2週目:30枚で試す
先月の表から30枚を選び、手元のAIサービスで工種と事故の型を分類させます。安全担当が自分で分類した結果と突き合わせ、ずれた組み合わせを書き出します。
3週目:決まりの一覧を作る
ずれた組み合わせを材料に、事故の型の決まりの一覧を作ります。 「脚立からの転落」「資材の倒れ」のように、迷いやすい例と決め方を並べます。あわせて工種の一覧を工程表からそろえます。
4週目:取込フォルダから台帳までをつなぐ
Apps Script で取込フォルダを見張り、Document AI と Claude API を呼んで台帳に書き出すところまで作ります。この時点では通知を出さず、台帳だけを安全担当が見ます。
2か月目: 書き漏れの規則を足し、no_measure だけを当日に所長へ通知します。3か月目以降: 月末の集計に災害とヒヤリハットの件数を並べ、安全衛生協議会の資料に使います。決まりの一覧に人の直しが反映され、unclear が1割を切った時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Form Parser がOCRのテキストに加えてキーと値のペア(エンティティとチェックボックス)、表、一般的なエンティティを抽出すること。言語の一覧で日本語(ja)が手書きに対応する言語として示されていること | Google Cloud: Processor list | 2026-10-07 |
| 表の抽出が行や列をまたぐセルの無い単純な表を対象にすること。チェックボックスのモデルがラジオボタンに対応しないこと。値の入っていないキーと値の組を確実には読み取れないこと | Google Cloud: Form Parser | 2026-10-07 |
formFields のチェックボックスが valueType の filled_checkbox/unfilled_checkbox で返ること。表が headerRows/bodyRows で返ること | Google Cloud: Handle the processing response | 2026-10-07 |
| 対応形式が PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などであること。スキャンは最低200dpiが望ましく300dpi以上が一般に最もよいこと。非可逆の形式でファイルを小さくすると精度が落ちうること | Google Cloud: Supported files | 2026-10-07 |
マルチリージョンが us と eu で、単一リージョンにシンガポール(asia-southeast1)などがあり、日本のリージョンが一覧に無いこと | Google Cloud: Regional and multi-regional support | 2026-10-07 |
output_config.format に JSON スキーマを渡して応答の形を固定できること。enum が使えること。列挙の値の大文字・小文字は保証されないこと。max_tokens で打ち切られたときや断ったときはスキーマに合わない出力になりうること | Claude API: Structured outputs | 2026-10-07 |
| 危険予知訓練が危険要因とその要因がひきおこす現象を出し合い、危険のポイントを絞り込み、対策と重点実施項目を決める4ラウンドで進めること | 厚生労働省 職場のあんぜんサイト: 危険予知訓練(KYT) | 2026-10-07 |
| 事故の型が傷病を受けるもととなった起因物が関係した現象であり、墜落・転落、はさまれ・巻き込まれ、飛来・落下などの21に分類されること。複数の型が競合する場合は主要なものを選ぶこと | 厚生労働省 職場のあんぜんサイト: 事故の型 | 2026-10-07 |
作業を止めるかどうか、対策が十分かどうかは、現場の所長と安全担当が決めてください。 本記事は各製品と厚生労働省の職場のあんぜんサイトで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0714)についてのご相談はこちらから。
