ゴルフ場のコース管理の担当がグリーンとフェアウェイの写真を Gemini で見て、芝の病気・乾き・傷みの候補と手当ての記録の下書きを作る
朝の巡回でホールごとに決まった地点から撮ったグリーンとフェアウェイの写真を、前回の同じ地点の写真と並べ、病気の兆候のような変色、乾き、ボールマークやディボットの傷み、雑草の候補を枠付きで拾います。変化を付けて日誌の下書きにし、担当が決めた手当てを写真と結び付けて記録します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- その他/宿泊
- 対象部門
- 生産
- 対象業務
- 内容確認・チェック/記録・議事録作成
- 主な課題
- 属人化している/引き継ぎができていない/書類作成に時間がかかる
- AIで行う処理
- 画像認識
- 主な効果
- 品質標準化/属人化解消/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 担当が開場前にカートでホールを回り、グリーン・カラー・フェアウェイを見る
- 気になる箇所をスマートフォンで撮る
- その場で散水や補修を決め、グリーンキーパーに無線で伝える
- 巡回の後、事務所で写真を見返し、前の日の日誌と見比べる
- ホールごとに状態と手当てを日誌に書く
- 薬剤を散布した日は、散布の記録に薬剤の名前、量、場所を書く
- グリーンキーパーが日誌を読み、次の日の段取りを決める
- 人担当が巡回で、ホールごとの決まった地点(グリーンの4方向、カラー、フェアウェイの着弾の地点)から撮る
- 人スマートフォンのフォームで、ホールと地点を選んで写真を上げる。気付いたことを一言書く
- 自動フォームの送信で、スクリプトが動き、同じ地点の前回の写真を探して組にする
- 自動組を Gemini API に渡し、候補と前回からの変化を受け取る
- 自動スクリプトが候補を日誌の下書きの行に書き、写真に枠を描く
- 人担当が日誌の下書きを見て、候補を残すか外すかを選ぶ。手当てを一覧から選んで書く
- 人グリーンキーパーが、`new` と `progressed` の候補を見て、見立てと手当ての判断を書き足す
- 人薬剤を散布したときは、グリーンキーパーが散布の記録に薬剤の名前、量、場所を書く
各工程の詳しい説明を読む
- 担当が開場前にカートでホールを回り、グリーン・カラー・フェアウェイを見る
- 気になる箇所をスマートフォンで撮る
- その場で散水や補修を決め、グリーンキーパーに無線で伝える
- 巡回の後、事務所で写真を見返し、前の日の日誌と見比べる
- ホールごとに状態と手当てを日誌に書く
- 薬剤を散布した日は、散布の記録に薬剤の名前、量、場所を書く
- グリーンキーパーが日誌を読み、次の日の段取りを決める
(a)写真を見返して日誌を書く時間が無い。 開場の後は刈り込みと補修の作業が続きます。4番と5番の手順は、昼休みや夕方に回され、短く済まされます。
(b)見立てが言葉にならない。 担当は「なんとなく色が悪い」と感じても、それをどう書けばよいかが分かりません。日誌の言葉が人によって違い、後から読んでも同じ場所の同じ状態かが分かりません。
(c)前の日からの変化が引き継がれない。 前の日の写真がどれかが分からないので、見比べるのはグリーンキーパーの記憶だけです。休みの日には、その記憶がコースにありません。
(d)手当てと写真が結び付かない。 散水や目土をした場所と、その前後の写真が別々にあります。手当てが効いたかどうかを、後から確かめる材料がありません。
- 【人】 担当が巡回で、ホールごとの決まった地点(グリーンの4方向、カラー、フェアウェイの着弾の地点)から撮る
- 【人】 スマートフォンのフォームで、ホールと地点を選んで写真を上げる。気付いたことを一言書く
- 【自動】 フォームの送信で、スクリプトが動き、同じ地点の前回の写真を探して組にする
- 【自動】 組を Gemini API に渡し、候補と前回からの変化を受け取る
- 【自動】 スクリプトが候補を日誌の下書きの行に書き、写真に枠を描く
- 【人】 担当が日誌の下書きを見て、候補を残すか外すかを選ぶ。手当てを一覧から選んで書く
- 【人】 グリーンキーパーが、
newとprogressedの候補を見て、見立てと手当ての判断を書き足す - 【人】 薬剤を散布したときは、グリーンキーパーが散布の記録に薬剤の名前、量、場所を書く
6番目と7番目が、この設計の分かれ目です。 AIの候補は、担当とグリーンキーパーがどの写真のどこを見ればよいかを示すものです。候補が病気か乾きかを決めるのは、グリーンキーパーです。
8番目の散布の記録は、この構成の外に置きます。 薬剤の名前と量は、農薬の使用の基準に沿って人が書く記録です。日誌の下書きから散布の記録に自動で写す経路を作りません。
02今回想定するシステム構成
朝の巡回(担当がホールごとに決まった地点から撮る) ▼ スマートフォンのフォーム(ホール・地点を選び、写真を上げる) Google フォーム(回答のファイルはドライブのフォルダへ) ▼【トリガー】フォームの送信 Google Apps Script ├── 同じホール・同じ地点の前回の写真を探し、組にする ▼ Gemini API(画像の理解・構造化出力)── 地点ごとに前回と今回の2枚 │ 変色・乾き・傷み・雑草・掘り返しの候補(今回の写真の枠) │ 前回からの変化(new / progressed / unchanged / improved) │ 写っていない範囲(影、露、逆光) ▼ Google Apps Script ── 日誌の下書きの行と、枠を描いた写真 ▼ 【人】担当が候補を選び手当てを書く → グリーンキーパーが見立てを書き足す ▼ コース管理の日誌(スプレッドシート)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | Gemini API(前回と今回の写真を比べ、候補と変化を返す) | Claude API、OpenAI API |
| 連携 | Google Apps Script(フォームの送信の受け取り、組づくり、呼び出し、日誌への書き込み) | Python |
| 入力 | Google フォーム(ホール・地点の選択と写真の上げ下ろし) | - |
| 日誌 | Google スプレッドシート(コース管理の日誌、地点の一覧) | - |
新しく足すのは、フォームとスクリプト、Gemini API の契約、そしてホールごとに撮る地点の決まりです。 日誌の書式と散布の記録は、すでにあるものです。手当ての判断と散布のやり方は変えません。
写真を見る土台は、Gemini API の画像の理解です。 公式の案内では、対応する形式は PNG、JPEG、WEBP、HEIC、HEIF で、1つのリクエストに複数の画像を入れられます。 前回と今回の2枚を組にして渡します。枠は [ymin, xmin, ymax, xmax] の順で0〜1000に正規化され、物の輪郭を多角形で返させる例もあります。乾きや変色のように広がりのある候補は、輪郭で返させると範囲を伝えやすくなります。
出力は構造化出力で受けます。 /v1beta/interactions に送り、response_format で mime_type を application/json にし、schema にスキーマを入れます。enum で値を決まった文字列に絞れます。値はアプリ側で検証するよう書かれています。
写真の受け口は Google フォームのファイルのアップロードの質問です。 公式のヘルプでは、アップロードされたファイルはフォームの持ち主の Google ドライブの新しいフォルダに保存され、回答者は Google アカウントにログインしている必要があります。 ファイルの形式、最大の数、1ファイルあたりの最大の大きさを決められます。フォームを共有ドライブに置いていると、この質問は使えません。
03どうやって実装するのか
処理の起点を決める
フォームの送信で動きます。 Google Apps Script のインストール型のトリガーには、フォームの送信で動く種類があります。担当がホールと地点を選んで写真を上げた時点で、その地点の分だけを処理します。 巡回の全部が終わるのを待たないので、グリーンキーパーは巡回の途中から、先に回ったホールの候補を見られます。
インストール型のトリガーは、作った人のアカウントで動きます。 担当それぞれのアカウントで作るのではなく、コース管理の部門の共用のアカウントで1つだけ作ります。 作った人が異動すると止まるので、作り直しの手順を日誌のシートに書いておきます。
台風や大雨の後の臨時の巡回も、同じフォームで上げます。 フォームに「臨時」の選択肢を置き、臨時の写真は前回の定時の写真と組にします。 臨時の写真どうしを比べると、雨の前の状態が分かりません。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 今回の写真 | ホール・地点ごとの写真。撮った日時 | フォームの回答(ドライブのフォルダ) |
| 前回の写真 | 同じホール・同じ地点の、前回の巡回の写真 | ドライブのフォルダ |
| 地点の一覧 | ホール、地点の番号、何を撮る地点か(グリーンの奥から、カラーの手前、フェアウェイの着弾の地点 など)、芝の種類 | 地点の一覧のシート |
| 担当の一言 | 「手前が乾き気味」など、巡回で気付いたこと | フォームの回答 |
| 撮った条件 | 天気、朝露の有無、日の向き | フォームで選ぶ |
| 候補の種類の一覧 | 病気の兆候のような変色、乾き、ボールマーク、ディボット跡、擦り切れ、機械の跡、雑草、掘り返し | スクリプトに持たせる |
質を決めるのは、毎回同じ地点から同じ向きで撮ることです。 グリーンの奥から手前を見た写真と、手前から奥を見た写真では、同じ変色でも広さが違って見え、変化が比べられません。 地点ごとに、スプリンクラーの頭やヤーデージの杭など、写真に入れる目印を決めます。
撮った条件は、乾きと露の見分けに使います。 朝露が残っている芝は色が濃く見え、露の無い場所は乾いて見えます。露の有無を指示に入れておくと、露の跡を「乾き」と言いにくくなります。
芝の種類も渡します。 グリーンのベントグラスとフェアウェイのコウライシバでは、季節ごとの色の変わり方が違います。冬の休眠で色が抜けたコウライシバを「変色」と言わせないためです。
データの取得方法を決める
フォームの回答から、ホール・地点・写真のファイルを取ります。 スクリプトは回答の行からファイルの場所を読み、ドライブから写真を取ります。前回の写真は、同じホールと地点の、今回より前で最も新しい回答から探します。
Gemini API へは、地点ごとに1回、前回と今回の2枚を組にして渡します。 1日の巡回で地点の数だけ呼びます。地点ごとに分けると、撮り直しのときにその地点だけを比べ直せます。
手当ての記録は、スクリプトがAIの結果とは別の欄に用意します。 日誌の行には、候補の欄、担当が選ぶ手当ての欄(散水、目土、補修、カップの移動、立入の制限、様子を見る)、グリーンキーパーの見立ての欄があります。手当ての欄をAIに埋めさせない作りにします。
有料の利用枠で使い、store を false にします。 Gemini API の規約では、有料のサービスではプロンプトと応答が製品の改善に使われないとされています。Interactions API は既定でやり取りを保存し(有料の枠で55日)、保存しないときは store=false を付けると案内されています。
AIへ渡す前に整形する
- 形式と向き … スマートフォンの写真の向きの情報で回転しているだけのものは、画素を回転させます。向きがずれると、返った枠がずれます
- 縮小 … 長い辺を1,600ピクセル程度に縮めます。ボールマークのような小さい傷みは、寄りの写真で撮る決まりにします
- 組の確認 … 前回の写真が無い地点は「前回の写真なし」とし、今回の写真だけで候補を拾わせます
- 撮った条件の付け足し … 前回と今回の天気、朝露の有無、日の向きを指示に入れます
- 地点と芝の種類の付け足し … 何を撮る地点か、芝の種類、今の季節を指示に入れます
- 人の写り込みの確認 … 来場者や作業の人が大きく写っている写真は、担当が撮り直します
4番目を軽く見ないでください。 前回が露の残る朝、今回が露の無い朝なら、グリーンの色は写真の上で大きく変わります。 その差を前提に比べさせないと、グリーン全体が「乾きが進んだ」と返ってきます。
AIに処理させる
させるのは、地点ごとに前回と今回の写真を比べ、今回の写真の候補を枠か輪郭で返し、前回からの変化と、写っていない範囲を返すことだけです。
| 返すもの | 中身 | 判断できないときの扱い |
|---|---|---|
| 候補 | 今回の写真の枠、種類(病気の兆候のような変色、乾き、ボールマーク、ディボット跡、擦り切れ、機械の跡、雑草、掘り返し)、見え方の説明 | 変色か露か影か分からなければ unclear として候補に入れる |
| 見え方 | 色(黄・茶・灰・白など)、形(輪状・斑点・不定形・筋)、おおよその広さ | 広さが分からなければ書かない |
| 前回からの変化 | new / progressed / unchanged / improved | 前回の写真で同じ場所が見えなければ not_comparable |
| 写っていない範囲 | 影、逆光、朝露の照り返し、旗竿やカートで隠れた範囲 | 範囲がはっきりしなければ地点ごと「見えない範囲あり」 |
右端の列の考え方は、迷ったらグリーンキーパーに見せる側に倒すことです。 変色か露か分からないものは候補に入れます。候補が多いのは担当の数秒で済みますが、候補から落ちた病気の始まりは、翌日には広がっているかもしれません。
| させないこと | 理由 |
|---|---|
| 病名の特定 | 見た目が似ていても原因が違う。グリーンキーパーと専門の機関が判断する |
| 薬剤の選定、散布の量や希釈の倍数 | 農薬の使用の基準と、ゴルフ場の使用計画に沿って人が決める |
| 散水の量や刈り込みの高さの指示 | 天気の続き方と土の湿りを見て、グリーンキーパーが決める |
| 手当ての欄の記入 | 担当とグリーンキーパーが実際にしたことだけを記録する |
| 「異常なし」の結論 | 写っていない範囲がある限り言えない |
| 写っている人についての記述 | 日誌に要らない |
1行目と2行目がいちばん起きやすい失敗です。 輪状の変色の写真を渡すと、AIは病名を挙げ、効く薬剤まで書きたがります。日誌の下書きにその言葉が載ると、担当がそれを見て散布の準備を始めてしまいます。 返すのは「輪状の茶色の変色」という写っている事実までにします。
農薬を書かせない理由は、記録の決まりにもあります。 農薬を使用する者が遵守すべき基準を定める省令は、ゴルフ場で農薬を使う者に、毎年度、使用の最初の日までに農薬使用計画書を農林水産大臣と環境大臣に出すことと、ゴルフ場の外に農薬が流出しないよう必要な措置を講じるよう努めることを求めています。農薬を使ったときは、使用した年月日、場所、対象、農薬の種類または名称、単位面積当たりの使用量または希釈倍数を帳簿に記載するよう努めることも定めています。散布の記録は、人が実際に使ったものを書く記録で、AIの下書きから写すものではありません。
指示内容を固定する
あなたはゴルフ場のコース管理の日誌づくりを手伝う係です。
同じホールの同じ地点を撮った2枚の写真があります。
1枚目は前回の巡回、2枚目は今回の巡回で撮ったものです。
【この地点】{ホール}番 {地点の番号}:{グリーンの奥から手前/カラー/フェアウェイの着弾の地点}
【芝の種類】{ベントグラス/コウライシバ ...} 【季節】{夏}
【撮った条件】前回:{天気、朝露の有無、日の向き} 今回:{天気、朝露の有無、日の向き}
【やること】
1. 2枚目の写真で、次の候補を探す。
病気の兆候のような変色、乾き、ボールマーク、ディボット跡、擦り切れ、
機械の跡、雑草、動物の掘り返し。
2. 候補ごとに、2枚目の写真の上の枠を [ymin, xmin, ymax, xmax] の順で、
0〜1000 に正規化して返す。広がりのある候補は輪郭も返す。
色、形(輪状・斑点・不定形・筋)、おおよその広さを書く。
3. 候補ごとに、1枚目と比べて new/progressed/unchanged/improved を付ける。
1枚目で同じ場所が見えなければ not_comparable とする。
4. 影、逆光、朝露の照り返し、旗竿やカートで見えない範囲を返す。
【厳守事項】
- 病名を書かないでください。「病気の兆候のような変色」までにしてください。
- 薬剤、散布の量、散水の量、刈り込みの高さを書かないでください。
- 朝露の有無や日の向きの違いによる色の違いを、変化として扱わないでください。
- 季節による芝の色の変わり方(休眠など)を、変色として扱わないでください。
- 変色か露か影か分からないものは、kind を unclear にして候補に入れてください。
- 見えない範囲について「異常なし」と書かないでください。
- 写っている人については何も書かないでください。
「病名を書かない」を最初に置くのは、表現の問題ではありません。 病名が日誌に載ると、グリーンキーパーが見る前に、担当の頭の中で手当てが決まってしまいます。 判断の入口を、写っている事実の側に固定しておきます。
出力形式を固定する
地点ごとに、次の形の JSON で受け取ります。 kind、shape、change、reason は enum で決まった文字列に絞ります。
{
"hole": 7,
"point_id": "G-N",
"candidates": [
{ "box_2d": [380, 420, 520, 590],
"kind": "disease_like_discoloration | dry_spot | ball_mark | divot | wear | machine_mark | weed | digging | unclear",
"color": "茶", "shape": "ring | spots | irregular | streak",
"size_note": "直径30cmほど",
"change": "new | progressed | unchanged | improved | not_comparable" }
],
"not_visible": [ { "area": "右奥", "reason": "shadow | backlight | dew_glare | obstructed | no_previous_photo" } ]
}
1つ目の理由は、change で日誌の並べ方をそろえられることです。 new と progressed の候補は日誌の先頭に、unchanged は「前回から変化なし」として後ろにまとめます。グリーンキーパーは、先頭の数行を見れば、その朝に見るべき場所が分かります。
2つ目は、kind と shape でホールをまたいだ集計ができることです。 「輪状の変色の progressed が何地点あるか」を毎朝数えれば、グリーンキーパーが手当ての範囲を決める材料になります。 手当てを決めるのはグリーンキーパーです。
3つ目は、手当てを写真と結び付けられることです。 日誌の行には、候補の番号と、担当が選んだ手当てと、翌日以降の同じ候補の change が並びます。「目土をした」の翌週に improved が続いているかを、写真と一緒に見返せます。
日誌の下書きの行は、次の形です。
| ホール・地点 | 候補 | 変化 | 担当の選択 | 手当て | 見立て |
|---|---|---|---|---|---|
| 7番 G-N | 輪状の茶色の変色(直径30cmほど) | progressed | 残す | 様子を見る | (グリーンキーパーが書く) |
| 7番 G-N | ボールマーク3か所 | new | 残す | 補修 | - |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Google フォーム | フォームの送信のトリガー | ホール・地点・写真・担当の一言・撮った条件 |
| Google ドライブ | Google Apps Script のドライブの操作 | 今回と前回の写真を取る。枠を描いた写真を置く |
| Gemini API | URL の取得(/v1beta/interactions、store=false) | 候補、見え方、変化、見えない範囲 |
| コース管理の日誌 | スプレッドシートへの書き込み | 候補の欄だけ。手当てと見立ての欄には書かない |
| 散布の記録 | 書き込まない | グリーンキーパーが人の手で書く |
散布の記録には、スクリプトから何も書きません。 散布の記録は、農薬の帳簿の項目に沿って人が書くものです。AIの候補が散布の記録の行を作る経路があると、散布していない日に「散布」の行が残るおそれがあります。
手当てと見立ての欄も、スクリプトから書きません。 欄の保護で、トリガーを作った共用のアカウントを編集者から外しておきます。
人が確認する
- 担当が候補を選ぶ … 巡回の後、日誌の下書きを見て、候補ごとに「残す」「外す」を選びます。外すときは理由(露、影、カートの跡の見間違い など)を選びます
- 担当が手当てを書く … 実際にした手当てを一覧から選びます。していないことは書きません
- グリーンキーパーが見立てを書く …
newとprogressedの候補と、not_visibleの出た地点を見て、病気か乾きか、どう手当てするかを書きます。必要なら現地で土の湿りを見ます - 散布を決めたら、散布の記録に書く … 薬剤の名前、量、場所を、使用計画と照らして書きます
3番目で現地を見るのは、写真に写らないものがあるからです。 土の湿り、根の張り、においは写真に写りません。写真の候補は現地を見に行く場所を絞るためのもので、現地を見る代わりではありません。
目標は、360件をならして1件4分です。 候補の無い地点は一覧で流し見て、new と progressed の候補に時間を使います。担当が外す候補が1件で半分を超えるなら、撮った条件の入れ方か、撮る地点の目印が崩れています。
例外に対処する
| 起きること | 対応 |
|---|---|
| 前回の写真が無い(初回、地点を足した) | no_previous_photo とし、今回の写真だけで候補を拾う |
| 前回と撮った向きがずれる | not_comparable が多くなる。目印を決め直す |
| 朝露の照り返しで見えない | dew_glare として返る。露が引いてから寄りで撮り直す |
| 霜や雪で芝が見えない | 候補を拾わず、写っていない範囲として返す |
| フォームのファイルが大きすぎる | フォームの最大の大きさで止まる。担当がスマートフォンの設定を見直す |
| フォームを共有ドライブに置いてしまった | ファイルのアップロードの質問が使えない。マイドライブの側に置き直す |
| 散布の直後で薬剤の色が芝に残る | 担当の一言に「散布の翌日」と書き、変色の候補を unclear として見る |
| 同じ地点の写真が二重に上がる | 後の回答を使い、前の回答の結果は日誌に書かない |
JSON の値が enum に無い | その地点の結果を日誌に書かず、担当に回す |
上から3行目までが大半を占めます。 どれもAIの精度の問題ではなく、撮る地点と時刻の問題です。 目印を決め直すほうが、指示の文をいじるより効きます。
記録を残す
- ホール・地点ごとの今回と前回の写真と、Gemini API が返した JSON の全文
- 指示に入れた撮った条件、芝の種類、季節
- 担当が外した候補と、その理由
- 担当が選んだ手当てと、グリーンキーパーの見立て
- 同じ候補の翌日以降の
changeの続き方 - グリーンキーパーの休みの日に、誰が見立ての欄を書いたか
最後の行が、手当てが効いたかを見る材料です。 補修や目土をした場所の change が、翌週に improved へ変わっていくかを写真で追えます。グリーンキーパーの経験を、次の担当が読める形で残すのはこの記録です。
04実装レベルの3段階
最小構成では件数がさばけません。 1日18ホールを手で組にする時間はありません。確かめるための段階です。 半自動化で、1件10分が6分程度になります。 見比べと候補の拾い出しは自動になりますが、日誌への書き写しと、手当てと写真の結び付けが残ります。本格構成で4分になり、この段階が本記事の想定です。 差が大きいのは、候補と手当てが同じ行に並び、書き写しが無くなるからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、露や影で外す候補の多い地点が分かります。そこの撮る時刻と向きを直してから本格構成に進むほうが、担当が外す候補が減ります。
05工数削減シミュレーション
導入後 360件 × 4分 ÷ 60 = 24 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 18ホールから36ホールのゴルフ場で、コース管理の担当が毎朝コースを回り、芝の状態を目で見て手当てを決めている場合。芝の見立てがグリーンキーパー1人の経験に頼っていて、休みの日や交代のときに前の日からの変化が伝わらない場合。巡回の後に写真を見返して日誌を書く時間が取れず、日誌が一言だけになっている場合。担当が業務用のスマートフォンを持ち、Google のアカウントで写真を上げられる場合。
- 9ホール以下で、グリーンキーパーが毎日すべてを自分で見ていて記録の引き継ぎが要らない場合。芝の管理を外部の業者にすべて任せていて、ゴルフ場の側で記録を持たない場合。なお、芝の病名の特定、薬剤の選定と散布の量の決定、散水や更新作業の計画、農薬の使用計画書や帳簿に書く内容の判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の巡回の写真から、グリーンを3ホール分選ぶ(うち1ホールは、病気か乾きで手当てをしたと分かっているところ)
- 同じ地点の前回と今回の写真を、手で組にする
- Gemini API の有料の利用枠で、組ごとに2枚を渡す
- 「2枚目の写真の変色・乾き・傷みの候補を枠で示し、1枚目と比べて新しいか、広がったか、同じかを付けてください。病名や薬剤は書かないでください」と指示する
- 出てきた候補と変化を、当時の日誌とグリーンキーパーの記憶と突き合わせる
3ホール分は必ずやってください。 フォームとスクリプトを組む前に、「いまの撮り方で、前回と比べられるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
手当てをした場所が new か progressed として出た | 地点の一覧とフォームの作成に進む |
| 病名や薬剤を書いた | 指示の書き方で直る。構成は有効 |
ほとんどが not_comparable になる | 撮る地点と向きの決め方が先。 AIの問題ではない |
3行目が出ることは珍しくありません。 失敗ではなく、グリーンキーパーの記憶でしか比べられなかった理由が1つ分かったということです。 目印を決めて1週間撮り、もう一度試してください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 病名や薬剤を書く | 指示で禁じる。 日誌の下書きに出さない |
| 朝露の違いを「乾きが進んだ」と言う | 撮った条件を指示に入れ、露の違いを変化として扱わせない |
| 冬の休眠の色を「変色」と言う | 芝の種類と季節を指示に入れる |
| 撮る向きがずれて比べられない | 地点ごとに目印を決める |
| ボールマークが全景の写真で見えない | 小さい傷みは寄りで撮る決まりにする |
| 散布の記録が自動で作られる | 散布の記録には書き込まない。 人が書く |
| トリガーを作った人の異動で止まる | 共用のアカウントで作り、作り直しの手順を残す |
| フォームのアップロードの質問が使えない | 共有ドライブに置いていないかを見る |
| 「異常なし」と書く | 見えない範囲がある限り書かせない |
上の2行が、この構成の失敗のほとんどです。 どちらも、写真に写っていないことを候補として書く失敗です。写っている事実と変化だけを返させ、見立ての欄を空けておくかどうかで、グリーンキーパーの判断が守られるかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: コースの写真、ホールと地点の一覧、手当ての記録です。写真には、早朝にプレーする来場者、作業の人、カートの番号が写り込むことがあります。個人の情報は多くありませんが、来場者が写った写真を外に出さないことは決めておきます。
- 人を書かせず、写り込みの多い写真は撮り直す … 指示の文で人を書かせません。来場者が大きく写った写真は日誌に残しません
- 有料の利用枠で、保存させない … 規約では、有料のサービスではプロンプトと応答が製品の改善に使われないとされています。Interactions API の
storeをfalseにします - 農薬の判断を AI に寄せない … 農薬の使用計画書と帳簿は、ゴルフ場で農薬を使う者が人の判断で作るものです。AIの候補を、散布の判断や記録の根拠にしないでください
- フォームに入れる人を限る … ファイルのアップロードの質問は、Google アカウントへのログインが必要です。コース管理の部門のアカウントだけが回答できるようにします
- 見立ての責任の所在を変えない … 芝の見立てと手当ての判断は、これまでどおりグリーンキーパーが行います
誤りが起きた場合のリスクは、病気の始まりを見落として翌日に広げることと、写真から推した病名で不要な散布をすることの2つです。 前者は not_visible を「異常なし」と読み替えると起き、後者は病名や薬剤を書かせると起きます。どちらも、写っている事実と変化だけを返させる設計で防げます。
10まず何から始めるか
1週目:撮る地点と目印を決める
18ホールそれぞれに、グリーンの4方向、カラー、フェアウェイの着弾の地点の撮る位置を決め、スプリンクラーの頭や杭などの目印を地点の一覧に書きます。撮る向きも決めます。
2週目:3ホール分で試す
先月の写真から3ホール分を選び、前回と今回を組にして Gemini API に渡します。手当てをした場所が new や progressed として出るか、病名や薬剤を書いていないかを最優先で見ます。
3週目:フォームと日誌の欄を作る
ホール・地点・撮った条件・写真のフォームと、日誌の候補・手当て・見立ての欄を作ります。手当ての一覧(散水、目土、補修、カップの移動、立入の制限、様子を見る)をグリーンキーパーと決めます。
4週目:フォームから一覧までをつなぐ
フォームの送信で動き、前回と組にして呼び、候補の一覧を書き出すところまで作ります。この時点では日誌の下書きを作らず、一覧だけを担当とグリーンキーパーが見ます。
2か月目: 日誌の下書きの行と、枠を描いた写真を足します。担当が外した候補の理由を毎週数えます。3か月目以降: 手当ての後の変化の追い方を足し、1件10分が何分になったかを実測します。外した理由が撮る地点と指示の文に反映され、グリーンキーパーの休みの日にも同じ材料で手当てが決められるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
対応する画像の形式が PNG、JPEG、WEBP、HEIC、HEIF であること。1つのリクエストに複数の画像を入れられること。枠が [ymin, xmin, ymax, xmax] の順で0〜1000に正規化されること。輪郭を多角形で返させる例があること。画像のトークンの換算(768×768の区画ごとに258トークン) | Gemini API: Image understanding | 2026-10-15 |
構造化出力が /v1beta/interactions に response_format で mime_type を application/json にし、schema にスキーマを入れて送る形であること。enum が使えること。値はアプリ側で検証するよう書かれていること | Gemini API: Structured output | 2026-10-15 |
Interactions API が既定でやり取りを保存し、有料の枠で55日保持すること。store=false で保存しないようにできること | Gemini API: Interactions | 2026-10-15 |
| 有料のサービスではプロンプトと応答が製品の改善に使われないこと。18歳以上であることが利用の条件であること | Gemini API Additional Terms of Service | 2026-10-15 |
| インストール型のトリガーにフォームの送信で動く種類があること。インストール型のトリガーは作った人のアカウントで動くこと | Apps Script: Installable triggers | 2026-10-15 |
| ファイルのアップロードの質問で、ファイルがフォームの持ち主の Google ドライブの新しいフォルダに保存されること。回答者は Google アカウントへのログインが必要なこと。ファイルの形式・最大の数・最大の大きさを決められること。フォームが共有ドライブにある場合などはこの質問を使えないこと | Google ドキュメント エディタ ヘルプ: ファイルのアップロードの質問 | 2026-10-15 |
| ゴルフ場で農薬を使用しようとする者は、毎年度、使用の最初の日までに農薬使用計画書を農林水産大臣と環境大臣に提出し、ゴルフ場の外への流出を防ぐ措置を講じるよう努めること(第5条)。農薬を使用したときは、年月日・場所・対象・農薬の種類または名称・単位面積当たりの使用量または希釈倍数を帳簿に記載するよう努めること(第9条) | e-Gov 法令API: 農薬を使用する者が遵守すべき基準を定める省令 | 2026-10-15 |
農薬の使用と記録、ゴルフ場の排水の管理は、最新の法令と、都道府県・環境省の指導指針、自社の使用計画に沿って行ってください。 本記事は公開の資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1689)についてのご相談はこちらから。
