Media > AI活用ユースケース > 生産 > 施設園芸の農業法人がハウスごとに手書きする温度・湿度・灌水の記録を読み取り、日ごとの表にそろえて、管理の目安を外れた日と温度計の戻し忘れを拾う

施設園芸の農業法人がハウスごとに手書きする温度・湿度・灌水の記録を読み取り、日ごとの表にそろえて、管理の目安を外れた日と温度計の戻し忘れを拾う

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

ハウスごとに手書きされる温度・湿度・灌水の記録表を毎夕撮影して読み取り、その日の値をハウス×日付の表にそろえます。生育の段階ごとの管理の目安を外れた日と、温度計の戻し忘れの候補を拾います。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
Azure AI/Google Document AI
連携・自動化
Google Apps Script/Python
対象業界
その他
対象部門
生産
対象業務
データ入力・転記/内容確認・チェック
主な課題
データ分析に時間がかかる/入力作業が多い/属人化している
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/判断支援/工数削減
導入難易度
★★☆☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
24h/月
AI導入後
9h/月
想定削減
63%
年間削減
180h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 作業者が、夕方にハウスを回り、温度計と湿度計を読んで記録表のその日の列に書き、温度計の針を戻す
  2. 灌水の回数と量、換気と暖房の運転を、その日の作業から書く
  3. 週の終わりに、記録表を事務所に持ち帰る
  4. 事務の担当が、記録表を1枚ずつ見て、表計算のハウスのシートに7日分を打ち込む
  5. 月末に、栽培の責任者が台帳を見て、気温や湿度が目安を外れた日を探し、翌月の管理を考える
  6. 記録表を、ハウスごとに綴じて保管する
導入後(After)
  1. 人作業者が、いまと同じく夕方に記録表のその日の列を書き、温度計の針を戻す
  2. 人書き終えた記録表を、ハウスの入口でスマートフォンで撮り、共有のフォルダへ保存する
  3. 自動15分ごとに動く処理が新しい画像を見つけ、OCRが表と上の欄と信頼度を返す
  4. 自動生成AIが、表の行を項目に、列を曜日に対応づけ、その日の列の値を文字のまま写す
  5. 自動週の始まりの日付から列の日付を決め、その日の値をハウス×日付の表の行にする
  6. 自動生育の段階ごとの管理の目安、前日の値、記入漏れを決まりで確かめる
  7. 自動印の無い日は台帳に書き込み、印の付いた日は確認待ちの一覧に入れる
  8. 人事務の担当が、確認待ちの欄を画像と並べて直す。戻し忘れの候補は作業者に聞く
  9. 自動毎朝、目安を外れた日のあるハウスの一覧を作る
  10. 人栽培の責任者が、一覧を見てハウスに行き、管理を直すかを決める
各工程の詳しい説明を読む
  1. 作業者が、夕方にハウスを回り、温度計と湿度計を読んで記録表のその日の列に書き、温度計の針を戻す
  2. 灌水の回数と量、換気と暖房の運転を、その日の作業から書く
  3. 週の終わりに、記録表を事務所に持ち帰る
  4. 事務の担当が、記録表を1枚ずつ見て、表計算のハウスのシートに7日分を打ち込む
  5. 月末に、栽培の責任者が台帳を見て、気温や湿度が目安を外れた日を探し、翌月の管理を考える
  6. 記録表を、ハウスごとに綴じて保管する

(a)打ち直しが週末にたまる。 12棟分の記録表が週の終わりに一度に来て、1枚に7日分の列があります。曜日の列を日付の行に直しながら打つので、行と列を取り違えないよう気を使います。

(b)外れた日に気づくのが月末になる。 夜温が目安より下がった日、湿度が高い日が続いた週は、病気や生育の乱れにつながることがありますが、台帳を見るのは月末です。 気づいたときには、その週はとうに過ぎています。

(c)温度計の戻し忘れが記録に残る。 針を戻し忘れた翌日の最高気温は、前日と同じ値になります。打ち直す側はそれを本当の値として打ち、台帳の上では「2日続けて暑かった」に見えます。

