酒蔵がタンクごとに手書きするもろみの経過簿を読み取り、品温・ボーメ・日本酒度・アルコール分を日ごとの表にそろえて、記入漏れと急な変化を拾う
タンクの脇で毎日手書きされるもろみの経過簿を撮影して読み取り、その日の品温・ボーメ・日本酒度・アルコール分をタンク×日付の表にそろえます。測定の予定と前日の値に照らして、記入漏れと急な変化を杜氏に回します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- 製造
- 対象部門
- 品質管理/生産
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/属人化している/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/属人化解消/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 蔵人が、朝と夕にタンクの品温を測り、経過簿に書く。分析室で測ったボーメ・日本酒度・アルコール分などは、結果が出てから書き足す
- 夕方、製造担当がタンクを回り、経過簿を1枚ずつ見て、表計算のタンクごとのシートにその日の値を打ち込む
- 打ち込むときに、測定の予定の日に値が書かれているかを目で見る。書かれていなければ蔵人に聞く
- 前日の値と比べて、品温やボーメの動きがいつもと違うものに印を付ける
- 経過の図を更新し、杜氏に見てもらう一覧を作る
- 上槽の近いもろみは、上槽の直前の値を酒税の帳簿の担当に伝える
- 上槽が済んだ経過簿を回収し、仕込みの記号順に綴じて保管する
- 人蔵人が、いまと同じく経過簿に手書きする
- 人朝と夕の決まった時刻に、蔵人がタブレットで各タンクの経過簿を撮る(タンクの番号の札も一緒に写す)
- 自動画像の保存をきっかけに、OCRが経過簿の表と上の欄と読み取りの信頼度を返す
- 自動生成AIが、表の列を経過の項目に対応づけ、行ごとの値を文字のまま写し、備考を操作の種類に分ける
- 自動前回までに確定した行と照らし、新しく増えた行だけを取り出す。確定済みの行の文字が変わっていれば「書き直し」の印を付ける
- 自動数字として読めるか、測定の予定の日に値があるか、前日からの変化が決めた幅に収まっているかを確かめる
- 自動タンク×日付の表を更新し、確認の要る欄の一覧を作る
- 人製造担当が、確認の要る欄だけを経過簿の画像と並べて直し、書き忘れは蔵人に確かめる
- 人杜氏が、急な変化の印の付いたタンクを見て、温度の操作などを判断する
- 人上槽の近いもろみの値を、酒税の帳簿の担当が帳簿に転記する
各工程の詳しい説明を読む
- 蔵人が、朝と夕にタンクの品温を測り、経過簿に書く。分析室で測ったボーメ・日本酒度・アルコール分などは、結果が出てから書き足す
- 夕方、製造担当がタンクを回り、経過簿を1枚ずつ見て、表計算のタンクごとのシートにその日の値を打ち込む
- 打ち込むときに、測定の予定の日に値が書かれているかを目で見る。書かれていなければ蔵人に聞く
- 前日の値と比べて、品温やボーメの動きがいつもと違うものに印を付ける
- 経過の図を更新し、杜氏に見てもらう一覧を作る
- 上槽の近いもろみは、上槽の直前の値を酒税の帳簿の担当に伝える
- 上槽が済んだ経過簿を回収し、仕込みの記号順に綴じて保管する
(a)打ち直しが夕方に集中する。 分析の結果がそろうのは午後で、24本分の打ち込みが夕方から夜にかかります。 仕込みや上槽の作業と重なる日は、打ち込みが翌朝に回ります。
(b)書き忘れに気づくのが翌日以降になる。 品温の夕の欄が空いている、分析した日なのにアルコール分が書かれていない。打ち込みのときに気づいても、測り直せる時間はもう過ぎています。 誰が書き忘れたかも、翌日になると分かりにくくなります。
(c)数字の書き方に癖がある。 ボーメの「5.2」の小数点が紙の汚れに紛れる、日本酒度のマイナスを「▲」で書く人と「−」で書く人がいる、前日と同じ値を「〃」で書く人がいる。打ち込む人が書いた人の癖を知っていることが前提になっています。
(d)全体が見えるのは、紙をめくって回ったときだけ。 杜氏は打ち込みが終わるのを待つか、自分でタンクを回るしかなく、打ち込みが遅れた日は急な変化に気づくのも遅れます。
- 【人】 蔵人が、いまと同じく経過簿に手書きする
- 【人】 朝と夕の決まった時刻に、蔵人がタブレットで各タンクの経過簿を撮る(タンクの番号の札も一緒に写す)
- 【自動】 画像の保存をきっかけに、OCRが経過簿の表と上の欄と読み取りの信頼度を返す
- 【自動】 生成AIが、表の列を経過の項目に対応づけ、行ごとの値を文字のまま写し、備考を操作の種類に分ける
- 【自動】 前回までに確定した行と照らし、新しく増えた行だけを取り出す。確定済みの行の文字が変わっていれば「書き直し」の印を付ける
- 【自動】 数字として読めるか、測定の予定の日に値があるか、前日からの変化が決めた幅に収まっているかを確かめる
- 【自動】 タンク×日付の表を更新し、確認の要る欄の一覧を作る
- 【人】 製造担当が、確認の要る欄だけを経過簿の画像と並べて直し、書き忘れは蔵人に確かめる
- 【人】 杜氏が、急な変化の印の付いたタンクを見て、温度の操作などを判断する
- 【人】 上槽の近いもろみの値を、酒税の帳簿の担当が帳簿に転記する
8番目で人が見るのは、確認の要る欄だけです。 信頼度の低い欄、数字として読めない欄、予定の日に空いている欄、前日からの変化が幅を超えた欄、書き直しの印の付いた行に印が付き、それ以外は一覧で流し見て終わります。
9番目の判断は、杜氏が行います。 構成が出すのは「前日から決めた幅を超えて動いた」という事実までです。
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 はキーと値のペア、表、チェックボックスなどを OCR のテキストに加えて抽出するとされ、プロセッサの一覧の言語表では、日本語(ja)が手書きに対応する言語として示されています。経過簿の上の欄(仕込みの記号、タンクの番号、留添の日)はキーと値のペアとして、日ごとの行は表として読めます。
処理する場所に、日本のリージョンはありません。 プロセッサ一覧では、Form Parser の対応リージョンは us・eu と、asia-southeast1(シンガポール)などの単一リージョンです。経過簿に個人情報はほとんど書かれませんが、仕込みの配合と経過は蔵の造りの中身そのものです。 国外で処理されることを、蔵の情報の扱いの決まりに照らして確かめます。
Form Parser は学習済みで追加の学習はできず、表は行や列をまたぐセルの無いものだけが対象とされています。 見出しの「品温」の下に「朝」「夕」が2段になる部分は、列の対応づけを後段で補います。
03どうやって実装するのか
処理の起点を決める
経過簿の画像がフォルダに保存されたことを起点にします。 撮るのは朝と夕の2回で、蔵人が品温を書いたあとにタブレットで各タンクの経過簿を撮ります。
撮影は、タンクの番号の札が経過簿と一緒に写る位置で行います。タンクの番号は経過簿の上の欄にも書かれていますが、紙の取り違え(隣のタンクの板に挟んだ)に気づくため、札の番号と上の欄の番号を突き合わせます。
1日1回まとめて動かす形にはしません。撮った順に読み取っておけば、製造担当が確認を始めるときには、全タンクの表がそろっています。 (a)の夕方の集中をなくすのが狙いです。ファイル名には撮影の日時とタブレットの番号を入れ、処理が終わったものは処理済みのフォルダへ移します。移すのは成功したときだけにします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 経過簿の画像 | タンクごとの1枚、撮影の日時、朝・夕の別 | 蔵人のタブレット |
| 読み取りの結果 | テキスト、表(ヘッダの行と本体の行)、上の欄、信頼度 | Google Document AI |
| 確定済みの行 | タンクごとに、前回までに人が確かめた行の値と元の文字 | 経過の表(このシステムが持つ) |
| 測定の予定 | 仕込みの種類ごとに、もろみの日数と測る項目の対応 | 杜氏が決める一覧 |
| 変化の幅 | 項目ごとに、前日からの変化として確認に回す幅 | 杜氏が決める一覧 |
| 仕込みの計画表 | 仕込みの記号と順号、タンクの番号、留添の日、上槽の予定日 | 表計算の計画表 |
質を決めるのは、測定の予定と変化の幅です。 (b)の書き忘れは、予定が無いと「測らない日」と区別できません。急な変化も、幅を決めなければ毎日どこかに印が付きます。どちらも、杜氏が頭の中で持っている基準を最初に一覧にするところから始めます。
確定済みの行は、値だけでなく元の文字も持ちます。 「5.2」と確定した欄が、翌日の画像で「5.8」と読めたなら、それは書き直しの可能性があります。値だけを持っていると、元の文字との違いが読み違いなのか書き直しなのかを比べられません。
データの取得方法を決める
読み取りは、Python から Form Parser のプロセッサを呼ぶだけです。返ってくる Document から、表と上の欄と信頼度を取り出します。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 全テキスト | text | ほかの欄が startIndex・endIndex で指す原文 |
| 上の欄 | pages[].formFields(fieldName と fieldValue) | 仕込みの記号と順号、タンクの番号、留添の日 |
| 日ごとの行 | pages[].tables(headerRows と bodyRows) | 日付・日数・品温・ボーメ・日本酒度・アルコール分など |
| 信頼度 | 各要素の layout の信頼度 | 確認の要る欄の印 |
公式の説明では、text が認識されたテキストの唯一の元で、ほかの欄は startIndex と endIndex でその位置を指すとされています。表のセルの文字は、この位置から原文を引いて取り出します。 表は headerRows と bodyRows に分かれ、Form Parser の表の抽出は行や列をまたぐセルの無い表だけを認識するため、rowSpan と colSpan は常に1とされています。
セルの文字と信頼度は、行と列の並びのまま持っておきます。
def cell_text(document, cell):
# セルの layout.text_anchor が指す範囲を document.text から切り出す
return "".join(
document.text[int(s.start_index):int(s.end_index)]
for s in cell.layout.text_anchor.text_segments
).strip()
rows = []
for page in document.pages:
for table in page.tables:
for r in table.body_rows:
rows.append([(cell_text(document, c), c.layout.confidence) for c in r.cells])
行の並びは、紙の上から下の順で返ってくる前提にしません。 日付の欄の文字で並べ直し、日付が読めない行は、もろみの日数の欄で補います。どちらも読めない行は、確認の要る行に回します。
仕込みの計画表は、毎朝の書き出しを読みます。タンクの照合は、仕込みの記号と順号で行います。 タンクの番号だけで引くと、上槽して次のもろみを仕込んだタンクで、前のもろみの経過と混ざります。
AIへ渡す前に整形する
- 画像の向きと傾き … タブレットで斜めに撮った画像を、紙の四隅で補正します
- 解像度 … 公式の説明では、スキャンは最低200dpi、300dpi以上で一般に最良の結果とされています。撮影の解像度はこれに相当する大きさにします
- ファイルの形式と大きさ … JPEG か PNG で保存します。オンラインの処理の要求は1ファイル40MBまでです
- 札の番号の読み取り … 画像の端に写ったタンクの番号の札を読み、経過簿の上の欄の番号と突き合わせます
- 重複の検知 … 同じタンク・同じ朝夕で二度撮ったものは、新しい方だけを使います
- 記号の置き換えの準備 … 「▲」「−」「ー」「〃」を、後段で決まりどおりに扱えるよう、元の文字のまま残します
2番目を軽く見ないでください。 ボーメの小数点と日本酒度の符号は、小さな点と短い線です。解像度が足りずに消えた点は、書かれていないのか、読めなかったのかの区別がつきません。
6番目で置き換えをしないのは、意図してのことです。 「〃」を前日の値に置き換えるのはプログラムの決まりで行い、置き換えたことを記録に残します。 OCRの段階で置き換えると、後で紙と見比べたときに、どの値が「〃」だったのかが分からなくなります。
AIに処理させる
生成AIにさせるのは3つだけです。 表の列を経過の項目に対応づけること、行ごとの値をセルの文字のまま写すこと、備考の手書きのメモを操作の種類に分けて写すことです。
| 見るもの | させること | 判断できないときの扱い |
|---|---|---|
| 表の列 | 各列が日付・日数・品温(朝)・品温(夕)・室温・ボーメ・日本酒度・アルコール分・酸度・アミノ酸度・備考のどれかを決める | 決められない列は unknown |
| 行の値 | セルの文字をそのまま写す。符号や「〃」も文字のまま | 読めない文字は空にし、unreadable |
| 備考 | 書かれた操作を「加温」「冷却」「櫂入れ」「追い水」「その他」に分け、原文も写す | 分けられなければ other |
| 上の欄 | 仕込みの記号と順号、タンクの番号、留添の日を写す | 読めなければ空 |
数字の扱いと判定は、プログラムの側で行います。
| させないこと | 理由 |
|---|---|
| 読めない数字の補い | 前日の値やありそうな値で埋めると、書き忘れが消える |
| 「〃」の置き換え | 置き換えは決まりで行い、記録に残す |
| 符号の推測 | 日本酒度の「+」「−」は値の意味を逆にする。書かれた記号のまま |
| もろみの状態の評価 | 良し悪しは仕込みの種類と杜氏の狙いで決まる |
| 温度の操作の提案 | 加温・冷却は杜氏が決める |
| 確定済みの行の書き換え | 書き直しかどうかは人が確かめる |
1行目がいちばん起きやすい失敗です。 夕の品温の欄が空いていると、朝の品温や前日の夕の値から埋めたくなります。埋めた瞬間、書き忘れという事実が消え、(b)を拾う仕組みそのものが働かなくなります。
指示内容を固定する
あなたは酒蔵の製造部で、もろみの経過簿の読み取り結果を表の形にそろえる担当です。
OCRが返した表と上の欄だけを見てください。推測で埋めないでください。
【経過の項目】
date(日付)、day(もろみの日数)、temp_am(品温・朝)、temp_pm(品温・夕)、
room_temp(室温)、baume(ボーメ)、smv(日本酒度)、alcohol(アルコール分)、
acidity(酸度)、amino(アミノ酸度)、note(備考)
【厳守事項】
- 各列がどの項目に当たるかを column_map に書いてください。
決められない列は unknown にしてください。
- 行ごとに、セルの文字をそのまま写してください。
数字を計算しないでください。小数点や桁を補わないでください。
- 「▲」「−」「+」などの記号は、書かれたとおりに写してください。
符号を推測して付けたり外したりしないでください。
- 「〃」は「〃」のまま写してください。前の行の値に置き換えないでください。
- 読めないセルは空にし、そのセルを unreadable_cells に入れてください。
前の行の値、朝の値、ありそうな値で埋めないでください。
- 空いているセルは空のまま写してください。空いている理由を書かないでください。
- 備考は原文を note_text に写し、書かれた操作を
heat(加温)、cool(冷却)、kai(櫂入れ)、water(追い水)、other のどれかに分けてください。
分けられないものは other にしてください。
- もろみの状態の良し悪し、温度の操作の要否は書かないでください。
【OCRの表】{tables}
【上の欄】{form_fields}
「空いているセルの理由を書かない」を明記しているのは、生成AIが親切に理由を補うからです。 何も言わなければ「この日は測定日ではないため空欄」と書き添えます。測定日かどうかは測定の予定で決めることで、生成AIが表の外の知識で決めることではありません。
「〃」を文字のまま写させるのも同じ理由です。 置き換えを生成AIにさせると、前の行のどの値を引いたのかが記録に残りません。
出力形式を固定する
次の形のJSONで受け取ります。
{
"image_id": "",
"captured_at": "",
"header": {
"brew_code": "",
"brew_seq": "",
"tank_no": "",
"tome_date": ""
},
"column_map": [
{ "column_index": 0, "field": "date | day | temp_am | temp_pm | room_temp | baume | smv | alcohol | acidity | amino | note | unknown" }
],
"rows": [
{ "row_index": 0, "date": "", "day": "", "temp_am": "", "temp_pm": "",
"room_temp": "", "baume": "", "smv": "", "alcohol": "",
"acidity": "", "amino": "", "note_text": "", "note_type": "heat | cool | kai | water | other | none" }
],
"unreadable_cells": [
{ "row_index": 0, "field": "" }
]
}
数字の欄を文字列で受けるのは、意図してのことです。 数値の型で受けると、「▲3」や「〃」や「5.」のような文字が、どこかで数値に丸められます。文字のまま受け、プログラムで数字として読めるかを確かめてから数値にします。
Claude の構造化出力は、output_config.format に JSON スキーマを渡して有効にし、オブジェクトには additionalProperties: false が必要とされています。 数値の minimum・maximum や文字列の minLength・maxLength は対応していないとされているので、値の範囲の確認はプログラムで行います。
後段の照合は、この出力に対して決まりで行います。
| 照合 | 外れたとき |
|---|---|
| 札の番号と上の欄のタンクの番号が合う | 画像ごと止め、人が紙の取り違えを確かめる |
| 仕込みの記号と順号が計画表にある | 画像ごと印を付ける |
| 確定済みの行の文字が前回と同じ | 「書き直し」の印。値は確定済みのまま変えない |
| 新しい行の欄が数字として読める(符号・小数点を含む) | 欄に印を付ける |
| 測定の予定の日に値がある | 「記入漏れ」の印。蔵人に確かめる |
| 前日からの変化が決めた幅に収まる | 「急な変化」の印。杜氏に回す |
| 読み取りの信頼度が基準を下回る欄がない | 欄に印を付ける |
3行目で値を変えないのが要点です。 書き直しが正しい訂正なのか、別の日の値を誤って書いたのかは、紙を見ても分からないことがあります。確かめるまでは確定済みの値を残し、新しい文字は「書き直しの候補」として並べます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 撮影の保存フォルダ | フォルダの監視 | 画像の保存を検知する |
| Google Document AI | API呼び出し | 表・上の欄・信頼度を返す |
| Claude API | API呼び出し | 列の対応づけ、値の書き写し、備考の分類 |
| 仕込みの計画表 | 毎朝の書き出しファイル | 仕込みの記号・順号とタンクの照合 |
| 経過の表 | 表計算のファイル(タンクごとのシート) | 確認の済んだ値を書き込む |
| 確認画面 | 社内の Web 画面 | 確認の要る欄を経過簿の画像と並べる |
経過の表へ書き込むのは、人が確かめた値だけです。 確認の要る欄の無い行は、製造担当が一覧で流し見て「確定」を押した時点で書き込みます。生成AIの出力を、そのまま表に流し込む経路は作りません。
酒税の帳簿とは、つなぎません。上槽の近いもろみについて、帳簿に要る値の一覧を帳簿の担当に渡すところまでにします。 帳簿の様式と記載のしかたは、所轄の税務署の指導に従っている蔵ごとの運用があるためです。
人が確認する
人が見るのは、印の付いた欄と行だけです。
- 紙の取り違えを先に見る … 札の番号と上の欄が合わない画像は、ほかの照合の前に止めます
- 記入漏れを確かめる … 予定の日に空いている欄を、その日の担当の蔵人に確かめます。測っていれば書き足してもらい、測っていなければ測れなかったことを記録します
- 数字の欄を確かめる … 信頼度の低い欄、符号・小数点の読めない欄を、画像と並べて直します
- 書き直しを確かめる … 確定済みの行の文字が変わったものは、書いた蔵人に理由を聞き、どちらの値を残すかを決めます
- 急な変化を杜氏に回す … 印の付いたタンクを一覧にし、杜氏がタンクを見に行くかを決めます
2番目は、その日のうちに行います。 夕の撮影のあとすぐに一覧ができるので、書き忘れに気づくのが翌日になる(b)が、当日の夕方に変わります。 書いた本人がまだ蔵にいるうちに確かめられます。
5番目で杜氏が見るのは、表の上の数字だけではありません。 構成が出すのは「幅を超えた」という印までで、タンクの香りや泡の様子を見て判断するのは杜氏です。
目標は、720件をならして1件1分です。 印の無い行は一覧で流し見て数秒、記入漏れや書き直しの印の付いた行は蔵人に確かめるので数分かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 鉛筆の線が薄い、紙が濡れて読めない | unreadable。人が紙の実物を見て直す |
| 符号や小数点が読めない | unreadable。推測で付けない |
| 札の番号と上の欄の番号が合わない | 画像ごと止め、紙の取り違えを確かめる |
| 表の見出しの行が読めない | 列の対応づけを生成AIに任せ、unknown の列は人が決める |
| 日付も日数も読めない行がある | 行ごと確認に回す。並びの位置で日付を決めつけない |
| 確定済みの行の文字が変わった | 「書き直し」の印。確定済みの値は変えずに人が決める |
| 「〃」が続いている | 決まりで前の値に置き換え、置き換えたことを記録する。続く日数が多ければ印 |
| 経過簿が2枚目に続いている | 上の欄の仕込みの記号と順号で1枚目とつなぐ |
| Document AI が応答しない | フォルダに残し、製造担当がいまの手順で打ち込む |
上の3行が大半を占めます。 どれもAIの精度の問題というより、蔵の中の湿気と、タンクの脇で書く紙の性質の問題です。 濃い鉛筆に替える、経過簿をクリアファイルに入れるほうが、指示を直すより効きます。
記録を残す
- 経過簿の画像と、撮影の日時・朝夕の別・タブレットの番号
- OCR が返した
Documentの全文(text、formFields、tables、信頼度) - 生成AIの出力(列の対応づけ、行の値、備考の分類)
- 照合の結果(取り違え・記入漏れ・数字の読み取り・前日との差・書き直し)
- 人が直した欄の記録 … どのタンクの、どの日の、どの欄を、何から何に直したか、誰が確かめたか
- 書き直しの記録 … 確定済みの値、新しい文字、どちらを残したか、理由
- 「〃」を置き換えた欄と、引いた元の値
書き直しの記録は、後で経過を振り返るときの手がかりになります。 上槽のあとに酒の出来を振り返るとき、どの値が当日に書かれ、どの値が後から直されたかが分かれば、経過の読み方が変わります。
記入漏れの記録が多い項目は、測定の予定を見直す材料になります。 同じ日数の同じ項目が毎回空くなら、予定が現場の作業の流れと合っていない可能性があります。
04実装レベルの3段階
最小構成は、手書きの経過簿が読めるかを確かめる段階です。 毎日の運用には乗りません。 半自動化で、1件3分が2分程度になります。 読み取りは自動になりますが、毎日同じ紙を読むので、どの行が新しいかを人が見分け、記入漏れも人が予定と見比べます。 本格構成で1分になり、この段階が本記事の想定です。 差が大きいのは、新しい行の取り出しと予定との照合が自動になり、人が見るのが印の付いた欄だけになるからです。 段階を飛ばさないでください。 半自動化の1か月で、読み違いの多い欄が見え、測定の予定と変化の幅も杜氏と詰められます。幅が決まらないうちに本格構成に進むと、印が多すぎて誰も見なくなります。
05工数削減シミュレーション
導入後 720件 × 1分 ÷ 60 = 12 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 冷蔵の仕込み蔵などで年間を通して仕込みを行い、常に十数本から数十本のもろみが動いている酒蔵。蔵人がタンクの脇で紙の経過簿に毎日手書きし、製造担当が夕方に表計算へ打ち直して経過の表と図を作っている場合。測り忘れや書き忘れに気づくのが翌日以降になり、杜氏がタンクを回って紙をめくらないと全体が見えない場合。
- 寒造りの時期だけ仕込みを行い、もろみが動いている月が限られる酒蔵(毎月の件数が立たない)。品温や比重をセンサーと端末で自動記録しており、手書きの経過簿が無い場合。タンクが数本で、打ち直しの手間が小さい場合。なお、もろみの状態の良し悪し、温度の操作、上槽の時期の判断、酒税法上の帳簿の記載と申告は、この構成では代替できません。
07最小構成で試す方法
- 上槽の済んだ経過簿から10枚を選ぶ(鉛筆の薄いもの、「〃」や「▲」を使った人の書いたもの、2枚目に続いたものを入れる)
- その10枚について、表計算に打ち込まれた値を書き出しておく
- 経過簿の画像を、手元の生成AIの画面に1枚ずつ貼る
- 「この経過簿の表を、日付・日数・品温(朝)・品温(夕)・室温・ボーメ・日本酒度・アルコール分・酸度・アミノ酸度・備考の表にしてください。読めない欄は空にしてください。記号は書かれたとおりに写してください。計算や推測で埋めないでください」と指示する
- 出てきた表を、打ち込まれた値と1欄ずつ比べる
10枚で約300行になり、書き方の癖はひととおり出ます。 Form Parser とプログラムを組む前に、手書きの経過簿が表として読めるのかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 打ち込まれた値とほぼ同じ表が出た | OCR の API と照合の処理に進む |
| 符号や小数点を落とした | 解像度と撮り方を見直す。構成は有効 |
| 空いている欄を前の行の値で埋めた | 指示と、後段の照合で止められる |
| 読めない行が多い | 鉛筆と紙の扱いが先。 AIの問題ではない |
3行目が出たら、その表を杜氏に見せてください。 埋められた欄が書き忘れか測らない日かの答えが、測定の予定の一覧の最初の材料になります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 空いている欄を前の行の値で埋める | 埋めることを禁じ、予定との照合で記入漏れの印を付ける |
| 日本酒度の符号を落とす・付ける | 記号を文字のまま写させ、読めなければ unreadable |
| ボーメの小数点が消える | 撮影の解像度を上げ、桁の範囲をプログラムで確かめる |
| 毎日読むたびに過去の行が上書きされる | 確定済みの行は書き換えない。 新しい行だけを取り込む |
| 書き直しと読み違いの区別がつかない | 元の文字を持ち、変わったものは人が確かめる |
| 「〃」がそのまま値として入る | 決まりで置き換え、置き換えた記録を残す |
| タンクの番号で引いて前のもろみと混ざる | 仕込みの記号と順号で照合する |
| 紙を隣のタンクの板に挟む | 札の番号と上の欄の番号を突き合わせる |
| 変化の幅を決めずに始めて印が多すぎる | 半自動化の1か月で杜氏と幅を詰める |
| 国外で処理されることを確かめていない | 日本のリージョンは無い。 蔵の情報の扱いの決まりに照らす |
| 経過の表を酒税の帳簿の代わりにする | 帳簿は担当者が記載する。表は製造の管理の記録 |
上の2行が、この構成でいちばん重い失敗です。 どちらも、紙に書かれていない値が表に入る経路です。
4行目と5行目は、毎日同じ紙を読む構成に固有の失敗です。 全行を流し込むと、ある日の読み違いで過去の値が静かに変わります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 仕込みの記号と順号、タンクの番号、日ごとの品温・ボーメ・日本酒度・アルコール分・酸度・アミノ酸度、備考の操作の記録、記入した蔵人の名前(書かれている場合)です。個人情報は少ないものの、もろみの経過は蔵の造りの中身で、外に出したくない情報です。
- 処理の場所を確かめる … Form Parser の対応リージョンに日本はありません。
us・euかシンガポールなどから選びます。造りの記録が国外で処理されることを、蔵の決まりに照らして確かめます - 生成AIに渡す範囲を絞る … 生成AIには表と上の欄だけを渡し、仕込みの計画表や配合は渡しません。照合は Python の側で行います
- 判断を代替しない … もろみの状態の良し悪し、温度の操作、上槽の時期は杜氏が決めます。構成が出すのは、幅を超えたという印までです
- 酒税の帳簿の記載を代替しない … 国税庁の通達は、酒類製造者と酒母・もろみの製造者が記帳すべき事項を示し、数量等の測定は原則として実測、アルコール分等の測定は原則として国税庁所定分析法によるとしています。読み取った値は測った値を写したものにすぎず、帳簿への記載は担当者が行います
- 元の紙を残す … 通達では、酒類製造者等の帳簿は閉鎖後7年間保存するとされています。経過簿の紙と画像をどう残すかは、帳簿との関係も含めて蔵の決まりで決めます
誤りが起きた場合のリスクは、書かれていない値が表に入って経過を読み違えることと、急な変化に気づくのが遅れることの2つです。前者は埋めることの禁止と予定との照合で、後者は撮った順の読み取りと幅の照合で防ぎます。
10まず何から始めるか
1週目:測定の予定と変化の幅を書き出す
杜氏に、仕込みの種類ごとに、もろみの何日目に何を測るかを一覧にしてもらいます。あわせて、品温とボーメについて、前日からどれだけ動いたら知らせてほしいかを決めます。最初は大まかで構いません。 半自動化の1か月で詰めていきます。
2週目:10枚で試す
上槽の済んだ経過簿から10枚を選び、最小構成で表にさせて、打ち込まれた値と比べます。空いている欄を埋めていないか、符号と小数点を落としていないかを最優先で見ます。
3週目:撮り方と紙の扱いを決める
撮影の位置、タンクの番号の札、撮る時刻を決めます。読めない行が多ければ、鉛筆の濃さと、経過簿をクリアファイルに入れるかどうかを見直します。
4週目:Form Parser から一覧までをつなぐ
経過簿の画像を保存すると Form Parser が動き、タンクごとの行を一覧に書き出すところまで作ります。この時点では照合を入れず、読み取りの結果だけを見ます。
2か月目: 確定済みの行との照合、測定の予定との照合、前日との差、取り違えの検知を足し、確認画面で印の付いた欄だけを見る運用にします。3か月目以降: 上槽の近いもろみの値の一覧を帳簿の担当に渡す形を足し、1件3分が何分になったかを実測します。記入漏れにその日のうちに気づけるようになり、杜氏が夕方に全タンクの経過を一覧で見られるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Form Parser がキーと値のペア、表、チェックボックスなどを抽出すること。言語の一覧で日本語(ja)が手書きに対応する言語として示されていること(原文の HTML で確認)。対応リージョンが us・eu・asia-southeast1 などで、日本のリージョンが無いこと。同期の要求のページ数の上限が15であること | Google Cloud: Processor list | 2026-10-15 |
| Form Parser が学習済みで追加の学習ができないこと。行や列をまたぐセルの無い表を抽出すること | Google Cloud: Form Parser | 2026-10-15 |
text が認識されたテキストの唯一の元で、ほかの欄が startIndex・endIndex で指すこと。formFields が fieldName と fieldValue を持つこと。表が headerRows と bodyRows に分かれ、rowSpan と colSpan が常に1であること | Google Cloud: Handle the processing response | 2026-10-15 |
| 対応するファイルの形式(PDF、JPEG、PNG など)。スキャンは最低200dpi、300dpi以上で一般に最良の結果とされること | Google Cloud: Supported files | 2026-10-15 |
| オンラインの処理の要求のファイルの大きさの上限が40MBであること | Google Cloud: Document AI limits | 2026-10-15 |
構造化出力が output_config.format に JSON スキーマを渡して有効になること。オブジェクトに additionalProperties: false が必要なこと。数値の minimum・maximum や文字列の minLength・maxLength が非対応であること | Claude Docs: Structured outputs | 2026-10-15 |
| 酒類製造者及び酒母又はもろみの製造者の記帳事項として、もろみの仕込前及び仕込後の深さ・数量・品温・アルコール分・エキス分(清酒は日本酒度)、こす直前のもろみの深さ・数量・品温・アルコール分・エキス分などが挙げられていること。数量等の測定は原則として実測、アルコール分等の測定は原則として国税庁所定分析法によること。酒類製造者等の帳簿は閉鎖後7年間保存すること | 国税庁: 酒税法及び酒類行政関係法令等解釈通達 第46条 記帳義務 | 2026-10-15 |
もろみの状態の判断、温度の操作、上槽の時期、酒税の帳簿の記載と申告は、杜氏と蔵の担当者が判断してください。 本記事は、上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1626)についてのご相談はこちらから。
