製パン工場で手書きされるロットごとの製造記録を読み取り、仕込み・発酵・焼成の温度と時間と数量を製造の台帳に転記して、管理の範囲を外れた値と改善措置の書き漏れを拾う
製パンのラインでロットごとに手書きされる製造記録票を読み取り、仕込み・発酵・焼成の温度と時間と数量を製造の台帳に転記します。品目ごとの管理の範囲と照らし、外れた値と改善措置の書き漏れを拾います。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- 小売/製造
- 対象部門
- 品質管理/生産
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- データ分析に時間がかかる/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/判断支援/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- ラインの担当者が、工程ごとに記録票に温度・時間・数量を書き、印を押す
- 範囲を外れたときは、担当者が改善措置の欄に何をしたかを書き、製造の課長に知らせる
- 1日の終わりに、記録票を品質管理課に回す
- 翌日、品質管理課の担当が、記録票を1枚ずつ表計算の製造の台帳に打ち込む
- 打ち込みながら、品目ごとの製品規格表と見比べて、範囲を外れた値に印を付ける
- 外れた値のある記録票で、改善措置の欄が書かれているかを見る。空いていれば、ラインの担当者に聞く
- 仕込み数と良品数・不良数・抜き取りの数が合うかを見る
- 週に一度、外れた値の一覧を製造の課長に報告する
- 人ラインの担当者が、いまと同じく記録票に手書きする
- 人ロットの焼成が終わったら、オーブンの出口の担当が記録票をタブレットで撮る
- 自動画像の保存をきっかけに、OCRが記録票の欄と表と読み取りの信頼度を返す
- 自動生成AIが、読み取った欄を製造の台帳の項目に対応づけ、値を文字のまま写す
- 自動品目から製品規格表を引き、書かれるはずの欄の一覧と照らして、記入漏れの候補を拾う
- 自動時刻から長さを計算し、温度と時間と重さを管理の範囲と比べる
- 自動外れた値のある記録票で、改善措置の欄に書き込みがあるかを確かめ、数量の合計を突き合わせる
- 自動製造の台帳の下書きを作り、確認の要る記録票の一覧をその日のうちに品質管理課と製造の課長に出す
- 人品質管理課の担当が、確認の要る欄だけを記録票の画像と並べて直す
- 人改善措置の書き漏れは、その日のうちにラインの担当者に確かめて書き足してもらう
- 人確認の済んだ記録を、製造の台帳に確定する
各工程の詳しい説明を読む
- ラインの担当者が、工程ごとに記録票に温度・時間・数量を書き、印を押す
- 範囲を外れたときは、担当者が改善措置の欄に何をしたかを書き、製造の課長に知らせる
- 1日の終わりに、記録票を品質管理課に回す
- 翌日、品質管理課の担当が、記録票を1枚ずつ表計算の製造の台帳に打ち込む
- 打ち込みながら、品目ごとの製品規格表と見比べて、範囲を外れた値に印を付ける
- 外れた値のある記録票で、改善措置の欄が書かれているかを見る。空いていれば、ラインの担当者に聞く
- 仕込み数と良品数・不良数・抜き取りの数が合うかを見る
- 週に一度、外れた値の一覧を製造の課長に報告する
(a)打ち直しが翌日になる。 記録票が回ってくるのは1日の終わりで、打ち込みは翌日の午前中にかかります。外れた値に品質管理課が気づくのは、そのロットの製品がすでに出荷されたあとです。
(b)範囲を覚えている人に頼っている。 品目は100を超え、季節の品目は入れ替わります。範囲を頭に入れている担当者なら打ち込みながら気づけますが、慣れていない担当者は規格表を毎回開くので、時間がかかるうえに見落とします。
(c)改善措置の欄が空いたままになる。 範囲を外れたときにラインで調整をしても、忙しい時間帯には欄に書かれないことがあります。翌日に聞きに行っても、誰が何をしたかを覚えていないことがあります。
(d)時間は書いてあるが、長さが書いていない。 一次発酵やホイロは開始と終了の時刻が書かれ、長さは打ち込む人が引き算しています。 夜をまたぐロットや、時刻の書き方(「14:05」「2:05」「14.05」)の違いで、引き算を誤ることがあります。
- 【人】 ラインの担当者が、いまと同じく記録票に手書きする
- 【人】 ロットの焼成が終わったら、オーブンの出口の担当が記録票をタブレットで撮る
- 【自動】 画像の保存をきっかけに、OCRが記録票の欄と表と読み取りの信頼度を返す
- 【自動】 生成AIが、読み取った欄を製造の台帳の項目に対応づけ、値を文字のまま写す
- 【自動】 品目から製品規格表を引き、書かれるはずの欄の一覧と照らして、記入漏れの候補を拾う
- 【自動】 時刻から長さを計算し、温度と時間と重さを管理の範囲と比べる
- 【自動】 外れた値のある記録票で、改善措置の欄に書き込みがあるかを確かめ、数量の合計を突き合わせる
- 【自動】 製造の台帳の下書きを作り、確認の要る記録票の一覧をその日のうちに品質管理課と製造の課長に出す
- 【人】 品質管理課の担当が、確認の要る欄だけを記録票の画像と並べて直す
- 【人】 改善措置の書き漏れは、その日のうちにラインの担当者に確かめて書き足してもらう
- 【人】 確認の済んだ記録を、製造の台帳に確定する
2番目で、撮影をロットの終わりにするのが要点です。 1日の終わりにまとめると、(a)の遅れは縮みません。焼成が終わった時点で撮れば、外れた値に、そのロットがまだ工場にあるうちに気づけます。
10番目は、その日のうちに行います。 改善措置を書くのは、その場で調整をした担当者です。翌日に聞くのでは、(c)の「覚えていない」が繰り返されます。
02今回想定するシステム構成
製造記録票(手書き・ロットごとに1枚)
│ 焼成の終わりにタブレットで撮影
▼【トリガー】画像の保存
Google Document AI(Form Parser)
│ 欄(キーと値のペア)、表、読み取りの信頼度
▼
Claude API(構造化出力)── 欄と台帳の項目の対応づけ、値の書き写し
▼
Python ── 書かれるはずの欄の一覧との照合(記入漏れの候補)
── 時刻から長さの計算、管理の範囲との比較
── 外れと改善措置の組の確認、数量の突き合わせ
▼
製造の台帳の下書き、確認の要る記録票の一覧
▼
【品質管理課が確認の要る欄を直す】→ 台帳に確定| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence |
| 生成AI | Claude API(欄の対応づけと値の書き写し) | OpenAI API、Gemini API |
| 連携 | Python(画像の受け取り、API の呼び出し、台帳の下書きの作成) | Google Apps Script |
| 差異計算 | Python(管理の範囲との比較、時刻からの長さ、数量の突き合わせ) | Google Apps Script |
| 保管 | 社内のファイルサーバー(記録票の画像と読み取りの結果) | クラウドのストレージ |
製品を出荷するかどうかは、この構成では決めません。 外れた値のあるロットの扱いは、製造の課長と品質管理課が決めます。構成が出すのは、外れたという事実と、改善措置が書かれているかどうかまでです。
食品衛生法施行規則の別表第十八(食品衛生上の危害の発生を防止するために特に重要な工程を管理するための取組)は、重要管理点ごとの管理基準の設定、モニタリングの方法、管理基準を逸脱したことが判明した場合の改善措置、検証、記録の作成を定めています。製造記録票は、このモニタリングと改善措置の実施の記録にあたる工場が多いはずです。 どの工程を重要管理点とし、管理基準をいくつにするかは、工場の衛生管理の計画で決まっています。
土台は Document AI の Form Parser です。 公式の説明では、Form Parser はキーと値のペア、表、チェックボックスなどを抽出するとされ、ラベルの付いた空欄に書き込むような、ふつうの様式からキーと値のペアを取り出すのに向くとされています。プロセッサ一覧の言語表では、日本語(ja)が手書きに対応する言語として示されています。
一方で、注意書きが2つあります。 値の入っていないキーと値のペアは確実には読み取れないこと、一部の言語ではキーと値のペアの品質がラテン文字の言語より低い場合があることです。欄の対応づけを生成AIで補い、記入漏れは欄の一覧で拾う設計にするのは、この2つのためです。
処理する場所に、日本のリージョンはありません。 Form Parser の対応リージョンは us・eu と、asia-southeast1(シンガポール)などの単一リージョンです。記録票の配合や条件は工場の製法そのものなので、国外で処理されることを会社の決まりに照らして確かめます。
03どうやって実装するのか
処理の起点を決める
記録票の画像がフォルダに保存されたことを起点にします。 撮るのはロットの焼成が終わったときで、オーブンの出口の担当が、ラインの脇に固定したタブレットで撮ります。撮影の台を決めておけば、毎回同じ距離と角度で撮れます。
1日の終わりにまとめて動かす形にはしません。ロットごとに読み取れば、外れた値の一覧は、そのロットの製品が冷却を終える前に出ます。 (a)の「気づくのが出荷のあと」を、「工場にあるうち」に変えるのが狙いです。
ファイル名には、撮影の日時とラインの番号を入れます。品目とロット番号は記録票から読み取り、生産計画表と照らします。 処理が終わったものは処理済みのフォルダへ移し、移すのは成功したときだけにします。 その日の生産計画にあるロットの数と、撮られた記録票の数を夕方に比べ、撮り忘れも拾います。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 記録票の画像 | ロットごとの1枚、撮影の日時、ライン | ラインの脇のタブレット |
| 読み取りの結果 | テキスト、キーと値のペア、表、信頼度 | Google Document AI |
| 製品規格表 | 品目ごとの管理の範囲(捏ね上げ温度、発酵とホイロの温度・湿度・時間、分割の重さ、焼成の温度と時間) | 品質管理課の規格表 |
| 欄の一覧 | 品目ごとに、記録票に書かれるはずの欄 | 規格表から作る一覧 |
| 生産計画表 | 日付、ライン、品目、ロット番号、仕込み数の予定 | 生産計画の表計算 |
質を決めるのは、製品規格表と欄の一覧です。 規格表が品目の改廃に追いついていないと、新しい品目の記録票が「範囲が無い」と出ます。季節の品目を出すときに、規格表の行を足すのを品目の立ち上げの手順に入れます。
欄の一覧は、品目によって違います。 調理パンは焼成のあとに具材を挟む工程があり、食パンは焼成のあとに型から抜く工程があります。一覧が品目ごとでないと、書かれなくてよい欄を記入漏れとして拾います。
データの取得方法を決める
読み取りは、Python から Form Parser のプロセッサを呼ぶだけです。返ってくる Document から、キーと値のペアと表と信頼度を取り出します。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 全テキスト | text | ほかの欄が startIndex・endIndex で指す原文 |
| 工程の欄 | pages[].formFields(fieldName と fieldValue) | 「捏ね上げ温度」「焼成温度」などのラベルと値 |
| 数量や時刻の表 | pages[].tables(headerRows と bodyRows) | 工程ごとの開始・終了の時刻、数量の行 |
| 信頼度 | 各要素の layout の信頼度 | 確認の要る欄の印 |
公式の説明では、text が認識されたテキストの唯一の元で、ほかの欄は startIndex と endIndex でその位置を指すとされています。キーと値のペアの文字も、この位置から原文を引いて取り出します。 表は headerRows と bodyRows に分かれ、行や列をまたぐセルの無い表だけが対象とされています。
キーの文字は、記録票の印刷のラベルとそのまま一致するとは限りません。 「捏ね上げ温度」が「捏上温度」と読まれる、ラベルと値が隣の欄と組み合わされる、ということが起こりえます。キーの文字で台帳の項目を引くのではなく、生成AIに対応づけさせ、対応づけの結果を欄の一覧と照らします。
生産計画表は、毎朝の書き出しを読みます。照合は日付・ライン・ロット番号の組で行います。 品目の名前で引くと、同じ日に同じ品目を2つのラインで作ったときに取り違えます。
AIへ渡す前に整形する
- 画像の向きと傾き … 撮影の台で撮っても残る傾きを、紙の四隅で補正します
- 解像度 … 公式の説明では、スキャンは最低200dpi、300dpi以上で一般に最良の結果とされています。撮影の解像度はこれに相当する大きさにします
- ファイルの形式 … JPEG か PNG で保存します
- 粉と油の汚れ … 記録票は粉や油で汚れます。汚れで欄が読めない画像は、撮り直しを促します
- 重複の検知 … 同じロット番号の記録票が二度撮られたら、新しい方だけを使います
- 品目の確定 … 記録票の品目とロット番号を生産計画表と照らし、品目を確定してから欄の一覧と規格表を引きます
6番目を、ほかの照合より先に行います。 品目が確定しないと、どの範囲と比べるかも、どの欄が書かれるはずかも決まりません。品目が読めない記録票は、生産計画表のロット番号から品目を引き、それも引けなければ人に回します。
AIに処理させる
生成AIにさせるのは2つだけです。 読み取った欄と表を製造の台帳の項目に対応づけること、値を文字のまま写すことです。
| 見るもの | させること | 判断できないときの扱い |
|---|---|---|
| キーと値のペア | 各ペアが台帳のどの項目に当たるかを決め、値を写す | 決められないペアは unknown |
| 時刻と数量の表 | 工程ごとの開始・終了の時刻、仕込み数・良品数・不良数・抜き取りの数を写す | 読めない文字は空にし、unreadable |
| 改善措置の欄 | 書かれた文を原文のまま写す | 何も書かれていなければ空 |
| 担当者の印の欄 | 印や署名があるかどうかを present/absent で写す | 判断できなければ unclear |
比較と計算は、プログラムの側で行います。
| させないこと | 理由 |
|---|---|
| 時刻から長さの計算 | 夜をまたぐロットや書き方の違いを、決まりで扱う |
| 管理の範囲との比較 | 範囲は規格表の数字で決まる |
| 読めない値の補い | 前のロットの値や範囲の真ん中で埋めると、外れが消える |
| 改善措置の内容の評価 | 適否は製造の課長と品質管理課が決める |
| 出荷の可否の判断 | 人が決める |
3行目がいちばん起きやすい失敗です。 焼成の温度の欄がにじんでいると、同じ品目の前のロットと同じ値で埋めたくなります。埋めた瞬間、その記録票は「範囲内」になり、外れていたかもしれない事実が消えます。
指示内容を固定する
あなたは製パン工場の品質管理課で、製造記録票の読み取り結果を台帳の形にそろえる担当です。
OCRが返したキーと値のペアと表だけを見てください。推測で埋めないでください。
【台帳の項目】
item_name(品目)、lot_no(ロット番号)、line(ライン)、mix_minutes(ミキシングの時間)、
dough_temp(捏ね上げ温度)、ferm_temp(一次発酵の温度)、ferm_humidity(一次発酵の湿度)、
ferm_start / ferm_end(一次発酵の開始と終了の時刻)、divide_weight(分割の重さ)、
proof_temp / proof_humidity(ホイロの温度と湿度)、proof_start / proof_end(ホイロの開始と終了)、
bake_temp(焼成の温度)、bake_minutes(焼成の時間)、
qty_planned / qty_good / qty_defect / qty_sample(仕込み数・良品数・不良数・抜き取りの数)、
corrective_action(改善措置)、stamp_*(工程ごとの担当者の印)
【厳守事項】
- 各ペアと表の列がどの項目に当たるかを field_map に書いてください。
決められないものは unknown にしてください。
- 値は書かれた文字のまま写してください。単位も書かれていれば一緒に写してください。
- 時刻は書かれたとおりに写してください。長さを計算しないでください。
「2:05」を「14:05」に直すなど、午前・午後を推測しないでください。
- 読めない値は空にし、その項目を unreadable_fields に入れてください。
前のロットの値や、ありそうな値で埋めないでください。
- 見つからない項目は、結果に含めないでください。空の値を作らないでください。
- 改善措置の欄は、書かれた文を原文のまま写してください。要約しないでください。
- 担当者の印は、あるかどうかだけを present / absent / unclear で書いてください。
- 範囲を外れているか、出荷してよいかは書かないでください。
【OCRのキーと値のペア】{form_fields}
【OCRの表】{tables}
「見つからない項目は結果に含めない」と明記しているのは、記入漏れの判定をプログラムの側に置くためです。 生成AIが見つからない項目に空の値を作ると、空の値が「読めたが空だった」のか「欄ごと見つからなかった」のかが分からなくなります。欄の一覧との照合は、結果に無い項目を数えることで行います。
「午前・午後を推測しない」も同じ理由です。 夜勤のラインでは、「2:05」が深夜の2時のこともあります。時刻の解釈は、生産計画表のラインの稼働時間帯と照らして、プログラムが決めます。
出力形式を固定する
次の形のJSONで受け取ります。
{
"sheet_id": "",
"captured_at": "",
"field_map": [
{ "source": "form_field | table_cell", "source_text": "", "field": "" }
],
"values": [
{ "field": "", "text": "", "confidence": 0 }
],
"unreadable_fields": [ "" ],
"corrective_action_text": "",
"stamps": [
{ "process": "mix | ferm | divide | proof | bake", "state": "present | absent | unclear" }
]
}
値をすべて文字列で受けるのは、意図してのことです。 温度の「28°」、時刻の「14.05」、数量の「1,200」は、数値の型で受けると記号のところで崩れます。文字のまま受け、プログラムで数字として読めるかを確かめてから数値にします。
Claude の構造化出力は、output_config.format に JSON スキーマを渡して有効にし、オブジェクトには additionalProperties: false が必要とされています。 数値の minimum・maximum は対応していないとされているので、範囲の確認はもともとプログラムで行う設計と合っています。
後段の照合は、この出力に対して決まりで行います。
| 照合 | 外れたとき |
|---|---|
| 品目とロット番号が生産計画表にある | 記録票ごと印を付ける |
欄の一覧の項目がすべて values にある | 「記入漏れの候補」の印。画像で確かめる |
| 値が数字や時刻として読める | 欄に印を付ける |
| 時刻から計算した長さと、温度・重さが管理の範囲に収まる | 「範囲外れ」の印 |
範囲外れがあるのに corrective_action_text が空 | 「改善措置の書き漏れ」の印。いちばん優先して確かめる |
| 仕込み数 = 良品数+不良数+抜き取りの数 | 「数量の食い違い」の印 |
工程ごとの担当者の印が present | 「印の欠け」の印 |
5行目が、この構成の中心です。 範囲外れだけなら、ラインの調整の記録として残ります。外れと改善措置が組になっていない記録票だけを最優先の一覧の先頭に出し、その日のうちにラインに確かめます。
時刻から長さを出す処理は、次のような形になります(要点だけ)。
def minutes_between(start_text, end_text, line_shift):
s = parse_clock(start_text, line_shift) # 「14:05」「14.05」「2:05」を稼働時間帯で解釈
e = parse_clock(end_text, line_shift)
if s is None or e is None:
return None # 読めなければ計算しない
if e < s:
e += 24 * 60 # 夜をまたぐロットは翌日として扱う
return e - s
読めない時刻のときに None を返し、0分としないのが要点です。 0分にすると、範囲の比較で「短すぎる」という別の外れに化けます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 撮影の保存フォルダ | フォルダの監視 | 画像の保存を検知する |
| Google Document AI | API呼び出し | キーと値のペア・表・信頼度を返す |
| Claude API | API呼び出し | 欄の対応づけと値の書き写し |
| 製品規格表・欄の一覧 | 表計算の読み込み | 品目ごとの範囲と、書かれるはずの欄 |
| 生産計画表 | 毎朝の書き出しファイル | ロットの照合と撮り忘れの検知 |
| 製造の台帳 | 表計算のファイル | 確認の済んだ記録を書き込む |
製造の台帳へ書き込むのは、人が確かめた記録だけです。 確認の要る欄の無い記録票は、品質管理課の担当が一覧で流し見て「確定」を押した時点で書き込みます。生成AIの出力を、そのまま台帳に流し込む経路は作りません。
製品規格表は、読むだけです。 範囲外れが続く品目があっても、規格表は書き換えません。範囲を見直すかどうかは、品質管理課と製造の課長が、記録の傾向を見て決めます。
人が確認する
人が見るのは、印の付いた記録票だけです。
- 改善措置の書き漏れを先に見る … 範囲外れがあるのに改善措置の欄が空いている記録票を、その日のうちにラインの担当者に確かめます。書き足してもらうのは、実際にした措置だけです
- 範囲外れを製造の課長に回す … 外れたロットの一覧を、ロットが工場にあるうちに渡します。扱いは課長が決めます
- 記入漏れの候補を確かめる … 欄の一覧にあって読み取りの結果に無い欄を、画像で確かめます。本当に空いているのか、読み取れなかっただけかを見分けます
- 数字の欄を確かめる … 信頼度の低い欄と、数字として読めない欄を、画像と並べて直します
- 数量の食い違いと印の欠けを確かめる … ラインの担当者に確かめます
3番目を省かないでください。 欄ごと結果から消えるのは、空いていた場合だけではありません。汚れや筆跡で読めなかった欄も、結果に出てこないことがあります。 画像を見れば数秒で分かります。
目標は、900枚をならして1枚0.8分です。 印の無い記録票は一覧で流し見て数秒、改善措置の書き漏れのある記録票はラインに確かめるので数分かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 粉や油の汚れで欄が読めない | unreadable。撮り直しか、人が実物を見て直す |
| 欄が読み取りの結果から消える | 欄の一覧との照合で拾い、画像で確かめる |
| 品目が読めない | 生産計画表のロット番号から品目を引く。引けなければ人に回す |
| 製品規格表に品目が無い | 範囲の比較をせず、規格表の行の追加を品質管理課に求める |
| 時刻が夜をまたぐ | ラインの稼働時間帯と照らし、終了が開始より前なら翌日として計算する |
| 時刻の書き方が読めない(「14.05」など) | 決まりで読めるものは読み、読めないものは人に回す |
| 1つのロットが2枚に分かれている | ロット番号でつなぎ、欄の一覧と照らす |
| 撮り忘れ | 生産計画表のロットの数と比べて、夕方に拾う |
| Document AI が応答しない | フォルダに残し、品質管理課がいまの手順で打ち込む |
上の2行が大半を占めます。 どちらもAIの精度の問題というより、粉と油のある現場で書く紙の性質の問題です。 記録票をクリップボードに挟んで書く、ペンを油性の細字に替えるほうが、指示を直すより効きます。
記録を残す
- 記録票の画像と、撮影の日時・ライン
- OCR が返した
Documentの全文(text、formFields、tables、信頼度) - 生成AIの出力(欄の対応づけ、値、改善措置の原文、印の有無)
- 照合の結果(記入漏れの候補・範囲外れ・改善措置の書き漏れ・数量・印)と、そのとき使った製品規格表の版
- 人が直した欄の記録 … どのロットの、どの欄を、何から何に直したか
- 改善措置を書き足した記録 … 誰が、いつ、何を書き足したか
4つ目で「規格表の版」を残すのは、範囲が後から変わるためです。 範囲を見直すと、過去の記録の「範囲外れ」の意味が変わります。当時の範囲が残っていないと、外部の監査で記録を示すときに説明がつきません。
改善措置を書き足した記録も残します。 後から書き足したこと自体は問題ではありませんが、その日のうちに書いたのか、何日もたってから書いたのかが分かることが、記録の信頼につながります。
04実装レベルの3段階
最小構成は、記録票が読めるかを確かめる段階です。 月900枚には使えません。 半自動化で、1枚3分が1.5分程度になります。 打ち込みは自動になりますが、規格表との見比べと改善措置の確認、時刻の引き算が人の手に残ります。 本格構成で0.8分になり、この段階が本記事の想定です。 差が大きいのは、範囲との比較と改善措置の組の確認が自動になり、人が見るのが印の付いた記録票だけになるからです。 段階を飛ばさないでください。 半自動化の1か月で、規格表に無い品目と、欄の一覧の足りない品目が見えます。そこを直してから本格構成に進むほうが、印が減ります。
05工数削減シミュレーション
導入後 900件 × 0.8分 ÷ 60 = 12 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 食パン・菓子パン・調理パンを量産する製パン工場で、ラインの担当者がロットごとの製造記録票に温度と時間を手書きし、品質管理の担当が翌日に表計算の製造の台帳へ打ち直している場合。品目ごとに捏ね上げ温度や焼成の条件の管理の範囲が決まっているのに、外れた値に気づくのが打ち直しのときになっている場合。HACCPに沿った衛生管理の記録として、外れたときの改善措置の記録がそろっているかを確かめたい場合。
- ミキサー・ホイロ・オーブンの記録を機器から自動で取り込んでおり、手書きの記録票が無い工場。ロットが1日に数件で、打ち直しの手間が小さい店舗。なお、管理の範囲の設定、外れた製品を出荷するかどうか、改善措置の内容の適否、衛生管理の計画の見直しの判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の記録票から30枚を選ぶ(範囲外れのあったもの、改善措置の欄が空いていたもの、夜勤のロットのものを入れる)
- その30枚について、製造の台帳に打ち込まれた値を書き出しておく
- 記録票の画像を、手元の生成AIの画面に1枚ずつ貼る
- 「この製造記録票の各欄を、品目・ロット・捏ね上げ温度・一次発酵の温度と時刻・ホイロの温度と時刻・焼成の温度と時間・数量・改善措置の表にしてください。読めない欄は空にしてください。時刻から長さを計算しないでください」と指示する
- 出てきた表を、打ち込まれた値と1欄ずつ比べる
30枚は必ずやってください。 Form Parser とプログラムを組む前に、1枚に複数の筆跡が混ざった記録票が読めるのかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 打ち込まれた値とほぼ同じ表が出た | OCR の API と照合の処理に進む |
| 時刻の午前・午後を取り違えた | 時刻は文字のまま写させ、プログラムで解釈する。構成は有効 |
| 読めない温度を前の欄の値で埋めた | 指示と、後段の照合で止められる |
| 読めない記録票が多い | 書き方と撮り方が先。 AIの問題ではない |
改善措置の欄が空いていた記録票も、必ず入れてください。 生成AIが空欄に「特になし」と書き足さないかを、この段階で確かめます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 読めない温度を前のロットの値で埋める | 埋めることを禁じ、unreadable として人に回す |
| 空いている欄が結果から消え、記入漏れに気づけない | 欄の一覧と照らし、結果に無い欄を数える |
| 生成AIが空の欄に空の値や「特になし」を作る | 見つからない項目は含めない、要約しないと指示する |
| 時刻の午前・午後を取り違える | 文字のまま受け、ラインの稼働時間帯で解釈する |
| 夜をまたぐロットの長さがマイナスになる | 終了が開始より前なら翌日として計算する |
| 規格表に新しい品目が無い | 品目の立ち上げの手順に規格表の行の追加を入れる |
| 欄の一覧が品目ごとでない | 品目ごとの工程と突き合わせて一覧を作る |
| 同じ品目を2つのラインで作って取り違える | 日付・ライン・ロット番号の組で照合する |
| 国外で処理されることを確かめていない | 日本のリージョンは無い。 会社の決まりに照らす |
| 範囲外れのロットの扱いを自動で決める | 扱いは課長が決める。構成は事実まで |
上の2行が、この構成でいちばん重い失敗です。 どちらも、記録票の上の事実(外れていた、書かれていなかった)が台帳から消える経路です。
3行目は、気づきにくい失敗です。 改善措置の欄に生成AIが「特になし」と書くと、書き漏れが「措置不要」に見えます。 原文のまま写す指示と、空のままにする指示を、両方入れておきます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 品目、ロット番号、仕込み・発酵・焼成の条件、数量、改善措置の記録、担当者の印です。個人情報は少ないものの、品目ごとの製造の条件は工場の製法そのもので、外に出したくない情報です。
- 処理の場所を確かめる … Form Parser の対応リージョンに日本はありません。
us・euかシンガポールなどから選びます。製法の情報が国外で処理されることを、会社の決まりに照らして確かめます - 生成AIに渡す範囲を絞る … 生成AIには読み取りの結果だけを渡し、製品規格表や配合は渡しません。範囲との比較は Python の側で行います
- 判断を代替しない … 範囲外れのロットを出荷するか、改善措置が適切だったかは、製造の課長と品質管理課が判断します。構成が出すのは、外れたという事実と、措置が書かれているかどうかまでです
- 衛生管理の計画を代替しない … 食品衛生法施行規則の別表第十八は、管理基準、モニタリング、改善措置、検証、記録の作成を定めています。どの工程を重要管理点とするか、管理基準をいくつにするかは、工場の衛生管理の計画で決めます
- 元の記録票を残す … 画像を残すようになっても、紙の記録票をいつまで保管するかは、衛生管理の計画と取引先との取り決めに従います
誤りが起きた場合のリスクは、範囲外れが台帳から消えることと、改善措置の書き漏れが見過ごされることの2つです。前者は埋めることの禁止と欄の一覧の照合で、後者は外れと措置を組で見る照合で防ぎます。
10まず何から始めるか
1週目:製品規格表と欄の一覧を整える
製品規格表を、品目ごとに項目と上限・下限が並ぶ形にそろえます。あわせて、生産量の多い上位30品目について、記録票に書かれるはずの欄の一覧を作ります。季節の品目は、次の立ち上げのときに足します。
2週目:30枚で試す
先月の記録票から30枚を選び、最小構成で表にさせて、打ち込まれた値と比べます。読めない温度を埋めていないか、改善措置の空欄に何か書き足していないかを最優先で見ます。
3週目:撮り方と記録票の雛形を見直す
撮影の台をラインの出口に置き、撮る時点をロットの焼成の終わりに決めます。読めない欄が多ければ、欄の広さ、ペン、改善措置の欄の位置を見直します。
4週目:Form Parser から台帳の下書きまでをつなぐ
記録票の画像を保存すると Form Parser が動き、製造の台帳の下書きに書き出すところまで作ります。この時点では照合を入れず、読み取りの結果だけを見ます。
2か月目: 欄の一覧との照合、時刻からの長さ、管理の範囲との比較、改善措置の組の確認、数量の突き合わせを足し、確認の一覧をその日のうちに出す運用にします。3か月目以降: 1枚3分が何分になったかを実測します。範囲外れの一覧がロットの出荷の前に課長に届き、改善措置の書き漏れがその日のうちに埋まるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Form Parser がキーと値のペア、表、チェックボックスなどを抽出すること。言語の一覧で日本語(ja)が手書きに対応する言語として示されていること(原文の HTML で確認)。対応リージョンが us・eu・asia-southeast1 などで、日本のリージョンが無いこと | Google Cloud: Processor list | 2026-10-15 |
| Form Parser がラベルの付いた空欄に書き込むようなふつうの様式からのキーと値のペアの抽出に向くこと。学習済みで追加の学習ができないこと。値の入っていないキーと値のペア(空の様式など)を確実には読み取れないこと。一部の言語ではキーと値のペアの品質がラテン文字の言語より低い場合があること | Google Cloud: Form Parser | 2026-10-15 |
text が唯一の元で、ほかの欄が startIndex・endIndex で指すこと。formFields が fieldName と fieldValue を持つこと。表が headerRows と bodyRows に分かれ、行や列をまたぐセルの無い表だけを認識すること | Google Cloud: Handle the processing response | 2026-10-15 |
| 対応するファイルの形式。スキャンは最低200dpi、300dpi以上で一般に最良の結果とされること | Google Cloud: Supported files | 2026-10-15 |
構造化出力が output_config.format に JSON スキーマを渡して有効になること。オブジェクトに additionalProperties: false が必要なこと。数値の minimum・maximum が非対応であること | Claude Docs: Structured outputs | 2026-10-15 |
| 食品衛生法施行規則第六十六条の二で、別表第十八が食品衛生上の危害の発生を防止するために特に重要な工程を管理するための取組の基準とされていること。別表第十八に、重要管理点の決定、管理基準の設定、モニタリングの方法、管理基準を逸脱した場合の改善措置、検証の方法、記録の作成が定められていること(e-Gov 法令API で条文を確認) | e-Gov 法令API: 食品衛生法施行規則 | 2026-10-15 |
管理の範囲の設定、範囲を外れたロットの扱い、改善措置の適否、衛生管理の計画の見直しは、工場の品質管理の責任者が判断してください。 本記事は、上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1628)についてのご相談はこちらから。