(d)記録の見方が責任者の頭の中にある。 生育の段階ごとに夜温や湿度のどこを見るかは、栽培の責任者が経験で持っています。責任者が不在の週は、記録を見る人がいません。

  1. 【人】 作業者が、いまと同じく夕方に記録表のその日の列を書き、温度計の針を戻す
  2. 【人】 書き終えた記録表を、ハウスの入口でスマートフォンで撮り、共有のフォルダへ保存する
  3. 【自動】 15分ごとに動く処理が新しい画像を見つけ、OCRが表と上の欄と信頼度を返す
  4. 【自動】 生成AIが、表の行を項目に、列を曜日に対応づけ、その日の列の値を文字のまま写す
  5. 【自動】 週の始まりの日付から列の日付を決め、その日の値をハウス×日付の表の行にする
  6. 【自動】 生育の段階ごとの管理の目安、前日の値、記入漏れを決まりで確かめる
  7. 【自動】 印の無い日は台帳に書き込み、印の付いた日は確認待ちの一覧に入れる
  8. 【人】 事務の担当が、確認待ちの欄を画像と並べて直す。戻し忘れの候補は作業者に聞く
  9. 【自動】 毎朝、目安を外れた日のあるハウスの一覧を作る
  10. 【人】 栽培の責任者が、一覧を見てハウスに行き、管理を直すかを決める

9番目の一覧が、(b)と(d)への答えです。 目安を外れた日が翌朝の一覧に載るので、責任者が月末を待たずに見られ、責任者が不在でも同じ一覧が残ります。

7番目で、印の無い日は人を通さずに書き込みます。 本記事の人間の確認が「条件付き」なのは、このためです。

02今回想定するシステム構成

構成図
ハウスごとの記録表(1棟1週間1枚、行が項目・列が曜日、手書き)
   │  毎夕、ハウスの入口でスマートフォンで撮影 → 共有フォルダ
   ▼【トリガー】15分ごとの時間主導のトリガー
Google Apps Script ── 新しい画像を探す
   ▼
Google Document AI(Form Parser)
   │   表(項目ごとの行・曜日ごとの列)、上の欄、信頼度
   ▼
Claude API(構造化出力)── 行と項目・列と曜日の対応づけ、その日の列の書き写し
   ▼
Google Apps Script ── 曜日の列から日付の行への組み替え
                   ── 管理の目安、前日の値、記入漏れの照合
   ▼
ハウス×日付の環境の台帳、確認待ちの一覧、目安を外れた日の一覧
   ▼
【事務の担当が確認待ちだけ直す】→【栽培の責任者がハウスを見る】
役割想定する製品代替候補
OCRGoogle Document AI(Form Parser)Azure AI Document Intelligence
生成AIClaude 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どうやって実装するのか

Step1

処理の起点を決める

Google Apps Script の時間主導のトリガーで、15分ごとに共有フォルダを見に行きます。 公式の説明では、インストール型のトリガーとして挙げられているのは、開いたとき・編集・変更・フォームの送信・カレンダーの予定と、時間主導のトリガーで、ドライブにファイルが作られたことをきっかけにするものはありません。 時間で起動して、新しいファイルを探す形にします。

公式の説明では、時間主導のトリガーは毎分から月1回までの間隔で動かせ、時刻は少しずらされることがあるとされ、インストール型のトリガーは作った人のアカウントで動くとされています。担当者の異動で止まらないよう、法人の業務用のアカウントで作ります。

撮るのは毎夕です。 週の終わりにまとめて撮ると、(b)の気づきの遅れが残ります。同じ記録表を毎日撮ることになるので、取り込むのはその日の列だけにします。 処理が終わった画像は処理済みのフォルダへ移し、移すのは成功したときだけにします。

Step2

入力データを集める

データ中身取得元
記録表の画像1棟1週間の1枚、撮影の日時、撮った人作業者のスマートフォン
読み取りの結果テキスト、表(行と列)、上の欄、信頼度Google Document AI
ハウスの一覧ハウスの番号、品目、作型、測る道具(機器の画面か温度計か)事務の担当が持つ一覧
生育の段階の表ハウスごとの定植日、段階の切り替わりの日栽培の責任者が持つ表
管理の目安の一覧品目・段階ごとの夜温の下限、日中の上限、湿度の上限栽培の責任者が決める一覧
前日までの台帳ハウスごとの確定した値環境の台帳

質を決めるのは、管理の目安の一覧です。 栽培の責任者が経験で持っている見方を、品目と生育の段階ごとの数字にします。ここが(d)の「責任者の頭の中」を外に出す作業で、AIの仕組みとは関係なく価値があります。

