運送会社で運転者が毎日書く日常点検表を読み取り、「否」や異常の記載があるまま運行した車両と記入漏れを、運行管理者と整備管理者へ出す
運転者が毎日書く紙の日常点検表を読み取り、チェック欄の「良」「否」と異常の記載を車両台帳の車両・点検項目にそろえます。そのうえで点呼の記録と照らし、「否」や異常の記載があるのに運行した車両と、点検表が出ていない日を毎朝一覧にします。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- その他/物流
- 対象部門
- 物流/総務
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/判断支援/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 運転者が運行の前に点検を行い、点検表にチェックと異常の内容を書く
- 乗務前の点呼で点検表を出し、運行管理者が受け取って束に入れる
- 昼前か翌日に、運行管理者か事務担当が点検表を1枚ずつ見る
- 「否」に印があるもの、異常の内容が書かれているものを探し、整備管理者に回す
- 点検表の束と点呼記録簿を見比べ、運行した車両の点検表がそろっているかを確かめる
- 抜けている日があれば運転者に確認し、出し忘れなら回収する
- 月末に、車両ごとの異常の記載を車両台帳の備考に書き写す
- 人運転者が点検表を書き、点呼のときに出す(ここは変わらない)
- 人点呼が一段落したところで、事務担当が点検表の束を複合機でスキャンし、取り込みフォルダに保存する(1日2回)
- 自動定時のバッチが取り込みフォルダを見て、ファイルごとにOCRを呼ぶ
- 自動OCRがチェック欄の選択の状態と信頼度、手書きの文字と表のセルを返す
- 自動車両番号を車両台帳に、点検項目を項目マスタに名寄せする
- 自動項目ごとに `良` / `否` / `未記入` / `読取不可` を付ける
- 自動異常の内容欄の記述を、部位と「走行にかかわるか」の区分に整理する
- 自動点呼の記録と突き合わせ、「否や異常の記載があるのに運行した」「運行したのに点検表が無い」を拾う
- 自動運行管理者と整備管理者に、確認が要る車両と日の一覧を送る
- 人整備管理者が一覧を見て、現物と記録で確かめ、判断を記録する
- 人運行管理者が記入漏れの運転者に確認し、点検表を回収するか、指導を記録する
各工程の詳しい説明を読む
- 運転者が運行の前に点検を行い、点検表にチェックと異常の内容を書く
- 乗務前の点呼で点検表を出し、運行管理者が受け取って束に入れる
- 昼前か翌日に、運行管理者か事務担当が点検表を1枚ずつ見る
- 「否」に印があるもの、異常の内容が書かれているものを探し、整備管理者に回す
- 点検表の束と点呼記録簿を見比べ、運行した車両の点検表がそろっているかを確かめる
- 抜けている日があれば運転者に確認し、出し忘れなら回収する
- 月末に、車両ごとの異常の記載を車両台帳の備考に書き写す
(a)「否」の印に気づくのが遅れる。 点呼のときに受け取っても、その場で1枚ずつ読む時間はありません。ブレーキのきき具合の欄に「否」が付いていても、気づくのが昼前、つまり車両がすでに出たあとになることがあります。
(b)チェック欄と記入欄が食い違う。 全項目に「良」の印があるのに、下段に「左後輪の空気圧が低め」と書かれている。逆に「否」に印があるのに、内容欄は空白。どちらを正とするかを担当者がその場で決めているので、人によって扱いが分かれます。
(c)記入漏れが監査まで分からない。 点呼記録簿と点検表の束を突き合わせる5番目の作業は、手が空いた月にしか回りません。点検表の無い運行日があっても、見つかるのは月をまたいでからです。
(d)手書きの読みにくさ。 車両番号の書き方は運転者によって「12-34」「1234」とまちまちで、異常の内容は走り書きです。読み取りに迷った1枚は後回しになります。
- 【人】 運転者が点検表を書き、点呼のときに出す(ここは変わらない)
- 【人】 点呼が一段落したところで、事務担当が点検表の束を複合機でスキャンし、取り込みフォルダに保存する(1日2回)
- 【自動】 定時のバッチが取り込みフォルダを見て、ファイルごとにOCRを呼ぶ
- 【自動】 OCRがチェック欄の選択の状態と信頼度、手書きの文字と表のセルを返す
- 【自動】 車両番号を車両台帳に、点検項目を項目マスタに名寄せする
- 【自動】 項目ごとに
良/否/未記入/読取不可を付ける - 【自動】 異常の内容欄の記述を、部位と「走行にかかわるか」の区分に整理する
- 【自動】 点呼の記録と突き合わせ、「否や異常の記載があるのに運行した」「運行したのに点検表が無い」を拾う
- 【自動】 運行管理者と整備管理者に、確認が要る車両と日の一覧を送る
- 【人】 整備管理者が一覧を見て、現物と記録で確かめ、判断を記録する
- 【人】 運行管理者が記入漏れの運転者に確認し、点検表を回収するか、指導を記録する
6番目と8番目が、この設計の分かれ目です。 6番目で読み取りの結果を4つに分け、8番目で運行の事実と組み合わせます。人が開くのは、8番目で拾われた車両と日だけです。 全1,200枚を人が見直す設計にすると、40.0時間はほとんど減りません。
10番目の判断はAIに渡しません。 一覧は「確かめるべき組み合わせ」を並べたもので、運行させてよかったかの結論は書かれていません。
02今回想定するシステム構成
日常点検表(紙・手書き)
│ 点呼で受け取り、事務担当が束でスキャン(1日2回)
▼【トリガー】定時のバッチ(取り込みフォルダを確認)
Azure AI Document Intelligence(レイアウトモデル)
│ チェック欄の選択の状態と信頼度/手書きの文字/表のセル
▼
Python ── 車両台帳・項目マスタへの名寄せ、良/否/未記入/読取不可の判定
▼
Claude API ── 異常の内容欄の記述を部位と区分に整理(判断はしない)
▼
Python ── 点呼の記録との突き合わせ
│ ① 否・異常の記載あり × 運行あり × 可否判断の記録なし
│ ② 運行あり × 点検表なし
▼
確認一覧 ──▶【整備管理者】可否の判断と記録
└─▶【運行管理者】記入漏れの確認と回収| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(レイアウトモデル) | Google Document AI(Form Parser) |
| 集計 | Python(名寄せ、判定、点呼の記録との突き合わせ) | Google Apps Script |
| 生成AI | Claude API(異常の記述の整理) | OpenAI API、Gemini API |
| 保管 | 社内のファイルサーバー(スキャンの原本と一覧) | クラウドのストレージ |
車両台帳と点呼の記録は、新しく足すものではありません。 足すのは、OCRと、名寄せと突き合わせを行うスクリプトと、記述を整理する生成AIの3つです。最初の準備は、点検表の項目と項目マスタのコードの対応表を作ることです。
土台になるのは、Azure AI Document Intelligence のレイアウトモデルです。 テキスト、テーブル、選択マーク、ドキュメント構造を抽出するモデルで、選択マークには境界の多角形、信頼度、選択の状態(selected / unselected)が付いて返ります。 点検表の「良」「否」の欄がまさにこれに当たり、チェックが付いているかを、文字ではなく状態と信頼度で受け取れます。
日本語の手書きに対応していることも確かめてあります。 公式の言語サポートの表では、レイアウトモデルの手書きテキストの対応言語に日本語(ja)が含まれています。各テキスト行が手書きのスタイルかどうかも、信頼度スコアとともに styles に返ります。
入力はPDFと画像で、PDFとTIFFは最大2,000ページです。 ファイルサイズは有料(S0)レベルで500MB、Free(F0)レベルで4MB、Free レベルでは最初の2ページだけが処理されます。抽出できるテキストの最小の高さは、1024 × 768 ピクセルの画像で12ピクセルで、150dpiで約8ポイントの文字に当たります。点検表の記入欄が小さいので、スキャンの解像度はここから決めます。
03どうやって実装するのか
処理の起点を決める
1日2回の定時実行にします。 点呼が集中する早朝の便が出そろった時間帯と、夕方の帰庫が落ち着いた時間帯です。事務担当がその前にスキャンを終え、取り込みフォルダに置いておきます。
ファイル保存のたびに動かす形にしない理由は、点呼の記録との突き合わせにあります。 点検表を読んだだけでは「運行したか」が分からず、その日の点呼の記録がそろってから照らす必要があります。定時に、その時点までの点検表と点呼の記録をまとめて照らすほうが、取りこぼしが出ません。
処理を終えたファイルは処理済みフォルダへ移し、移すのは成功したときだけにします。 取り込みフォルダに残っている数が、そのまま未処理の数になります。加えて、前日分の突き合わせを翌朝にもう一度回します。 夕方以降に戻った車両や、遅れて出てきた点検表を拾うためです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 日常点検表 | 日付、車両番号、運転者名、走行距離計の値、点検項目ごとの「良」「否」、異常の内容、署名欄 | スキャンしたPDF |
| 読み取り結果 | 選択マークの状態と信頼度、手書きの文字、表のセル(行・列の位置) | Azure AI Document Intelligence |
| 車両台帳 | 車両コード、登録番号、社内の車番、営業所、車種、使用の状態(稼働/整備中/休車) | 車両台帳 |
| 項目マスタ | 点検表の行番号と項目コード、項目名、「走行にかかわる項目か」の区分 | 自社で用意する対応表 |
| 点呼の記録 | 日付、車両、運転者、乗務前点呼の時刻、点検の確認の欄 | 点呼記録簿 |
| 可否判断の記録 | 整備管理者が判断した日、車両、判断の内容(運行可/整備後運行/運行不可) | 整備管理者の記録 |
質を決めるのは、項目マスタと可否判断の記録の2つです。 項目マスタが無ければ、「表の3行目の否」が何の項目かを機械が知りようがありません。可否判断の記録が無ければ、整備管理者が口頭で「このまま出してよい」と判断した車両まで、毎朝一覧に載り続けます。
点呼の記録は、運行の事実の根拠として使います。 貨物自動車運送事業輸送安全規則は、乗務前の点呼で日常点検の実施またはその確認について報告を求め、確認を行うことを定め、点呼の記録を1年間保存することを求めています。「その日にその車両が運行したか」を、点呼の記録で決めます。
データの取得方法を決める
点検表: 複合機で束ごとスキャンし、1ファイルに複数枚が入ったPDFとして保存します。ファイル名に営業所コードとスキャン日時を入れます。1ページに1枚の点検表が入る前提で、ページごとにOCRの結果を分けて扱います。
OCRの呼び出し: モデルIDは prebuilt-layout です。結果のうち、次の4つを使います。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 選択マーク | 各ページの selectionMarks(state、confidence、polygon、span) | 「良」「否」のどちらに印があるか |
| 表とセル | tables の cells(rowIndex、columnIndex、content) | 選択マークがどの項目の行・どの列にあるか |
| 手書きの文字 | pages の words と lines(content、confidence) | 車両番号、日付、異常の内容 |
| 手書きの判定 | styles の isHandwritten と信頼度 | 印刷された見出しと記入の区別 |
選択マークと表を結び付けるのは span です。 選択マークは文書の全文の中での位置(offset と length)を持ち、表のセルも同じ全文の中の位置を持ちます。位置が重なるセルを探せば、その印がどの行のどの列にあるかが決まります。 行番号を項目マスタで項目コードに変えれば、「ブレーキのきき具合が否」という形になります。
点呼の記録と可否判断の記録: どちらも表から日付と車両で読み取るだけです。読み取りだけで、書き込みはしません。
AIへ渡す前に整形する
- ページの向きの補正 …
pagesのangleを見て、傾いたページは結果の座標を補正して扱います - 様式の確認 … ページの見出しに点検表の固定の文言があるかを見ます。別の書類(運転日報、伝票)が混ざったページは、点検をせずに取り分けます
- 画像と文字の大きさの確認 … 画像の寸法は50 × 50 ピクセルから10,000 × 10,000 ピクセルの間である必要があります。記入欄の文字が小さいので、スキャンの解像度を下げないように複合機の設定を固定します
- 車両番号の名寄せ … 書かれた文字列から数字の並びを取り出し、車両台帳の登録番号と社内の車番の両方で引きます。候補が1台に絞れないときは確定させず、
vehicle_unresolvedとして残します - 日付の解釈 … 「10/7」「7日」のような書き方を、スキャン日と営業所の稼働日から年月日に直します。スキャン日より後の日付、2日以上前の日付は確認に回します
- 重複の検知 … 同じ車両・同じ日の点検表が2枚あれば、両方を残して確認に回します。どちらかを捨てると、書き直した理由が消えます
4番目を軽く見ないでください。 名寄せに失敗した点検表は、点呼の記録と突き合わせられず、「点検表なし」の誤報と「誰のものでもない異常の記載」の2つを同時に生みます。
AIに処理させる
この構成には性質の違う2つのAI処理が入ります。1つ目はOCRで、選択マークの状態と手書きの文字を読みます。2つ目は生成AIで、異常の内容欄の自由記述を部位と区分に整理します。良/否の判定と、点呼の記録との突き合わせは、どちらのAIにもさせず、スクリプトで行います。
| 見るもの | 判定の仕方 | 判断できないときの扱い |
|---|---|---|
| 項目ごとの「良」「否」 | 行の中の選択マークの状態。「否」の列が selected なら 否 | 信頼度がしきい値未満なら 読取不可 |
| 印の付け忘れ | 行の「良」「否」がどちらも unselected | 未記入 |
| 両方に印 | 「良」「否」がどちらも selected | 読取不可(書き直しの可能性) |
| 異常の内容欄 | 手書きの文字が検出されたか | 文字があるのに信頼度が低ければ 読取不可 |
| 記述の整理 | 生成AIが部位と区分を付ける | 区分に迷えば 要確認 |
右端の列が、この構成でいちばん大事な区別です。 未記入 は運転者に確かめること、読取不可 はスキャンをやり直すか紙を見ることで、どちらも 否 とは扱いが違います。 何も検出されていなければ 未記入、検出されていて信頼度が低ければ 読取不可。根拠をOCRが返した状態と信頼度に置きます。
チェック欄と記入欄が食い違うものは、両方を残します。 全項目が 良 で、異常の内容欄に記述がある点検表は、checks は 良 のまま、free_text_present を真にして一覧に載せます。どちらかを正として書き換えると、第3章の(b)が機械の中で再現されます。
| させないこと | 理由 |
|---|---|
| 運行させてよいかの判断 | 整備管理者の権限。AIの結論が判断の代わりに読まれる |
| 異常の原因の推定 | 現物を見るのは整備管理者と整備工場 |
| 未記入の項目を「良」で埋める | 記入漏れという事実が消える |
| 車両番号の補完 | 似た番号に寄せると、別の車両の記録になる |
| 走行距離計の値の訂正 | 読めないものは読めないとして残す |
3行目がいちばん起きやすい失敗です。 他の項目がすべて「良」だと、印の無い1行も「良」と読みたくなります。埋めた瞬間に、点検の記入漏れが記録から消えます。
指示内容を固定する
生成AIに渡すのは、異常の内容欄の記述と、その点検表の車両の区分だけです。運転者名は渡しません。
あなたは運送会社の整備管理者を補佐する立場です。
日常点検表の「異常の内容」欄に運転者が手書きした記述(OCRの結果)を渡します。
記述を整理し、整備管理者が読む順番を決めるための区分を付けてください。
運行させてよいかの判断は整備管理者が行います。あなたは判断をしません。
【やること】
1. 記述を、部位ごとの項目に分けてください(1つの記述に複数の部位があれば分ける)
2. 部位は次の中から選んでください:
ブレーキ/タイヤ・ホイール/かじ取り/灯火装置/原動機/
バッテリー・電気/ワイパー・ウォッシャ/エアタンク/車体・その他
3. 各項目に、区分を次の中から付けてください:
走行関係 … ブレーキ、タイヤ、かじ取り、灯火装置など、走行や合図にかかわる記述
その他 … 外装の傷、室内の汚れなど、走行にかかわらない記述
要確認 … どちらか決められない記述
4. 記述の原文を quoted_text にそのまま写してください
【厳守事項】
- 記述に書かれていない症状、部位、原因を足さないでください。
「ブレーキが少し甘い」から「ブレーキ液の不足」を導かないでください。
- 「運行可」「運行不可」「整備が必要」「様子見でよい」に当たることを書かないでください。
- 読めない文字は □ のまま残してください。補って言い換えないでください。
- 「特になし」「異常なし」と同じ意味の記述は、items を空にして
no_defect_statement を true にしてください。
- 迷った場合は区分を「要確認」にしてください。
「その他」に寄せて目立たなくすることはしないでください。
- 数値(空気圧、距離など)は、記述にある値をそのまま写してください。
【車両の区分】{vehicle_class}
【異常の内容欄の記述(OCRの結果)】{free_text}
【記述の読み取りの信頼度】{free_text_confidence}
「迷ったら要確認、その他に寄せない」を書くのは、区分が一覧の並び順になるためです。 「その他」に入った記述は一覧の下に回り、読まれるのが遅れます。 判断に迷う記述ほど上に出すほうが、取り違えたときの害が小さくなります。
「整備が必要」と書かせない制約も外さないでください。 生成AIは親切に「点検を推奨します」と書き足します。それが一覧に載ると、整備管理者の判断の前に結論があるように読めてしまいます。
出力形式を固定する
点検表1枚ごとに、次の形のJSONを作ります。 checks はOCRの結果からスクリプトが作り、defects は生成AIが返し、flags は突き合わせのあとにスクリプトが付けます。
{
"sheet_id": "S01-20261007-0612-p14",
"inspection_date": "2026-10-07",
"vehicle": { "written": "12-34", "vehicle_code": "T-031", "resolved": true },
"checks": [
{ "item_code": "BRK-01", "item_name": "ブレーキのきき具合",
"status": "良 | 否 | 未記入 | 読取不可",
"mark_confidence": 0.98, "page_polygon": [] }
],
"free_text_present": true,
"defects": {
"no_defect_statement": false,
"items": [
{ "part": "タイヤ・ホイール", "category": "走行関係 | その他 | 要確認",
"quoted_text": "左後輪 空気圧 低め" }
]
},
"flags": {
"operated": true,
"decision_recorded": false,
"result": "operated_with_defect | missing_sheet | unreadable | ok"
}
}
生成AIの部分は構造化出力で受け取ります。Claude API では output_config の format に type: "json_schema" とスキーマを指定し、part と category を enum で固定します。 返るJSONはスキーマに沿うことが保証され、部位の書き方がそろうので、車両ごと・部位ごとの件数を数えられます。
ただし、スキーマで書けないことがあります。 数値の範囲(minimum、maximum)と文字列の長さの制約は使えません。走行距離計の値の妥当性は、スキーマではなくスクリプトの側で確かめます。
status と result を別の層に置くのが要です。 status は読み取りの事実、result は運行の事実と組み合わせた結果です。可否判断の記録が後から入れば、status を触らずに result だけが変わります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 取り込みフォルダ | 定時のバッチが読む | スキャンしたPDFの取得 |
| Azure AI Document Intelligence | API呼び出し(prebuilt-layout) | 選択マーク、表、手書きの文字 |
| 車両台帳・項目マスタ | 表の読み取り | 名寄せと項目コードへの変換 |
| Claude API | API呼び出し | 異常の記述の整理 |
| 点呼記録簿・可否判断の記録 | 表の読み取り | 運行の事実と判断の有無 |
| 確認一覧 | 表への書き出しとメールでの通知 | 整備管理者と運行管理者へ |
点呼の記録にも車両台帳にも書き込みません。 この構成が出すのは確認の一覧までで、点呼の記録は運行管理者が、可否判断の記録は整備管理者が、それぞれの責任で書くものです。 機械が書き足すと、誰が確かめたのかが記録から分からなくなります。
通知は2系統に分けます。operated_with_defect は整備管理者と運行管理者の両方へ、missing_sheet は運行管理者へ。 同じ一覧を全員に送ると、互いに相手が見たと思って誰も開きません。
人が確認する
人が開くのは、result が ok 以外の点検表だけです。
operated_with_defectを最初に見る(整備管理者) … 一覧のquoted_textと、点検表の画像の該当行を見ます。車両の状態を現物で確かめ、判断を記録しますunreadableを見る(事務担当) … 紙の原本を見て、良/否/未記入を人が付け直します。付け直したら、もう一度突き合わせに回しますmissing_sheetを見る(運行管理者) … 運転者に確かめ、出し忘れなら回収します。点検をしていなかったのか、紙を出し忘れたのかを分けて記録します- 判定を覆したら記録する … どの項目を、どちらに変えたかを残します
1番目で整備管理者が見るのは、AIの結論ではなく、印と記述の原文です。 一覧の上の段には画像の切り抜きを置き、整理した区分は横に添えるだけにします。選択マークと単語には多角形の座標が付いて返るので、その行だけを切り出して並べられます。
目標は、1,200枚をならして1枚0.5分です。 一覧に載るのは1割前後という想定で、それより多い月は、unreadable が増えているか、名寄せに失敗しています。
例外に対処する
| 起きること | 対応 |
|---|---|
| 車両番号が車両台帳で1台に絞れない | vehicle_unresolved として一覧へ。似た番号の車両に当てない |
| 同じ車両・同じ日の点検表が2枚ある | 両方を残して確認へ。新しいほうを正としない |
| 「良」「否」の両方に印がある | 読取不可 として紙を見る。書き直しの可能性が高い |
| 点呼の記録はあるが点検表が無い | missing_sheet。翌朝の再実行でも無ければ確定 |
| 点検表はあるが点呼の記録が無い | 運行していない車両の点検の可能性。一覧の別欄に出し、警告にしない |
| 異常の内容欄が読めない | 読取不可。「異常なし」として扱わない |
| 点検表でない書類が混ざる | 様式の確認で取り分け、事務担当に戻す |
| 車両が整備中・休車なのに点検表がある | 車両台帳の状態を確かめるよう事務担当へ |
| OCRや生成AIが応答しない | 取り込みフォルダに残す。処理済みへ移すのは成功時だけ |
上の4行が大半を占めます。 どれもAIの精度の問題ではなく、紙の書き方と、台帳の整い方の問題です。 車両番号の書き方を様式で固定する(あらかじめ印字した点検表を車両ごとに置く)ほうが、名寄せの工夫より効きます。
記録を残す
- スキャンした原本のPDFと、取り込んだ日時・営業所
- OCRが返したJSONの全文(選択マーク、表、単語、手書きの判定)
- 項目ごとの判定(
checks)と、そのとき使った項目マスタの版 - 生成AIに渡した記述と返った整理(
defects) - 突き合わせの結果(
flags)と、そのとき参照した点呼の記録と可否判断の記録の内容 - 人が判定を覆した記録 … どの項目を、どちらに変えたか
- 一覧を送った日時と、誰が開いて何を記録したか
5つ目で参照した記録の中身を残すのは、記録が後から足されるためです。 整備管理者が判断を後から書き足すと、過去の一覧の意味が変わります。当時なにが見えていたかが残っていないと、確認が遅れたのか記録が遅れたのかを区別できません。
04実装レベルの3段階
最小構成では枚数がさばけません。 1枚ずつ貼るので、1,200枚には使えません。確かめるための段階です。 半自動化で、1枚2分が0.5分程度になります。 全枚数を見る作業と、点呼記録簿との突き合わせが消え、人が触るのは一覧に載った1割前後だけになるからです。本記事が想定するのもここです。 本格構成では工数はそれ以上大きく下がりませんが、同じ車両の同じ部位に記載が繰り返されていることが、履歴から見えるようになります。
05工数削減シミュレーション
導入後 1,200件 × 0.5分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 事業用のトラックを数十台持つ運送会社で、運転者が紙の日常点検表に毎日チェックを付けて点呼のときに出しており、運行管理者や事務担当がその束を目で見て綴じている場合。異常の記載に気づくのが翌日以降になることがあり、記入漏れの指摘を監査で受けたことがある場合。点呼の記録を表や記録システムから日付・車両ごとに取り出せる場合。
- 車両が数台で、点呼のときに運行管理者がその場で全部の点検表を読める場合。日常点検をタブレットや車載端末への入力ですでに電子化しており、紙が無い場合は読み取りそのものが要りません。なお、異常のある車両を運行させてよいかの判断は整備管理者の権限であり、この構成では代替できません。
07最小構成で試す方法
- 先月の点検表から、1営業所の連続した5日分(約100枚)を選ぶ
- そのうち「否」に印があるもの、異常の内容が書かれたものが数枚入っていることを確かめる
- 1枚ずつ画像にして、手元のAIサービスの画面に貼り、次のように指示する
- 「この日常点検表の点検項目ごとに、良と否のどちらに印があるかを表にしてください。どちらにも印が無い行は『未記入』、判別できない行は『読取不可』としてください。異常の内容欄は原文のまま写してください。推測で埋めないでください」
- 出てきた表を、紙の点検表と1行ずつ見比べる
- 同じ5日分の点呼記録簿と見比べ、点検表の無い運行日を手で数える
5番目と6番目が目的です。 チェック欄が読めるかと、突き合わせで何件見つかるかを先に見ます。
| 出てきた内容 | 判断 |
|---|---|
| 印がほぼ正しく読め、未記入も拾えた | OCRのAPIと突き合わせのスクリプトに進む |
| 印の無い行を「良」で埋めた | 指示で直る。本番では印の判定をスクリプトで行う |
| 車両番号が読めない枚数が多い | 車両ごとに番号を印字した点検表に替えるのが先 |
| 印が欄からはみ出して判別できない | 様式のチェック欄を大きくする。AIの問題ではない |
3行目が出ることは珍しくありません。 番号を印字した点検表を車両に積めば、名寄せの手間ごと消えます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 印の無い行が「良」として扱われる | 未記入 を独立した値にする。 他の行から補わない |
| 汚れや折り目が「否」の印に読まれる | 選択マークの信頼度で分ける。低いものは 読取不可 で紙を見る |
| 印がどの項目の行か分からない | span で選択マークとセルを結び、行番号を項目マスタで引く |
| 様式を改訂したら項目がずれた | 項目マスタに版を持たせ、点検表の版の印字で切り替える |
| 車両番号の名寄せに失敗する | 車両ごとに番号を印字した点検表を積む。似た番号に当てない |
| チェック欄は全部「良」なのに記述がある | 両方を残し、free_text_present で一覧に載せる |
| 生成AIが「点検を推奨」と書き足す | 判断に当たる語を禁じ、区分は enum で固定する |
| 可否判断が口頭で、毎朝同じ車両が載る | 判断を書く様式を先に決める。 一覧から消すために記録を省かせない |
| 点呼の記録が遅れて入る | 前日分を翌朝に再実行し、missing_sheet は再実行後に確定する |
| 一覧を全員に送って誰も開かない | operated_with_defect と missing_sheet で送り先を分ける |
上の2行が、この構成の失敗のほとんどです。 判定の根拠を、OCRが返す状態と信頼度に置いてあるかで決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 運転者の氏名と署名、車両と運行の日付、点検の結果、異常の記述、点呼の記録。運転者ごとの記入の癖や記入漏れの回数が、機械で数えられる形になります。
- 運行の可否をAIに判断させない … 国土交通省のページは、日常点検の結果に基づく運行の可否の決定を整備管理者の権限として挙げています。一覧には事実の組み合わせだけを載せ、結論を書かない設計にしてください
- 生成AIに運転者名を渡さない … 記述の整理に要るのは記述と車両の区分だけです。OCRには点検表の画像を渡すため氏名がサービス側に渡りますが、データの所在地と、入力を学習に使わない契約かを確かめます
- 記入漏れの集計を、そのまま人事評価に使わない … 運転者ごとの
missing_sheetの回数は数えられますが、この構成の目的は点検の徹底であって評価ではありません。 評価に転用されると分かった時点で、運転者は異常の内容欄を空けるようになります - 点呼の記録と可否判断の記録に書き込まない … 誰が確かめたのかが記録の価値です。機械が書いた行が混ざると、その価値がなくなります
- 原本の保存を決める … 紙の点検表、スキャンしたPDF、OCRの結果のどれを、いつまで残すかを決めます。点検の記録の保存の方法は、整備管理規程と運行管理の担当に確認してください
- 判定の上書きを記録する … 人が
読取不可を良に付け直した記録は、後から「誰が良としたか」を説明する根拠になります
誤りが起きた場合のリスクは、「否」の印や異常の記載を見落として一覧に載らないことと、読めないものを「否」として車両を止めることの2つです。 前者は 未記入 や 読取不可 を 良 に混ぜると起き、後者は 読取不可 を 否 に混ぜると起きます。どちらも同じ区別から出ているので、そこだけは設計で守ります。
10まず何から始めるか
1週目:項目マスタと可否判断の記録の様式を作る
点検表の行ごとに項目コードを振り、「走行にかかわる項目か」の区分を付けます。整備管理者と一緒に作ってください。 あわせて、整備管理者が運行の可否を判断したときに書く様式(日付、車両、判断の内容)を決めます。AIはまだ使いません。
2週目:100枚で試す
1営業所の連続した5日分を手元のAIサービスに貼り、項目ごとの印を表にさせます。印の無い行を「良」で埋めていないかを最優先で見ます。 同じ5日分の点呼記録簿と見比べ、点検表の無い運行日を数えます。
3週目:様式を直す
車両番号の読み違いが多ければ、車両ごとに番号を印字した点検表を用意します。チェック欄が小さすぎるなら、欄を広げます。複合機のスキャンの解像度を固定します。
4週目:OCRと突き合わせをつなぐ
レイアウトモデルを呼び、選択マークと表を結び付け、checks を作るところまでを組みます。この時点では点呼の記録との突き合わせだけを行い、生成AIは入れません。
2か月目: 1営業所で定時の実行を回し、一覧に載る割合と unreadable の割合を毎週数えます。3か月目以降: 異常の記述の整理と、車両ごとの履歴の蓄積を足し、もう1つの営業所に広げます。「否」の印が付いた点検表が、その日のうちに整備管理者の目に入っている状態で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
レイアウトモデルがテキスト、テーブル、選択マーク、ドキュメント構造を抽出すること。選択マークに境界の多角形、信頼度、選択の状態(selected / unselected)と span が含まれること。表のセルに行と列のインデックスと境界の多角形が含まれること。行ごとの手書きのスタイルが信頼度とともに styles に返ること。pages に回転の角度が含まれること。PDFとTIFFは最大2,000ページ(Free は最初の2ページ)、ファイルサイズがS0で500MB・F0で4MB、画像が50 × 50から10,000 × 10,000ピクセル、テキストの最小の高さが1024 × 768の画像で12ピクセルであること。モデルIDが prebuilt-layout であること | Microsoft Learn: ドキュメント レイアウト分析 | 2026-10-07 |
レイアウトモデルの手書きテキストの対応言語に日本語(ja)が含まれること | Microsoft Learn: 読み取りとレイアウトの言語サポート | 2026-10-07 |
| 事業用自動車は1日1回、その運行の前に日常点検を実施すること。日常点検整備の実施が使用者の義務として法令(道路運送車両法第47条の2、自動車点検基準第1条)に定められていること | 国土交通省: 点検整備の種類 | 2026-10-07 |
| 事業用自動車の日常点検の項目(ブレーキ、タイヤ、バッテリー、原動機、灯火装置、ワイパー、エアタンクの凝水、運行において異常が認められた箇所など)。整備管理者の主な権限として「日常点検の実施方法を定める」「日常点検の結果に基づき、運行の可否を決定する」が挙げられていること | 国土交通省: 自動車の点検整備 | 2026-10-07 |
| 貨物自動車運送事業者が乗務前の点呼で、道路運送車両法第47条の2の点検の実施またはその確認について報告を求め確認を行うこと(第7条第1項第3号)。点呼の記録を1年間保存すること(第7条第5項) | e-Gov 法令API: 貨物自動車運送事業輸送安全規則 | 2026-10-07 |
構造化出力が output_config の format に type: "json_schema" を指定して有効になること。enum が使えること。数値の制約と文字列の長さの制約がサポートされないこと。スキーマに沿った応答が保証されること | Claude Docs: Structured outputs | 2026-10-07 |
点検の記録の保存の方法と期間、可否判断の記録の書き方は、自社の整備管理規程によります。この部分は整備管理者と運行管理の担当への確認が必要です。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0718)についてのご相談はこちらから。
