施設園芸の農業法人がハウスごとに手書きする温度・湿度・灌水の記録を読み取り、日ごとの表にそろえて、管理の目安を外れた日と温度計の戻し忘れを拾う
ハウスごとに手書きされる温度・湿度・灌水の記録表を毎夕撮影して読み取り、その日の値をハウス×日付の表にそろえます。生育の段階ごとの管理の目安を外れた日と、温度計の戻し忘れの候補を拾います。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- その他
- 対象部門
- 生産
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- データ分析に時間がかかる/入力作業が多い/属人化している
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/判断支援/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 作業者が、夕方にハウスを回り、温度計と湿度計を読んで記録表のその日の列に書き、温度計の針を戻す
- 灌水の回数と量、換気と暖房の運転を、その日の作業から書く
- 週の終わりに、記録表を事務所に持ち帰る
- 事務の担当が、記録表を1枚ずつ見て、表計算のハウスのシートに7日分を打ち込む
- 月末に、栽培の責任者が台帳を見て、気温や湿度が目安を外れた日を探し、翌月の管理を考える
- 記録表を、ハウスごとに綴じて保管する
- 人作業者が、いまと同じく夕方に記録表のその日の列を書き、温度計の針を戻す
- 人書き終えた記録表を、ハウスの入口でスマートフォンで撮り、共有のフォルダへ保存する
- 自動15分ごとに動く処理が新しい画像を見つけ、OCRが表と上の欄と信頼度を返す
- 自動生成AIが、表の行を項目に、列を曜日に対応づけ、その日の列の値を文字のまま写す
- 自動週の始まりの日付から列の日付を決め、その日の値をハウス×日付の表の行にする
- 自動生育の段階ごとの管理の目安、前日の値、記入漏れを決まりで確かめる
- 自動印の無い日は台帳に書き込み、印の付いた日は確認待ちの一覧に入れる
- 人事務の担当が、確認待ちの欄を画像と並べて直す。戻し忘れの候補は作業者に聞く
- 自動毎朝、目安を外れた日のあるハウスの一覧を作る
- 人栽培の責任者が、一覧を見てハウスに行き、管理を直すかを決める
各工程の詳しい説明を読む
- 作業者が、夕方にハウスを回り、温度計と湿度計を読んで記録表のその日の列に書き、温度計の針を戻す
- 灌水の回数と量、換気と暖房の運転を、その日の作業から書く
- 週の終わりに、記録表を事務所に持ち帰る
- 事務の担当が、記録表を1枚ずつ見て、表計算のハウスのシートに7日分を打ち込む
- 月末に、栽培の責任者が台帳を見て、気温や湿度が目安を外れた日を探し、翌月の管理を考える
- 記録表を、ハウスごとに綴じて保管する
(a)打ち直しが週末にたまる。 12棟分の記録表が週の終わりに一度に来て、1枚に7日分の列があります。曜日の列を日付の行に直しながら打つので、行と列を取り違えないよう気を使います。
(b)外れた日に気づくのが月末になる。 夜温が目安より下がった日、湿度が高い日が続いた週は、病気や生育の乱れにつながることがありますが、台帳を見るのは月末です。 気づいたときには、その週はとうに過ぎています。
(c)温度計の戻し忘れが記録に残る。 針を戻し忘れた翌日の最高気温は、前日と同じ値になります。打ち直す側はそれを本当の値として打ち、台帳の上では「2日続けて暑かった」に見えます。
(d)記録の見方が責任者の頭の中にある。 生育の段階ごとに夜温や湿度のどこを見るかは、栽培の責任者が経験で持っています。責任者が不在の週は、記録を見る人がいません。
- 【人】 作業者が、いまと同じく夕方に記録表のその日の列を書き、温度計の針を戻す
- 【人】 書き終えた記録表を、ハウスの入口でスマートフォンで撮り、共有のフォルダへ保存する
- 【自動】 15分ごとに動く処理が新しい画像を見つけ、OCRが表と上の欄と信頼度を返す
- 【自動】 生成AIが、表の行を項目に、列を曜日に対応づけ、その日の列の値を文字のまま写す
- 【自動】 週の始まりの日付から列の日付を決め、その日の値をハウス×日付の表の行にする
- 【自動】 生育の段階ごとの管理の目安、前日の値、記入漏れを決まりで確かめる
- 【自動】 印の無い日は台帳に書き込み、印の付いた日は確認待ちの一覧に入れる
- 【人】 事務の担当が、確認待ちの欄を画像と並べて直す。戻し忘れの候補は作業者に聞く
- 【自動】 毎朝、目安を外れた日のあるハウスの一覧を作る
- 【人】 栽培の責任者が、一覧を見てハウスに行き、管理を直すかを決める
9番目の一覧が、(b)と(d)への答えです。 目安を外れた日が翌朝の一覧に載るので、責任者が月末を待たずに見られ、責任者が不在でも同じ一覧が残ります。
7番目で、印の無い日は人を通さずに書き込みます。 本記事の人間の確認が「条件付き」なのは、このためです。
02今回想定するシステム構成
ハウスごとの記録表(1棟1週間1枚、行が項目・列が曜日、手書き)
│ 毎夕、ハウスの入口でスマートフォンで撮影 → 共有フォルダ
▼【トリガー】15分ごとの時間主導のトリガー
Google Apps Script ── 新しい画像を探す
▼
Google Document AI(Form Parser)
│ 表(項目ごとの行・曜日ごとの列)、上の欄、信頼度
▼
Claude API(構造化出力)── 行と項目・列と曜日の対応づけ、その日の列の書き写し
▼
Google Apps Script ── 曜日の列から日付の行への組み替え
── 管理の目安、前日の値、記入漏れの照合
▼
ハウス×日付の環境の台帳、確認待ちの一覧、目安を外れた日の一覧
▼
【事務の担当が確認待ちだけ直す】→【栽培の責任者がハウスを見る】| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence |
| 生成AI | Claude API(行と列の対応づけ、値の書き写し) | OpenAI API、Gemini API |
| 連携 | Google Apps Script(フォルダの確認、API の呼び出し、台帳の更新) | Python |
| 差異計算 | Google Apps Script(日付への組み替え、目安と前日の値の照合) | Python |
| 保管 | Google ドライブ(記録表の画像と読み取りの結果) | 事務所のファイルサーバー |
環境の制御の機器の設定には書き込みません。 この構成が出すのは、目安を外れた日の一覧までです。温度や灌水の設定を変えるのは、ハウスを見た栽培の責任者です。
土台は Document AI の Form Parser です。 公式の説明では、Form Parser はキーと値のペア、表、チェックボックス、汎用のエンティティを OCR のテキストに加えて抽出するとされ、プロセッサの一覧の言語表では、日本語(ja)が手書きに対応する言語として示されています。週の表は表として、上の欄はキーと値のペアとして読みます。
処理する場所に日本のリージョンはありません。 プロセッサの一覧では、Form Parser の対応リージョンは us・eu のほか、asia-southeast1(シンガポール)などです。記録表にあるのはハウスの番号と環境の値で、個人の情報はほとんど含みませんが、栽培の管理の中身ではあります。 国外で処理されることを、法人の決まりに照らして確かめます。
Form Parser は学習済みで追加の学習はできず、表は行や列をまたぐセルの無いものが対象とされています。 記録表の見出しは1段にし、「温度」の下に「最高」「最低」を2段にする書き方はやめて、「最高気温」「最低気温」を別の行にします。
03どうやって実装するのか
処理の起点を決める
Google Apps Script の時間主導のトリガーで、15分ごとに共有フォルダを見に行きます。 公式の説明では、インストール型のトリガーとして挙げられているのは、開いたとき・編集・変更・フォームの送信・カレンダーの予定と、時間主導のトリガーで、ドライブにファイルが作られたことをきっかけにするものはありません。 時間で起動して、新しいファイルを探す形にします。
公式の説明では、時間主導のトリガーは毎分から月1回までの間隔で動かせ、時刻は少しずらされることがあるとされ、インストール型のトリガーは作った人のアカウントで動くとされています。担当者の異動で止まらないよう、法人の業務用のアカウントで作ります。
撮るのは毎夕です。 週の終わりにまとめて撮ると、(b)の気づきの遅れが残ります。同じ記録表を毎日撮ることになるので、取り込むのはその日の列だけにします。 処理が終わった画像は処理済みのフォルダへ移し、移すのは成功したときだけにします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 記録表の画像 | 1棟1週間の1枚、撮影の日時、撮った人 | 作業者のスマートフォン |
| 読み取りの結果 | テキスト、表(行と列)、上の欄、信頼度 | Google Document AI |
| ハウスの一覧 | ハウスの番号、品目、作型、測る道具(機器の画面か温度計か) | 事務の担当が持つ一覧 |
| 生育の段階の表 | ハウスごとの定植日、段階の切り替わりの日 | 栽培の責任者が持つ表 |
| 管理の目安の一覧 | 品目・段階ごとの夜温の下限、日中の上限、湿度の上限 | 栽培の責任者が決める一覧 |
| 前日までの台帳 | ハウスごとの確定した値 | 環境の台帳 |
質を決めるのは、管理の目安の一覧です。 栽培の責任者が経験で持っている見方を、品目と生育の段階ごとの数字にします。ここが(d)の「責任者の頭の中」を外に出す作業で、AIの仕組みとは関係なく価値があります。
ハウスの一覧に「測る道具」を持つのは、戻し忘れの照合のためです。 機器の画面から写す棟では、針の戻し忘れは起きません。温度計の棟だけに、戻し忘れの照合を当てます。
データの取得方法を決める
読み取りは、Apps Script から Form Parser のプロセッサの API を呼び、画像を渡すだけです。返ってくる Document から、表と上の欄と信頼度を取り出します。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 全テキスト | text | ほかの欄が startIndex・endIndex で指す原文 |
| 上の欄 | pages[].formFields(fieldName と fieldValue) | ハウスの番号、週の始まりの日付、書いた人 |
| 週の表 | pages[].tables(headerRows と bodyRows) | 見出しの行の曜日、本体の行の項目と値 |
| 信頼度 | 各要素の layout の信頼度 | 確認の要る欄の印 |
公式の説明では、text が認識されたテキストの唯一の元で、ほかの欄は startIndex と endIndex でその位置を指すとされ、表は headerRows と bodyRows に分かれるとされています。この記録表では、見出しの行に曜日が、本体の各行の1列目に項目の名前が並びます。 行と列の両方に見出しがある表です。
値の空いた欄には気を配ります。 公式の説明では、値の空いたキーと値のペアは確実には読めないとされています。週の始まりの日付が空欄だと上の欄ごと返ってこないことがあり、その場合は列の日付が決まらないので、記録表ごと確認待ちにします。
Apps Script の割り当ての上限にも気を配ります。公式の説明では、1回の実行の時間は6分まで、トリガーの合計の実行時間は Google Workspace のアカウントで1日6時間までとされています。12枚なら1回の起動で収まりますが、撮り直しが重なる日に備え、1回で処理する枚数を決めておきます。
AIへ渡す前に整形する
- 画像の向きと傾き … スマートフォンで斜めに撮った画像を、紙の四隅で補正します
- 解像度 … 公式の説明では、スキャンは最低200dpi、300dpi以上で一般に最良の結果とされています。1枚に63欄あるので、欄が小さくならないよう紙全体を大きく撮ります
- ファイルの形式と大きさ … JPEG で保存し、オンラインの処理の要求の上限の40MBと、画像の40メガピクセルの上限に収めます
- ハウスの確認 … 上の欄のハウスの番号を、ハウスの一覧と照らします
- その日の列の決定 … 撮影の日時と週の始まりの日付から、取り込むべき曜日の列を決めます
- 重複の検知 … 同じハウス・同じ日で二度撮ったものは、新しいほうだけを使います
5番目を前処理に置くのが、この構成の要点です。 生成AIに「その日の列を写して」と頼む前に、どの曜日の列が対象かをプログラムが決めて渡します。 撮影が日付をまたいだ夜や、前日の書き忘れを翌日に書き足した場合は、撮影の日時だけで決めず、前日の列が空いているかも見て、2列を取り込む候補にします。
AIに処理させる
生成AIにさせるのは2つだけです。 表の行を項目に、列を曜日に対応づけることと、指定された曜日の列の値を文字のまま写すことです。
| 見るもの | させること | 判断できないときの扱い |
|---|---|---|
| 本体の行の1列目 | 最高気温・最低気温・湿度・灌水の回数・灌水の量・換気・暖房・天候・メモのどれかを決める | 決められない行は unknown |
| 見出しの行 | 各列が月〜日のどれかを決める | 決められない列は unknown |
| 指定された曜日の列 | 各項目の値をセルの文字のまま写す | 読めない文字は空にし、unreadable |
| 換気・暖房・天候 | 書かれた文字や記号(○、×、晴、曇)をそのまま写す | 書かれたとおり |
行と列の対応づけを生成AIにさせるのは、作業者が列を書き間違えるからです。 水曜の値を木曜の列に書いた、項目の名前の欄に略字を書き込んだ、といった紙の上のずれを、見出しの文字から決め直します。
| させないこと | 理由 |
|---|---|
| 曜日から日付を計算する | 週の始まりの日付からプログラムが決める |
| 空いている欄を前日の値で埋める | 記入漏れが消える |
| 目安を外れたかの判断 | 品目と段階で目安が違う。決まりで照らす |
| 温度計の戻し忘れの判断 | 前日の値との比較で決まりとして行う |
| 管理の直し方の提案 | ハウスを見た責任者が決める |
2行目がいちばん起きやすい失敗です。 最低気温の欄だけが空いていると、生成AIは前日の値や最高気温から見て「ありそうな値」を入れます。入れた瞬間に記入漏れが消え、その値が目安の照合にまで使われます。
指示内容を固定する
あなたは施設園芸の農業法人の事務の担当で、ハウスの環境の記録表の読み取り結果から、
指定された曜日の列の値を写す係です。
OCRが返した表と上の欄だけを見てください。推測で埋めないでください。
【項目】
max_temp(最高気温)、min_temp(最低気温)、humidity(朝の湿度)、
irrigation_count(灌水の回数)、irrigation_amount(灌水の量)、
vent(換気窓)、heater(暖房)、weather(天候)、memo(メモ)
【厳守事項】
- 本体の各行がどの項目に当たるかを row_map に、
見出しの各列がどの曜日に当たるかを col_map に書いてください。
決められないものは unknown にしてください。
- 値を写すのは、target_weekday に指定された曜日の列だけです。
ほかの列の値を写さないでください。
- セルの文字をそのまま写してください。数字を計算しないでください。
小数点や桁を補わないでください。
- 「○」「×」「開」「閉」「晴」などの記号や文字は、書かれたとおりに写してください。
- 読めないセルは空にし、unreadable_cells に入れてください。
前日の列、ほかの項目、ありそうな値で埋めないでください。
- 空いているセルは空のまま写してください。空いている理由を書かないでください。
- 日付を計算しないでください。気温や湿度が良いか悪いかを書かないでください。
【OCRの表】{tables}
【上の欄】{form_fields}
【target_weekday】{weekday}
「ほかの列の値を写さない」を明記しているのは、生成AIが親切に表全体を写すからです。 毎夕同じ紙を読むので、全列を写させると、確定済みの前の日の値を毎回上書きする経路ができます。 前の日の列は、照合のときに Apps Script が台帳の値と見比べるだけにします。
出力形式を固定する
次の形のJSONで受け取ります。
{
"image_id": "",
"header": {
"house_no": "",
"crop": "",
"week_start_raw": "",
"writer": ""
},
"row_map": [ { "row_index": 0, "field": "max_temp | min_temp | humidity | irrigation_count | irrigation_amount | vent | heater | weather | memo | unknown" } ],
"col_map": [ { "column_index": 1, "weekday": "mon | tue | wed | thu | fri | sat | sun | unknown" } ],
"target_weekday": "mon | tue | wed | thu | fri | sat | sun",
"values": {
"max_temp": "", "min_temp": "", "humidity": "",
"irrigation_count": "", "irrigation_amount": "",
"vent": "", "heater": "", "weather": "", "memo": ""
},
"unreadable_cells": [ { "field": "" } ]
}
週の始まりの日付を week_start_raw という文字列で受けるのは、書き方がばらばらだからです。 「10/13」「10月13日」「R8.10.13」と書かれ、年の無いものもあります。Apps Script の側で、撮影の日時に最も近い月曜として解釈し、解釈できなければ記録表ごと確認待ちにします。
Claude の構造化出力は、output_config.format に type: "json_schema" で JSON スキーマを渡して有効にし、オブジェクトには additionalProperties: false が必要とされています。 数値の minimum・maximum は対応していないとされているので、値の範囲はスキーマではなく Apps Script で確かめます。
後段の照合は、この出力に対して決まりで行います。
| 照合 | 外れたとき |
|---|---|
| ハウスの番号が一覧にある | 記録表ごと止める |
| 週の始まりの日付から、指定の曜日の日付が決まる | 記録表ごと確認待ち |
| 気温・湿度の欄が数字で、ありうる範囲に入る | 「数字の疑い」 |
| 必ず書く項目に値がある | 「記入漏れ」 |
| 温度計の棟で、最高気温が前日と同じ、かつ最低気温が前日と同じか低い | 「戻し忘れの候補」 |
| 最低気温が段階の夜温の下限以上、最高気温が日中の上限以下、湿度が上限以下 | 「目安を外れた日」 |
| 台帳の前の日の値と、画像の前の日の列の文字が同じ | 「書き直しの候補」 |
5行目の戻し忘れの照合は、目安の照合より先に行います。 戻し忘れの日の値で目安を見ると、実際には起きていない「暑すぎた日」や「冷えすぎた日」が一覧に載ります。 戻し忘れの候補になった日は、目安の照合から外して確認待ちに入れます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 共有フォルダ | Apps Script の時間主導のトリガー | 新しい画像を15分ごとに探す |
| Google Document AI | API呼び出し | 表・上の欄・信頼度を返す |
| Claude API | API呼び出し | 行と列の対応づけ、その日の列の書き写し |
| ハウスの一覧・生育の段階の表・管理の目安 | スプレッドシートの読み取り | 照らす目安と道具の種類 |
| 環境の台帳 | スプレッドシートへの書き込み | 照合を通った日の値 |
| 確認待ち・目安を外れた日の一覧 | スプレッドシートの別のシート | 印の付いた欄と画像へのリンク |
台帳へ自動で書き込むのは、照合で印が1つも付かなかった日だけです。 印の付いた日は、確認待ちの一覧で人が直してから書き込みます。管理の目安の一覧と生育の段階の表には書き込みません。 目安を変えるのは栽培の責任者で、表を直すのも人です。
目安を外れた日の一覧は、毎朝の始業の前に作ります。 責任者が朝の見回りの前に開けるよう、外れた項目と値と前後2日の値を並べ、画像へのリンクを付けます。
人が確認する
人が見るのは、確認待ちの一覧に入った日の、印の付いた欄だけです。
- 日付が決まらない記録表を先に見る … 週の始まりの日付を画像で読み、書き足します
- 戻し忘れの候補を作業者に聞く … 針を戻したかを聞き、戻し忘れなら「その日の値は無効」と記録します。前日と同じ値を、本当の値として残しません
- 記入漏れと数字の疑いを直す … 画像と並べて直し、書かれていなければ作業者に聞きます
- 目安を外れた日を責任者が見る … 毎朝の一覧で、ハウスに行って管理を直すかを決めます
2番目で「無効」と記録するのが、(c)への答えです。 温度計の値は翌日には読み直せないので、分からなかったことを分からなかったとして残すほうが、台帳の値として正しくなります。
目標は、360件をならして1件1.5分です。 印の無い日は人が開かず、印の付いた日は画像を開いて直すので数分かかります。責任者が一覧を見る時間も、この中に含めています。
例外に対処する
| 起きること | 対応 |
|---|---|
| ハウスの結露で紙が湿って読めない | unreadable。作業者に聞く |
| 週の始まりの日付が書かれていない | 記録表ごと確認待ち。撮影の日時から人が決める |
| 違う曜日の列に書いた | 列の対応づけで拾えなければ、「書き直しの候補」で人へ |
| 前日の書き忘れを翌日に書き足した | 前日の列も取り込む候補にし、書き足しとして記録する |
| 片付けや定植で記録しない日 | 生育の段階の表で「休作」の日は記入漏れの照合から外す |
| 新しい週の記録表に替え忘れた | 8列目が無い。翌週の月曜の撮影で「列が足りない」として印 |
| Document AI が応答しない | フォルダに残し、次の起動で再び処理する |
5行目を先に作っておくと、確認待ちが減ります。 片付けのハウスの記録表は全欄が空いていて、それがすべて記入漏れとして並ぶと、本当の書き忘れが埋もれます。
記録を残す
- 記録表の画像と、撮影の日時・撮った人
- OCR が返した
Documentの全文(text、formFields、tables、信頼度) - 生成AIの出力(行と列の対応づけ、写した値)
- 照合の結果と、そのとき使った管理の目安の一覧と生育の段階の版
- 人が直した記録と、「無効」とした日の記録
- 毎朝の目安を外れた日の一覧と、責任者が見た印
管理の目安の版を残すのは、目安を毎作見直すからです。 次の作付けの前に、前の作の外れた日と出来を見比べて目安を直します。当時の目安が残っていないと、外れたのが管理の問題か目安の問題かを比べられません。
「無効」とした日の記録は、温度計の扱いを見直す材料になります。 同じ棟や同じ曜日に戻し忘れが続くなら、夕方の見回りの順番か、温度計の置き場所に理由があります。作業者を責める材料にせず、手順を直すために使います。
04実装レベルの3段階
半自動化で、1件4分が2.5分程度になります。 読み取りは自動になりますが、日付への組み替えと目安との見比べは人が続けます。 本格構成で1.5分になり、この段階が本記事の想定です。 差が大きいのは、月末にまとめて目安を外れた日を探す時間が、毎朝の一覧を見る時間に置き換わるからです。 段階を飛ばさないでください。 半自動化の1か月で、管理の目安の一覧を責任者と詰められます。目安が決まらないうちに本格構成に進むと、毎朝の一覧が長すぎて誰も見なくなります。
05工数削減シミュレーション
導入後 360件 × 1.5分 ÷ 60 = 9 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 十数棟のハウスで年間を通して果菜類や花きを育てる農業法人で、環境の制御の機器がハウスごとにばらばらだったり、最高最低温度計を目で読んだりしていて、作業者が紙の記録表に手書きし、事務の担当が表計算に打ち直している場合。栽培の責任者が記録を見て管理を直すのが月に一度になっている場合。Google Workspace を使っている場合。
- 環境の測定の機器がすべてのハウスで記録をクラウドへ送っていて、手書きの記録が無い経営。ハウスが数棟で、打ち直しが短時間で終わる場合。作付けが一時期だけで、ハウスが空いている月が多い場合(毎月の件数が立たない)。なお、温度や灌水の設定の変更、病気の診断、農薬の使用の判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の記録表から10枚を選ぶ(温度計の棟、日付の書き方がまちまちなもの、空欄の多いものを入れる)
- その10枚について、台帳に打ち込まれた値を書き出しておく
- 記録表の画像を、手元の生成AIの画面に1枚ずつ貼る
- 「この記録表を、日付ごとに1行の表に組み替えてください。列は最高気温・最低気温・湿度・灌水の回数・灌水の量・換気・暖房・天候です。読めない欄は空にしてください。推測で埋めないでください」と指示する
- 出てきた表を、打ち込まれた値と1欄ずつ比べる
10枚で70日分になり、行と列の組み替えの誤りはひととおり出ます。 Form Parser と Apps Script を組む前に、曜日の列の表が正しく組み替えられるのかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 打ち込まれた値とほぼ同じ表が出た | OCR の API と照合の処理に進む |
| 曜日と日付がずれた | 週の始まりの日付の書き方を決める。構成は有効 |
| 空欄を前日の値で埋めた | 指示と、後段の照合で止められる |
| 2日続けて同じ最高気温が何度もある | (c)の実例。 戻し忘れの照合を先に作る |
4行目が出たら、その日の打ち込まれた値も見てください。 台帳にも同じ値が2日続いて入っているなら、これまでの月末の振り返りが、戻し忘れの値を含んだまま行われていたということです。 責任者に見せると、管理の目安を数字にする作業の動機になります。
2行目が出た場合も、構成をやめる理由にはなりません。 曜日のずれは、ほとんどが週の始まりの日付の書き方から来ます。日付の欄を印刷しておき、作業者は日だけを書く様式にすれば、ずれの多くは消えます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 曜日の列と日付がずれる | 週の始まりの日付をプログラムが解釈し、決まらなければ人へ |
| 毎夕全列を取り込み、前の日の値を上書きする | その日の列だけを写させる |
| 空欄を前日の値で埋める | 埋めることを禁じ、記入漏れの印を付ける |
| 戻し忘れの値を本当の値として台帳に入れる | 温度計の棟で前日と比べ、候補を目安の照合から外す |
| 「温度」の下に「最高」「最低」の2段の見出し | 行や列をまたぐセルは対象外。別の行に分ける |
| 片付けの棟で記入漏れの印が大量に出る | 生育の段階の表で休作の日を外す |
| ドライブのファイル作成で起動しようとする | その種類のトリガーは無い。 時間主導で探す |
| 国外で処理されることを確かめていない | 日本のリージョンは無い。 法人の決まりに照らす |
上の2行が、この構成でいちばん重い失敗です。 どちらも、別の日の値がその日の値として台帳に入る経路です。
4行目は、この題材に固有の失敗です。 読み取りがどれだけ正確でも、測る道具の扱いの誤りは、紙の上では正しい数字に見えます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: ハウスの番号、品目と作型、日ごとの気温・湿度・灌水・換気・暖房の記録、記入した作業者の名前です。個人の情報は作業者の名前程度ですが、栽培の管理の記録は法人の技術の中身です。
- 処理の場所を確かめる … Form Parser の対応リージョンに日本はありません。
us・euかシンガポールなどから選びます。栽培の記録が国外で処理されることを、法人の決まりや取引先との約束に照らします - 生成AIに渡す範囲を絞る … 生成AIには表と上の欄だけを渡し、管理の目安の一覧は渡しません。照合は Apps Script の側で行います
- 判断を代替しない … 温度や灌水の設定、病気の診断、農薬の使用は、栽培の責任者が決めます。構成が出すのは、目安を外れたという事実までです
- 作業者の評価に使わない … 戻し忘れや記入漏れの件数は、様式や手順を直す材料です。作業者ごとの件数を、そのまま評価に使わないでください
誤りが起きた場合のリスクは、別の日の値や戻し忘れの値が台帳に入ることと、目安を外れた日を見落とすことの2つです。前者はその日の列だけの取り込みと戻し忘れの照合で、後者は毎朝の一覧で防ぎます。
10まず何から始めるか
1週目:管理の目安を数字にする
栽培の責任者と、品目・生育の段階ごとに、夜温の下限、日中の上限、湿度の上限を決めます。最初は大まかで構いません。 あわせて、ハウスの一覧に測る道具の列を足します。
2週目:10枚で試す
先月の記録表から10枚を選び、最小構成で日付ごとの表にさせて、打ち込まれた値と比べます。曜日と日付がずれていないか、空欄を埋めていないかを最優先で見ます。
3週目:記録表の様式を決める
見出しを1段にし、週の始まりの日付の欄を大きくとった様式を作ります。撮る場所と時刻を決め、温度計の針を戻してから撮る順番を作業者と決めます。
4週目:Apps Script から一覧までをつなぐ
共有フォルダを15分ごとに見て Form Parser を呼び、その日の列を一覧に書き出すところまで作ります。この時点では台帳に書き込まず、読み取りの結果だけを見ます。
2か月目: 日付への組み替え、戻し忘れ・記入漏れ・目安の照合を足し、印の無い日を台帳に書き込む運用にします。3か月目以降: 毎朝の一覧を出し、1件4分が何分になったかを実測します。週末の打ち直しがなくなり、責任者が毎朝目安を外れたハウスを見に行けるようになった時点で、この構成は完成です。
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 |
| 対応するファイルの形式(JPEG、PNG など)。スキャンは最低200dpi、300dpi以上で一般に最良の結果とされること | Google Cloud: Supported files | 2026-10-15 |
| オンラインの処理の要求のファイルの大きさの上限が40MB、画像の解像度の上限が40メガピクセルであること | Google Cloud: Document AI limits | 2026-10-15 |
構造化出力が output_config.format に type: "json_schema" で JSON スキーマを渡して有効になること。オブジェクトに additionalProperties: false が必要なこと。数値の minimum・maximum が非対応であること | Claude Docs: Structured outputs | 2026-10-15 |
| インストール型のトリガーの種類(開いたとき・編集・変更・フォームの送信・カレンダーの予定・時間主導)。時間主導のトリガーが毎分から月1回まで動かせ、時刻が少しずらされることがあること。インストール型のトリガーが作った人のアカウントで動くこと | Apps Script: Installable triggers | 2026-10-15 |
| 1回の実行の時間が6分まで、トリガーの合計の実行時間が Google Workspace で1日6時間までであること(予告なく変わりうるとされていること) | Apps Script: Quotas for Google Services | 2026-10-15 |
温度や灌水の設定、病気の診断、農薬の使用は、栽培の責任者が判断してください。 本記事は、上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1709)についてのご相談はこちらから。