ハウスの一覧に「測る道具」を持つのは、戻し忘れの照合のためです。 機器の画面から写す棟では、針の戻し忘れは起きません。温度計の棟だけに、戻し忘れの照合を当てます。

Step3

データの取得方法を決める

読み取りは、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回で処理する枚数を決めておきます。

Step4

AIへ渡す前に整形する

  1. 画像の向きと傾き … スマートフォンで斜めに撮った画像を、紙の四隅で補正します
  2. 解像度 … 公式の説明では、スキャンは最低200dpi、300dpi以上で一般に最良の結果とされています。1枚に63欄あるので、欄が小さくならないよう紙全体を大きく撮ります
  3. ファイルの形式と大きさ … JPEG で保存し、オンラインの処理の要求の上限の40MBと、画像の40メガピクセルの上限に収めます
  4. ハウスの確認 … 上の欄のハウスの番号を、ハウスの一覧と照らします
  5. その日の列の決定 … 撮影の日時と週の始まりの日付から、取り込むべき曜日の列を決めます
  6. 重複の検知 … 同じハウス・同じ日で二度撮ったものは、新しいほうだけを使います

5番目を前処理に置くのが、この構成の要点です。 生成AIに「その日の列を写して」と頼む前に、どの曜日の列が対象かをプログラムが決めて渡します。 撮影が日付をまたいだ夜や、前日の書き忘れを翌日に書き足した場合は、撮影の日時だけで決めず、前日の列が空いているかも見て、2列を取り込む候補にします。

Step5

AIに処理させる

生成AIにさせるのは2つだけです。 表の行を項目に、列を曜日に対応づけることと、指定された曜日の列の値を文字のまま写すことです。

見るものさせること判断できないときの扱い
本体の行の1列目最高気温・最低気温・湿度・灌水の回数・灌水の量・換気・暖房・天候・メモのどれかを決める決められない行は unknown
見出しの行各列が月〜日のどれかを決める決められない列は unknown
指定された曜日の列各項目の値をセルの文字のまま写す読めない文字は空にし、unreadable
換気・暖房・天候書かれた文字や記号(○、×、晴、曇)をそのまま写す書かれたとおり

行と列の対応づけを生成AIにさせるのは、作業者が列を書き間違えるからです。 水曜の値を木曜の列に書いた、項目の名前の欄に略字を書き込んだ、といった紙の上のずれを、見出しの文字から決め直します。

させないこと理由
曜日から日付を計算する週の始まりの日付からプログラムが決める
空いている欄を前日の値で埋める記入漏れが消える
目安を外れたかの判断品目と段階で目安が違う。決まりで照らす
温度計の戻し忘れの判断前日の値との比較で決まりとして行う
管理の直し方の提案ハウスを見た責任者が決める

2行目がいちばん起きやすい失敗です。 最低気温の欄だけが空いていると、生成AIは前日の値や最高気温から見て「ありそうな値」を入れます。入れた瞬間に記入漏れが消え、その値が目安の照合にまで使われます。

Step6

指示内容を固定する

あなたは施設園芸の農業法人の事務の担当で、ハウスの環境の記録表の読み取り結果から、
指定された曜日の列の値を写す係です。
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 が台帳の値と見比べるだけにします。

Step7

出力形式を固定する

次の形の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行目の戻し忘れの照合は、目安の照合より先に行います。 戻し忘れの日の値で目安を見ると、実際には起きていない「暑すぎた日」や「冷えすぎた日」が一覧に載ります。 戻し忘れの候補になった日は、目安の照合から外して確認待ちに入れます。

Step8

システムへ連携する

つなぎ先方式内容
共有フォルダApps Script の時間主導のトリガー新しい画像を15分ごとに探す
Google Document AIAPI呼び出し表・上の欄・信頼度を返す
Claude APIAPI呼び出し行と列の対応づけ、その日の列の書き写し
ハウスの一覧・生育の段階の表・管理の目安スプレッドシートの読み取り照らす目安と道具の種類
環境の台帳スプレッドシートへの書き込み照合を通った日の値
確認待ち・目安を外れた日の一覧スプレッドシートの別のシート印の付いた欄と画像へのリンク

