管理物件の共用部を巡回した写真から不具合を拾い、巡回報告書とオーナー向けの報告を作る
管理物件の共用部を巡回して撮った写真から、照明切れ・破損・汚れ・放置物などの不具合の候補を撮影地点ごとに拾います。前回から残っている不具合と照らし、社内の巡回報告書とオーナー向けの報告の下書きを作ります。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- 不動産/自治体
- 対象部門
- 総務
- 対象業務
- 内容確認・チェック/書類作成
- 主な課題
- 属人化している/書類作成に時間がかかる/期限・対応漏れが起きる
- AIで行う処理
- 画像認識
- 主な効果
- 品質標準化/対応スピード向上/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 巡回から戻り、スマートフォンの写真を物件ごとのフォルダに移す
- 写真を1枚ずつ見て、どこを撮ったものかをファイル名に付ける
- 不具合のありそうな写真を選び、何がどうなっているかをメモする
- 前回の巡回報告書を開き、前回の不具合が今回の写真で直っているかを見比べる
- 社内の巡回報告書に、不具合ごとに写真を貼り、種類・場所・対応の要否を書く
- オーナー向けの報告に、不具合と対応の予定をオーナーに分かる言葉で書く
- 修繕が要るものは、協力業者への手配の依頼を別に作る
- 人巡回の現場で、物件ごとの撮影地点の一覧の順に写真を撮る
- 人事務所に戻り、写真を「巡回_物件コード_日付」のフォルダに入れる
- 自動毎日18時の定時の処理が当日のフォルダを拾い、形式と枚数を確かめる
- 自動物件の撮影地点の一覧と、前回までの未解消の不具合を不具合台帳から引く
- 自動Gemini API が写真ごとに撮影地点を推定し、不具合の候補と位置を返す
- 自動撮影地点ごとに `ok` / `defect` / `unclear` / `not_captured` を付ける
- 自動前回の未解消の不具合ごとに、今回の写真で `still_present` / `possibly_resolved` / `not_visible` を付ける
- 自動不具合の種類から、自社の表で緊急度を付ける
- 自動社内の巡回報告書とオーナー向けの報告の下書きを作る
- 人担当者が `defect` と `unclear` と前回の不具合を写真で確かめ、下書きを直す
- 人巡回報告書を確定し、修繕の手配を決める。オーナー向けの報告を管理報告に添える
各工程の詳しい説明を読む
- 巡回から戻り、スマートフォンの写真を物件ごとのフォルダに移す
- 写真を1枚ずつ見て、どこを撮ったものかをファイル名に付ける
- 不具合のありそうな写真を選び、何がどうなっているかをメモする
- 前回の巡回報告書を開き、前回の不具合が今回の写真で直っているかを見比べる
- 社内の巡回報告書に、不具合ごとに写真を貼り、種類・場所・対応の要否を書く
- オーナー向けの報告に、不具合と対応の予定をオーナーに分かる言葉で書く
- 修繕が要るものは、協力業者への手配の依頼を別に作る
(a)何を不具合とするかが担当者ごとに違う。 共用廊下の小さな汚れを報告する担当と、しない担当がいます。オーナーから見ると、担当が替わった月から急に報告が増えたように見えます。
(b)前回の不具合が消える。 4番目は、前回の報告書を開いて写真を探し、今回の写真と並べる作業です。忙しい月は省かれ、直っていない照明切れが、次の報告から消えます。 オーナーから「先月の件はどうなりましたか」と聞かれて気づきます。
(c)撮っていない箇所に気づけない。 報告書には撮った写真の中の不具合しか出てきません。消火器の前に自転車が置かれて写真が撮れなかった月は、報告書の上では「異常なし」と同じに見えます。
(d)同じことを2回書いている。 5番目と6番目は同じ不具合の説明で、言葉遣いが違うだけです。2つを書き終える時間が、巡回そのものの時間に近づいています。
- 【人】 巡回の現場で、物件ごとの撮影地点の一覧の順に写真を撮る
- 【人】 事務所に戻り、写真を「巡回_物件コード_日付」のフォルダに入れる
- 【自動】 毎日18時の定時の処理が当日のフォルダを拾い、形式と枚数を確かめる
- 【自動】 物件の撮影地点の一覧と、前回までの未解消の不具合を不具合台帳から引く
- 【自動】 Gemini API が写真ごとに撮影地点を推定し、不具合の候補と位置を返す
- 【自動】 撮影地点ごとに
ok/defect/unclear/not_capturedを付ける - 【自動】 前回の未解消の不具合ごとに、今回の写真で
still_present/possibly_resolved/not_visibleを付ける - 【自動】 不具合の種類から、自社の表で緊急度を付ける
- 【自動】 社内の巡回報告書とオーナー向けの報告の下書きを作る
- 【人】 担当者が
defectとunclearと前回の不具合を写真で確かめ、下書きを直す - 【人】 巡回報告書を確定し、修繕の手配を決める。オーナー向けの報告を管理報告に添える
10番目が、この設計の分かれ目です。 人が見るのは、不具合の候補と判断のつかなかった写真と前回の不具合だけです。ok と出た地点は、一覧で写真の縮小画像を流し見て終わりにします。
8番目を規則にしているのも意図してのことです。 「非常口の前の放置物」と「植栽の伸び」では急ぐ度合いが違いますが、どれを急ぐかは自社とオーナーとの取り決めです。 AIには種類を返させ、緊急度は表で引きます。
02今回想定するシステム構成
巡回の写真(スマートフォン、撮影地点の一覧の順に撮る) │ 「巡回_物件コード_日付」のフォルダへ ▼【トリガー】毎日18時の定時処理 Google Apps Script ├──▶ 撮影地点の一覧と、未解消の不具合を不具合台帳から引く ▼ Gemini API ── 写真ごとの判定 │ ① 撮影地点の推定 ② 不具合の候補(種類・位置 box_2d・根拠) │ ③ 前回の不具合が残っているか ▼ Google Apps Script ── 未撮影の地点の洗い出し、緊急度の表引き ▼ Gemini API ── 巡回報告書とオーナー向け報告の下書き ▼ 【人が不具合の候補と前回の不具合だけ確認】 ├──▶ 不具合台帳の更新 └──▶ 巡回報告書の確定、オーナー向け報告の送付
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | Gemini API(写真の判定と報告書の下書き) | Claude API、OpenAI API |
| 連携 | Google Apps Script(フォルダの確認、台帳の読み書き、判定の呼び出し) | Power Automate、Make |
| 連携 | Google スプレッドシート(撮影地点の一覧、不具合台帳、緊急度の表) | Microsoft Excel(オンライン) |
| 保管 | Google ドライブ(巡回の写真) | Microsoft OneDrive、SharePoint |
| 文書 | Google ドキュメント(巡回報告書、オーナー向け報告) | Microsoft Word |
土台になるのは、Gemini API の画像の理解です。 公式には、入力できる画像の形式は PNG、JPEG、WEBP、HEIC、HEIF で、スマートフォンで撮った HEIC の写真をそのまま渡せます。 1回の要求で渡せる画像は最大3,600枚とされ、1回の巡回の30〜50枚は1回で送れます。
ただし、画像をリクエストに直接埋め込むと、テキストと画像を合わせた要求全体が20MBまでに制限されます。 高画質の写真を50枚並べると超えるので、Files API で写真を先に上げてから参照する形にします。
不具合の位置は、box_2d で受け取ります。 公式には、物体の位置を [ymin, xmin, ymax, xmax] の形で、0から1000に正規化した座標で返すとされています。この座標で写真を切り抜けば、報告書に貼る「不具合の部分を拡大した写真」が自動で作れます。
画像の料金は大きさで決まります。 公式には、縦横とも384ピクセル以下なら258トークン、それより大きい画像は768×768ピクセルのタイルに分けられ、1タイルごとに258トークンとされています。写真を縮小してから渡すかどうかで費用が変わります(第7章の「前処理」)。
不具合台帳は、この構成で新しく作るものです。 これまで不具合は報告書の文章の中にしかなく、1つずつの状態を持っていませんでした。台帳の1行を1つの不具合とし、見つけた日・地点・種類・状態・写真の切り抜きを持たせます。 前回の不具合を追えるのは、この台帳があるからです。
03どうやって実装するのか
処理の起点を決める
毎日18時に、その日に作られた巡回のフォルダを拾います。 Apps Script のインストール型トリガーには時間主導型があり、公式には最短で1分ごとから月1回まで設定できるとされています。ドライブへのファイル追加をきっかけにするトリガーは、確認した一覧にはありませんでした。
1日1回にまとめるのは、巡回の写真が1日のうちに少しずつ入るためです。 担当者は1日に数棟を回り、戻ってからまとめてフォルダに入れます。入れている途中で動かすと、半分の写真で「未撮影」が大量に出ます。 18時に動かし、翌朝に担当者が下書きを見ます。
フォルダ名の末尾に _done を付けると処理の対象になる決まりにし、処理を終えたら _reported に変えます。_done のまま残っているフォルダの数が、未処理の数です。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 巡回の写真 | 1回の巡回で30〜50枚。撮影日時 | 巡回のフォルダ |
| 撮影地点の一覧 | 物件ごとに、撮るべき地点(エントランス、集合ポスト、各階の廊下、階段、消火器、ゴミ置場、駐輪場、外壁、非常口など)と、各地点の基準の写真 | スプレッドシート |
| 未解消の不具合 | 前回までに見つけて、まだ解消を確かめていない不具合。種類・地点・前回の写真の切り抜き | 不具合台帳 |
| 不具合の種類の一覧 | 照明の不点灯、破損、汚れ・落書き、放置物、漏水の跡、掲示物の期限切れ、植栽の越境など | スプレッドシート |
| 緊急度の表 | 種類と地点の組み合わせごとの緊急度 | スプレッドシート |
質を決めるのは、撮影地点の一覧の基準の写真です。 何も無いときの集合ポストの前がどう見えるかを1枚持っておけば、「いつもと違う」を比べる相手ができます。 基準の写真が無いと、ゴミ置場の分別のボックスを放置物と見ることがあります。
不具合の種類の一覧は、10〜15種類に絞ります。 種類を細かくしすぎると、同じ汚れが担当者ごとに別の種類で台帳に残ります。
データの取得方法を決める
- フォルダ名から物件コードを取り出し、撮影地点の一覧と未解消の不具合を台帳から引く
- 写真をドライブから読み、Files API に上げて参照を得る
- 基準の写真と、未解消の不具合の前回の切り抜きも同じように上げる
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 写真と撮影日時 | 巡回のフォルダ | 判定の対象と、報告書の日付 |
| 撮影地点と基準の写真 | 撮影地点の一覧 | 地点の推定と、いつもとの比較 |
| 未解消の不具合 | 不具合台帳の「状態が未解消」の行 | 残っているかの確認 |
| 緊急度 | 緊急度の表 | 判定の後に表で引く |
未解消の不具合は、台帳の状態で引きます。 報告書のファイルを開いて探すのではなく、台帳の1行が1つの不具合になっているので、前回の報告書を探す作業そのものが無くなります。
AIへ渡す前に整形する
- 形式の確認 … PNG、JPEG、WEBP、HEIC、HEIF のどれかであることを確かめます。それ以外は JPEG に変換します
- 縮小 … 長辺を一定の大きさに縮めます。タイルの数が減り、費用が下がります。 ただし遠くの照明の不点灯が見えなくなるほど縮めないよう、最初は2段階で試します
- 枚数の確認 … 撮影地点の数に対して写真が極端に少なければ、判定の前に担当者へ知らせます
- 撮影日時の確認 … 巡回の日と違う日時の写真が混ざっていれば、別の巡回の写真として外します
- 写り込みの確認 … 集合ポストの名札、放置自転車の防犯登録の番号、人の顔が写っている写真に印を付けます(第13章)
- 撮影順の並べ替え … 撮影日時の順に並べ、撮影地点の一覧の順と照らします。一覧の順に撮る決まりにしておけば、地点の推定が外れたときに前後の写真から見当がつきます
- 基準の写真の添付 … 撮影地点の一覧から、その物件の基準の写真だけを選んで添えます。他の物件の基準の写真は渡しません
2番目の縮小は、試してから決めます。 公式の料金の数え方は、768×768ピクセルのタイルごとに258トークンです。高画質の写真のままでは1枚で多くのタイルになり、180件×40枚で積み上がります。 照明の不点灯や小さなひび割れが見える最小の大きさを、過去の写真で確かめます。
AIに処理させる
させるのは、写真ごとの撮影地点の推定、不具合の候補の記録、前回の不具合の確認、そして報告書の下書きです。
| 見るもの | 返すもの | 判断できないときの扱い |
|---|---|---|
| どの地点の写真か | 撮影地点の一覧のどれか | 基準の写真と似ていなければ unknown_point |
| 不具合の候補 | 種類の一覧のどれか、位置(box_2d)、根拠 | 暗い・ぶれている・遮られていれば unclear |
| 前回の不具合 | still_present / possibly_resolved / not_visible | 同じ画角でなければ not_visible |
| 報告書の下書き | 社内向けとオーナー向けの2種類の文面 | 人が確かめる前の下書きであることを明記 |
possibly_resolved という名前にしてあるのは、直ったと言い切らせないためです。 照明が点いて見えても、その時間だけ点いていた可能性があります。「直った」と台帳を閉じるのは、担当者が写真と修繕の記録を見てからです。
not_captured はAIが出すものではありません。 撮影地点の一覧のうち、どの写真にも当てはまらなかった地点を、Apps Script が一覧と突き合わせて出します。 AIに「写っていない地点」を考えさせると、写っていない地点を推測で埋めます。
| させないこと | 理由 |
|---|---|
| 緊急度の判断 | 自社とオーナーとの取り決め。表で引く |
| 修繕の要否と費用の見込み | 協力業者の見積と、オーナーの判断による |
| 不具合の原因の推測 | 「入居者が壊した」などの推測は、報告書に書けば事実として読まれる |
| 写っていない地点の判定 | 見ていない箇所を「異常なし」にしない |
| 人物・名札・番号の読み取り | 不具合の判定に要らない |
3行目がいちばん気をつける点です。 生成AIは、破損の写真を見ると原因を添えたがります。オーナー向けの報告に「入居者の過失と思われます」と出れば、そのまま入居者とのもめごとの種になります。
指示内容を固定する
あなたは賃貸住宅の管理会社で、共用部の巡回写真を点検する担当です。
写真に写っていることだけを記録してください。推測で補わないでください。
【やること】
1. 各写真が【撮影地点の一覧】のどの地点かを、基準の写真と見比べて決める。
似た地点が無ければ point を unknown_point にする。
2. 各写真について、【不具合の種類の一覧】に当たるものがあれば記録する。
種類は一覧の名前だけを使う。一覧に無いものは other にし、note に書く。
位置を box_2d に [ymin, xmin, ymax, xmax](0〜1000)で入れる。
3. 【未解消の不具合】の1件ずつについて、今回の写真で残っているかを見る。
【status の選び方(写真ごと)】
- ok ....... 撮影地点が分かり、不具合の種類に当たるものが写っていない
- defect ... 不具合の種類に当たるものが写っている
- unclear .. 暗い、ぶれている、物に遮られているなどで判断できない
迷ったときに ok を選ばないでください。
【前回の不具合の選び方】
- still_present ..... 前回と同じ場所に、同じ不具合が写っている
- possibly_resolved . 同じ場所が写っており、不具合が見当たらない
- not_visible ....... その場所が写っていない、または画角が違って比べられない
「直った」「修繕済み」とは書かないでください。
【厳守事項】
- 緊急度、修繕の要否、費用、原因を書かないでください。
- 誰がやったか、入居者の過失かを書かないでください。
- 人の顔、郵便受けの名前、自転車の防犯登録の番号、車のナンバーは読み取らず、
写っている場合は privacy_flag を true にしてください。
- evidence には、何が写っているかを1文で書いてください(例:「3階廊下の天井照明が消えている」)。
- 撮影地点の一覧に無い地点を、写っていないからといって記録しないでください。
【撮影地点の一覧(地点名と基準の写真)】{points}
【未解消の不具合】{open_issues}
【不具合の種類の一覧】{defect_types}
【今回の写真】{photos}
「迷ったときに ok を選ばない」は、この構成でいちばん効く1行です。 暗い写真や半分遮られた写真を、生成AIは「異常は見当たりません」と書きがちです。判断できない写真は unclear として人に回します。
「直った」と書かせないのも同じ理由です。 possibly_resolved を担当者が確かめてから台帳を閉じます。
出力形式を固定する
写真の判定は、次の形のJSONで受け取ります。 公式には、JSON Schema を渡すとそれに従う応答を返すよう設定でき、出力は構文として正しいJSONになるとされています。同時に、値が意味として正しいかはアプリの側で確かめるよう勧められています。
{
"property_code": "",
"patrol_date": "",
"photos": [
{ "file": "", "point": "", "status": "ok | defect | unclear",
"defects": [ { "type": "", "box_2d": [0, 0, 0, 0], "evidence": "", "note": "" } ],
"privacy_flag": false }
],
"open_issues": [
{ "issue_id": "", "result": "still_present | possibly_resolved | not_visible",
"file": "", "evidence": "" }
]
}
1つ目の理由は、type を種類の一覧から選ばせられることです。 公式には、文字列に enum を使えるとされています。不具合の種類を一覧の名前に固定すれば、台帳の集計が担当者ごとに割れません。 box_2d の各値も minimum 0、maximum 1000 で縛れます。
2つ目は、not_captured と緊急度を後から足せることです。 Apps Script が撮影地点の一覧と photos の point を突き合わせて、どの写真にも当たらなかった地点を not_captured として足し、type から緊急度を表で引きます。
| 地点の結果 | 巡回報告書での扱い |
|---|---|
ok | 「異常なし」として縮小画像を並べる |
defect | 不具合として種類・緊急度・切り抜きの写真を載せる |
unclear | 「写真で判断できず」として担当者の確認を待つ |
not_captured | 「未撮影」として明記する。異常なしとは書かない |
3つ目は、box_2d で写真を切り抜けることです。 報告書には全体の写真と不具合の部分の拡大を並べます。座標は0から1000の正規化なので、写真の幅と高さを掛けて元の画素に戻してから切り抜きます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 巡回のフォルダ | Apps Script の定時実行 | _done のフォルダを拾い、写真を読む |
| Gemini API | API呼び出し(Files API で写真を上げる) | 写真の判定と、報告書の下書き |
| 撮影地点の一覧・緊急度の表 | スプレッドシートの読み取り | 判定の材料と、緊急度の表引き |
| 不具合台帳 | スプレッドシートの読み書き | 未解消の不具合を引き、新しい不具合の候補を「確認待ち」で足す |
| Google ドキュメント | Apps Script | 巡回報告書とオーナー向け報告の下書きを作る |
不具合台帳へは「確認待ち」の状態で書きます。 担当者が確かめて初めて「未解消」になります。AIの候補がそのまま未解消の不具合として台帳に残ると、誤検知が次の巡回の確認項目になります。
台帳の行を閉じる(解消にする)操作は、人だけが行います。 possibly_resolved が出ても、Apps Script は状態を変えません。賃貸管理システムへも書き込みません。 修繕の手配は、確定した巡回報告書から人が起こします。
報告書の下書きは、ひな形のドキュメントを複製して作ります。 社内の巡回報告書は「前回からの不具合」「今回の不具合」「未撮影・判断できず」「異常なし」の4つの見出しを持ち、オーナー向けの報告は前の2つだけを載せます。見出しの並びをひな形で固定しておけば、担当者が替わっても報告の形が変わりません。
人が確認する
人が見るのは、defect、unclear、not_captured、前回の不具合の4つです。
- 前回の不具合を先に見る …
still_presentは修繕の手配の状況を確かめ、possibly_resolvedは写真と修繕の記録を見て台帳を閉じるかを決めます defectを写真で確かめる … 切り抜きの写真を見て、不具合の種類が合っているかを確かめます。誤検知は候補を消しますunclearとnot_capturedを扱う … 次の巡回で撮り直すか、臨時で見に行くかを決めます- 下書きを直す … 社内の巡回報告書とオーナー向けの報告を読み、表現を直します
- 判定を覆したら記録する … どの写真の、どの種類を、どう変えたか
not_captured が多い物件は、撮影地点の一覧か撮り方を見直します。 毎月同じ地点が未撮影なら、地点の決め方に無理があります。
オーナー向けの下書きでは、3つを確かめます。 不具合の説明に原因や過失が混じっていないか、写り込みのある写真が使われていないか、「対応予定」の欄に担当者がまだ決めていない予定が書かれていないかです。下書きは対応予定を空欄で出す決まりにし、担当者が埋めます。
目標は、180件をならして1件9分です。 不具合の少ない棟は一覧を流し見て下書きを確かめるだけで数分、不具合の多い棟は写真を1枚ずつ確かめるので長くかかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| フォルダに写真が極端に少ない | 判定せずに担当者へ。入れ忘れか、巡回が途中で終わったか |
| 別の日の写真が混ざる | 撮影日時で外し、別の巡回として扱う |
| 要求全体が20MBを超える | 画像の直接の埋め込みをやめ、Files API で上げてから参照する |
| 夜間の巡回で写真が暗い | unclear として人へ。照明の不点灯は夜間の写真でしか分からないこともある |
| 撮影地点の一覧に無い場所の写真 | unknown_point。一覧に足すかを担当者が決める |
| 人の顔や名札が写っている | privacy_flag を立て、オーナー向けの報告には使わない |
| 前回の不具合の写真と画角が違う | not_visible。次の巡回で同じ画角で撮るよう、報告書に書く |
| Gemini API が応答しない | フォルダを _done のまま残し、翌日の定時で再実行 |
上から4行目までが大半を占めます。 どれもAIの問題ではなく、写真の撮り方と入れ方の問題です。 撮影地点の一覧を印刷して巡回に持っていくほうが、判定を直すより効きます。
記録を残す
- 巡回の写真の元ファイルと、撮影日時・担当者
- Gemini API に渡した撮影地点の一覧と未解消の不具合、返ってきたJSONの全文
- 撮影地点ごとの結果(
ok/defect/unclear/not_captured)と、そのとき使った緊急度の表の版 - 人が判定を覆した記録 … どの写真の、どの種類を、どう変えたか
- 不具合台帳の状態の変化(確認待ち → 未解消 → 解消)と、変えた人・日時
- 物件ごとの
not_capturedとunclearの発生率
5つ目は、オーナーへの説明の根拠になります。 「先月の件はどうなりましたか」と聞かれたとき、いつ見つけ、いつ手配し、いつ解消を確かめたかが台帳の1行で答えられます。
04実装レベルの3段階
最小構成では、撮影地点の一覧との突き合わせができません。 画面に貼るだけでは未撮影の地点が出ないので、確かめるための段階です。 半自動化で、1件30分が18分程度になります。 写真の仕分けと不具合の拾い出しは自動になりますが、前回の報告書との見比べと2種類の報告書の作成が残ります。本格構成で9分になり、この段階が本記事の想定です。 差が大きいのは、前回の不具合の確認と報告書の書き分けが、1件ずつの手作業だからです。
05工数削減シミュレーション
導入後 180件 × 9分 ÷ 60 = 27 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 賃貸マンション・アパートや公営住宅を数十棟から数百棟管理し、共用部の定期巡回を毎月行っている管理会社・管理部門。巡回で撮った写真を担当者が1枚ずつ見て、社内の巡回報告書とオーナーへの報告を別々に書いている場合。前回見つけた不具合が直ったかどうかの追跡が担当者の記憶に頼っている場合。
- 管理棟数が数棟で、巡回の報告が口頭や短いメモで足りる場合。建物設備の法定点検の報告書(消防設備点検など)を作りたい場合(有資格者の点検と様式が要り、この構成の対象外です)。写真を撮らずに巡回している場合。
07最小構成で試す方法
- 先月の巡回から5棟を選び、写真と当時の巡回報告書を用意する(不具合が多かった棟を1つ入れる)
- 5棟のうち1棟について、撮影地点の一覧と基準の写真を作る
- 手元の Gemini の画面に写真をまとめて貼り、「各写真の撮影地点と、照明の不点灯・破損・汚れ・放置物などの不具合を写真ごとに書いてください。判断できない写真は判断できないと書いてください。原因と緊急度は書かないでください」と指示する
- 出てきた結果を、当時の巡回報告書と突き合わせる
- 撮影地点の一覧と比べ、写真の無かった地点がいくつあったかを数える
5番目を必ずやってください。 これまでの報告書からは分からなかった「撮っていない地点」が、ここで初めて数として出ます。試す段階の写真は、入居者の写り込みの無いものを選ぶか、有料の枠で扱ってください(第13章)。
| 出てきた内容 | 判断 |
|---|---|
| 当時の報告書と同じ不具合が出た | フォルダと台帳の連携に進む |
| 報告書に無い不具合が出た | 見落としか誤検知かを写真で確かめる。どちらでも得るものがある |
| 暗い写真を「異常なし」とした | 指示の書き方で直る。構成は有効 |
| 未撮影の地点が多い | 撮り方が先。 撮影地点の一覧を持って巡回する |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 写っていない地点が「異常なし」になる | 撮影地点の一覧と突き合わせ、not_captured を規則で出す |
暗い・遮られた写真が ok になる | 「迷ったら ok を選ばない」を明記し、unclear を人に回す |
| 前回の不具合を「直った」と書く | possibly_resolved にとどめ、台帳を閉じるのは人だけにする |
| 報告書に不具合の原因が書かれる | 原因と過失を書かせない指示を入れ、下書きでも確かめる |
| 不具合の種類が担当者ごとに割れる | 種類の一覧を enum で固定する |
| 要求が20MBを超えてエラーになる | Files API で写真を先に上げる |
| 費用が想定より膨らむ | 768×768のタイル単位で数えられる。縮小の大きさを過去の写真で決める |
| 基準の写真が無くて放置物を誤検知する | 撮影地点ごとに、何も無いときの写真を1枚持つ |
| 名札や顔がオーナー向けの報告に載る | privacy_flag の写真を報告に使わない |
| 前回と画角が違って比べられない | 撮影地点の一覧に基準の画角を持たせ、同じ位置から撮る |
上の3行が、報告書が信用されるかどうかを決めます。 どれも「見ていないことを見たように書く」という同じ失敗です。写真に写っていることだけを記録し、それ以外は人に回すかどうかで、オーナーへの報告の重みが変わります。
下の2つ(基準の写真と画角)は、運用を始めてから効いてきます。 最初の数か月は誤検知が多く出ますが、多くは「いつもの状態」を知らないことから来ています。誤検知の出た地点から順に基準の写真を撮り直すと、担当者が消す候補の数が月ごとに減ります。 判定の指示を直すより先に、基準の写真を見直してください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 共用部の写真、物件の所在地、不具合の内容。写真には、郵便受けの名札、放置自転車の防犯登録の番号、車のナンバー、居合わせた入居者の顔が写ることがあります。
- 無料の枠に入居者の写り込んだ写真を送らない … 公式の規約では、無料のサービスに送った内容は Google の製品の改善に使われ、人が読むこともあるとされ、機密や個人の情報を送らないよう書かれています。 有料のサービスでは、プロンプトや応答を製品の改善に使わないとされています。本番の運用は有料の枠で行ってください
- 写り込みを報告に載せない …
privacy_flagの写真はオーナー向けの報告に使わず、社内でも不具合の切り抜きだけを使います - 原因と過失を書かない … 報告書に「入居者の過失」と書けば、事実として読まれます。原因の判断は、修繕の業者と担当者が現地で行います
- 法定点検の代わりにしない … 消火器や非常口の写真を撮っていても、この構成は消防設備などの法定点検ではありません。 報告書にもそう書き分けます
- 緊急度の高い不具合は下書きを待たない … 非常口の前の放置物や漏水は、巡回の現場で担当者が判断して連絡します。 18時の処理を待つ運用にしないでください
誤りが起きた場合のリスクは、不具合を見落として報告しないことと、写っていない箇所を異常なしと報告することの2つです。 前者は unclear を ok に混ぜると起き、後者は not_captured を出さないと起きます。どちらも区別の置き方で防ぎます。
10まず何から始めるか
1週目:5棟で撮影地点の一覧を作る
棟数の多いオーナーの物件から5棟を選び、撮影地点の一覧と基準の写真を作ります。地点は15〜30に絞ります。 巡回の担当者2名に、一覧を持って1回巡回してもらいます。
2週目:過去の巡回で試す
先月の5棟の写真を手元の Gemini に貼り、不具合を書き出させます。当時の報告書と突き合わせ、写真の無かった地点を数えます。
3週目:種類の一覧と緊急度の表を決める
不具合の種類を10〜15種類に絞り、種類と地点ごとの緊急度を決めます。オーナー向けの報告でどこまで書くかも、ここで決めます。 不具合台帳のスプレッドシートを作ります。
4週目:フォルダから一覧までをつなぐ
Apps Script で _done のフォルダを拾い、Gemini API で判定し、撮影地点ごとの結果と未撮影の地点を一覧に書き出すところまで作ります。この時点では報告書の下書きを作らず、結果の一覧だけを見ます。
2か月目: 不具合台帳と照らして前回の不具合を確かめ、緊急度を表で引きます。対象を30棟に広げます。3か月目以降: 2種類の報告書の下書きを足し、1件30分が何分になったかを実測します。物件ごとの not_captured の発生率が下がり、撮影地点の一覧が180棟にそろった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
画像の形式が PNG、JPEG、WEBP、HEIC、HEIF であること。1回の要求で最大3,600枚の画像を渡せること。画像を直接埋め込むと要求全体が20MBまでになり、大きいファイルは Files API を使うこと。縦横384ピクセル以下は258トークン、それより大きい画像は768×768のタイルごとに258トークンであること。物体の位置を box_2d として [ymin, xmin, ymax, xmax]、0〜1000に正規化した座標で返すこと | Gemini API: Image understanding | 2026-09-29 |
JSON Schema を渡して応答をスキーマに従わせられること。文字列の enum、数値の minimum と maximum が使えること。出力は構文として正しいJSONになるが、値はアプリ側で検証するよう勧められていること | Gemini API: Structured output | 2026-09-29 |
| 無料のサービスに送った内容が製品の改善に使われ、人が読むことがあり、機密や個人の情報を送らないよう書かれていること。有料のサービスではプロンプトと応答を製品の改善に使わないこと | Gemini API: Additional Terms of Service | 2026-09-29 |
| Apps Script のインストール型トリガーに時間主導型があり、最短で1分ごとから月1回まで設定できること。確認した一覧に、ドライブへのファイル追加をきっかけにするトリガーが無いこと | Google Apps Script: Installable Triggers | 2026-09-29 |
修繕の要否と緊急度の最終判断は、担当者とオーナーで行ってください。 本記事は Google の公式ドキュメントで確認できた範囲だけを扱っています。この構成は消防設備点検などの法定点検の代わりにはなりません。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0375)についてのご相談はこちらから。