台帳へ自動で書き込むのは、照合で印が1つも付かなかった日だけです。 印の付いた日は、確認待ちの一覧で人が直してから書き込みます。管理の目安の一覧と生育の段階の表には書き込みません。 目安を変えるのは栽培の責任者で、表を直すのも人です。

目安を外れた日の一覧は、毎朝の始業の前に作ります。 責任者が朝の見回りの前に開けるよう、外れた項目と値と前後2日の値を並べ、画像へのリンクを付けます。

Step9

人が確認する

人が見るのは、確認待ちの一覧に入った日の、印の付いた欄だけです。

  1. 日付が決まらない記録表を先に見る … 週の始まりの日付を画像で読み、書き足します
  2. 戻し忘れの候補を作業者に聞く … 針を戻したかを聞き、戻し忘れなら「その日の値は無効」と記録します。前日と同じ値を、本当の値として残しません
  3. 記入漏れと数字の疑いを直す … 画像と並べて直し、書かれていなければ作業者に聞きます
  4. 目安を外れた日を責任者が見る … 毎朝の一覧で、ハウスに行って管理を直すかを決めます

2番目で「無効」と記録するのが、(c)への答えです。 温度計の値は翌日には読み直せないので、分からなかったことを分からなかったとして残すほうが、台帳の値として正しくなります。

目標は、360件をならして1件1.5分です。 印の無い日は人が開かず、印の付いた日は画像を開いて直すので数分かかります。責任者が一覧を見る時間も、この中に含めています。

Step10

例外に対処する

起きること対応
ハウスの結露で紙が湿って読めないunreadable。作業者に聞く
週の始まりの日付が書かれていない記録表ごと確認待ち。撮影の日時から人が決める
違う曜日の列に書いた列の対応づけで拾えなければ、「書き直しの候補」で人へ
前日の書き忘れを翌日に書き足した前日の列も取り込む候補にし、書き足しとして記録する
片付けや定植で記録しない日生育の段階の表で「休作」の日は記入漏れの照合から外す
新しい週の記録表に替え忘れた8列目が無い。翌週の月曜の撮影で「列が足りない」として印
Document AI が応答しないフォルダに残し、次の起動で再び処理する

5行目を先に作っておくと、確認待ちが減ります。 片付けのハウスの記録表は全欄が空いていて、それがすべて記入漏れとして並ぶと、本当の書き忘れが埋もれます。

Step11

記録を残す

  • 記録表の画像と、撮影の日時・撮った人
  • OCR が返した Document の全文(text、formFields、tables、信頼度)
  • 生成AIの出力(行と列の対応づけ、写した値)
  • 照合の結果と、そのとき使った管理の目安の一覧と生育の段階の版
  • 人が直した記録と、「無効」とした日の記録
  • 毎朝の目安を外れた日の一覧と、責任者が見た印

管理の目安の版を残すのは、目安を毎作見直すからです。 次の作付けの前に、前の作の外れた日と出来を見比べて目安を直します。当時の目安が残っていないと、外れたのが管理の問題か目安の問題かを比べられません。

「無効」とした日の記録は、温度計の扱いを見直す材料になります。 同じ棟や同じ曜日に戻し忘れが続くなら、夕方の見回りの順番か、温度計の置き場所に理由があります。作業者を責める材料にせず、手順を直すために使います。

04実装レベルの3段階

最小構成:記録表の画像を手でAIの画面に貼り、日付ごとの表にさせる / 1枚ごとの読み取りと組み替え
半自動化:上記+Apps Script から Form Parser を呼び、その日の列を一覧に書き出す / 読み取りと一覧化
本格構成:上記+日付への組み替え、目安・戻し忘れ・記入漏れの照合、台帳への自動の書き込み、毎朝の一覧まで作る / 読み取りから台帳と一覧まで

半自動化で、1件4分が2.5分程度になります。 読み取りは自動になりますが、日付への組み替えと目安との見比べは人が続けます。 本格構成で1.5分になり、この段階が本記事の想定です。 差が大きいのは、月末にまとめて目安を外れた日を探す時間が、毎朝の一覧を見る時間に置き換わるからです。 段階を飛ばさないでください。 半自動化の1か月で、管理の目安の一覧を責任者と詰められます。目安が決まらないうちに本格構成に進むと、毎朝の一覧が長すぎて誰も見なくなります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
2 名
月間件数
360 件
1件あたり現在時間
4 分
1件あたり導入後時間
1.5 分
現在  360件 × 4分 ÷ 60 = 24 時間/月
導入後 360件 × 1.5分 ÷ 60 = 9 時間/月
月間削減時間
15h
削減率
63%
年間削減時間
180h
年間金額換算(時間単価2,200円)
40万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 十数棟のハウスで年間を通して果菜類や花きを育てる農業法人で、環境の制御の機器がハウスごとにばらばらだったり、最高最低温度計を目で読んだりしていて、作業者が紙の記録表に手書きし、事務の担当が表計算に打ち直している場合。栽培の責任者が記録を見て管理を直すのが月に一度になっている場合。Google Workspace を使っている場合。
向いていない
  1. 環境の測定の機器がすべてのハウスで記録をクラウドへ送っていて、手書きの記録が無い経営。ハウスが数棟で、打ち直しが短時間で終わる場合。作付けが一時期だけで、ハウスが空いている月が多い場合(毎月の件数が立たない)。なお、温度や灌水の設定の変更、病気の診断、農薬の使用の判断は、この構成では代替できません。

07最小構成で試す方法

  1. 先月の記録表から10枚を選ぶ(温度計の棟、日付の書き方がまちまちなもの、空欄の多いものを入れる)
  2. その10枚について、台帳に打ち込まれた値を書き出しておく
  3. 記録表の画像を、手元の生成AIの画面に1枚ずつ貼る
  4. 「この記録表を、日付ごとに1行の表に組み替えてください。列は最高気温・最低気温・湿度・灌水の回数・灌水の量・換気・暖房・天候です。読めない欄は空にしてください。推測で埋めないでください」と指示する
  5. 出てきた表を、打ち込まれた値と1欄ずつ比べる

10枚で70日分になり、行と列の組み替えの誤りはひととおり出ます。 Form Parser と Apps Script を組む前に、曜日の列の表が正しく組み替えられるのかを確かめます。

出てきた内容判断
打ち込まれた値とほぼ同じ表が出たOCR の API と照合の処理に進む
曜日と日付がずれた週の始まりの日付の書き方を決める。構成は有効
空欄を前日の値で埋めた指示と、後段の照合で止められる
2日続けて同じ最高気温が何度もある(c)の実例。 戻し忘れの照合を先に作る

4行目が出たら、その日の打ち込まれた値も見てください。 台帳にも同じ値が2日続いて入っているなら、これまでの月末の振り返りが、戻し忘れの値を含んだまま行われていたということです。 責任者に見せると、管理の目安を数字にする作業の動機になります。

2行目が出た場合も、構成をやめる理由にはなりません。 曜日のずれは、ほとんどが週の始まりの日付の書き方から来ます。日付の欄を印刷しておき、作業者は日だけを書く様式にすれば、ずれの多くは消えます。

08実装時につまずきやすいポイント

問題対策
曜日の列と日付がずれる週の始まりの日付をプログラムが解釈し、決まらなければ人へ
毎夕全列を取り込み、前の日の値を上書きするその日の列だけを写させる
空欄を前日の値で埋める埋めることを禁じ、記入漏れの印を付ける
戻し忘れの値を本当の値として台帳に入れる温度計の棟で前日と比べ、候補を目安の照合から外す
「温度」の下に「最高」「最低」の2段の見出し行や列をまたぐセルは対象外。別の行に分ける
片付けの棟で記入漏れの印が大量に出る生育の段階の表で休作の日を外す
ドライブのファイル作成で起動しようとするその種類のトリガーは無い。 時間主導で探す
国外で処理されることを確かめていない日本のリージョンは無い。 法人の決まりに照らす

上の2行が、この構成でいちばん重い失敗です。 どちらも、別の日の値がその日の値として台帳に入る経路です。

4行目は、この題材に固有の失敗です。 読み取りがどれだけ正確でも、測る道具の扱いの誤りは、紙の上では正しい数字に見えます。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: ハウスの番号、品目と作型、日ごとの気温・湿度・灌水・換気・暖房の記録、記入した作業者の名前です。個人の情報は作業者の名前程度ですが、栽培の管理の記録は法人の技術の中身です。

  1. 処理の場所を確かめる … Form Parser の対応リージョンに日本はありません。us・eu かシンガポールなどから選びます。栽培の記録が国外で処理されることを、法人の決まりや取引先との約束に照らします
  2. 生成AIに渡す範囲を絞る … 生成AIには表と上の欄だけを渡し、管理の目安の一覧は渡しません。照合は Apps Script の側で行います
  3. 判断を代替しない … 温度や灌水の設定、病気の診断、農薬の使用は、栽培の責任者が決めます。構成が出すのは、目安を外れたという事実までです
  4. 作業者の評価に使わない … 戻し忘れや記入漏れの件数は、様式や手順を直す材料です。作業者ごとの件数を、そのまま評価に使わないでください

誤りが起きた場合のリスクは、別の日の値や戻し忘れの値が台帳に入ることと、目安を外れた日を見落とすことの2つです。前者はその日の列だけの取り込みと戻し忘れの照合で、後者は毎朝の一覧で防ぎます。

10まず何から始めるか

1週目:管理の目安を数字にする

栽培の責任者と、品目・生育の段階ごとに、夜温の下限、日中の上限、湿度の上限を決めます。最初は大まかで構いません。 あわせて、ハウスの一覧に測る道具の列を足します。

2週目:10枚で試す

先月の記録表から10枚を選び、最小構成で日付ごとの表にさせて、打ち込まれた値と比べます。曜日と日付がずれていないか、空欄を埋めていないかを最優先で見ます。

3週目:記録表の様式を決める

見出しを1段にし、週の始まりの日付の欄を大きくとった様式を作ります。撮る場所と時刻を決め、温度計の針を戻してから撮る順番を作業者と決めます。

4週目:Apps Script から一覧までをつなぐ

共有フォルダを15分ごとに見て Form Parser を呼び、その日の列を一覧に書き出すところまで作ります。この時点では台帳に書き込まず、読み取りの結果だけを見ます。

2か月目: 日付への組み替え、戻し忘れ・記入漏れ・目安の照合を足し、印の無い日を台帳に書き込む運用にします。3か月目以降: 毎朝の一覧を出し、1件4分が何分になったかを実測します。週末の打ち直しがなくなり、責任者が毎朝目安を外れたハウスを見に行けるようになった時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-15/最終更新:2026-10-23
確認した内容情報源確認日
Form Parser がキーと値のペア、表、チェックボックス、汎用のエンティティを抽出すること。言語の一覧で日本語(ja)が手書きに対応する言語として示されていること(原文の HTML で確認)。対応リージョンが us・eu・asia-southeast1 などで日本のリージョンが無いことGoogle Cloud: Processor list2026-10-15
Form Parser が学習済みで追加の学習ができないこと。行や列をまたぐセルの無い表を抽出すること。値の空いたキーと値のペアは確実には読めないことGoogle Cloud: Form Parser2026-10-15
text が認識されたテキストの唯一の元で、ほかの欄が startIndex・endIndex で指すこと。formFields が fieldName と fieldValue を持つこと。表が headerRows と bodyRows に分かれることGoogle Cloud: Handle the processing response2026-10-15
対応するファイルの形式(JPEG、PNG など)。スキャンは最低200dpi、300dpi以上で一般に最良の結果とされることGoogle Cloud: Supported files2026-10-15
オンラインの処理の要求のファイルの大きさの上限が40MB、画像の解像度の上限が40メガピクセルであることGoogle Cloud: Document AI limits2026-10-15
構造化出力が output_config.format に type: "json_schema" で JSON スキーマを渡して有効になること。オブジェクトに additionalProperties: false が必要なこと。数値の minimum・maximum が非対応であることClaude Docs: Structured outputs2026-10-15
インストール型のトリガーの種類(開いたとき・編集・変更・フォームの送信・カレンダーの予定・時間主導)。時間主導のトリガーが毎分から月1回まで動かせ、時刻が少しずらされることがあること。インストール型のトリガーが作った人のアカウントで動くことApps Script: Installable triggers2026-10-15
1回の実行の時間が6分まで、トリガーの合計の実行時間が Google Workspace で1日6時間までであること(予告なく変わりうるとされていること)Apps Script: Quotas for Google Services2026-10-15

温度や灌水の設定、病気の診断、農薬の使用は、栽培の責任者が判断してください。 本記事は、上記の公開情報で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-1709)についてのご相談はこちらから。

AI活用について相談する
目次