情報システム部が社員から毎月集める貸与端末の自己点検フォームを Apps Script で集め、AI で資産台帳との食い違いと更新の遅れを拾う
社員が毎月答える貸与端末の自己点検フォームの回答を、Apps Script が資産台帳と突き合わせて差分を出し、AI が差分と備考の欄を読んで食い違いの種類を判定します。担当者には、台帳の更新の案と本人への確認の文がそろった一覧が届きます。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- IT・SaaS/人材/製造
- 対象部門
- 情報システム/総務
- 対象業務
- 内容確認・チェック/台帳・マスタ管理
- 主な課題
- 人手が足りない/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 判定
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 毎月1日に、全社員へ自己点検のフォームの案内メールを送る
- 回答の一覧を、資産番号の順に並べ替える
- 1件ずつ、資産台帳の同じ資産番号の行を探し、使用者・シリアル番号・設置の場所・OS の版を見比べる
- 備考の欄を読み、台帳を直すべきか、本人に尋ねるべきかを決める
- 尋ねるべきものは、本人へメールを書く
- 台帳を直すべきものは、台帳の行を書き換え、更新の履歴の列に日付を書く
- 締め切りを過ぎても回答の無い社員に、催促のメールを送る
- 自動毎月1日、時間主導型のトリガーで Apps Script が動き、台帳から社員ごとに資産番号を入れた回答の URL を作って案内を送る
- 【人/社員】 社員が、資産番号の入ったフォームを開き、手元にあるか・シリアル番号・使う場所・OS の版・備考を答える
- 自動フォームの送信のトリガーで、Apps Script が台帳の同じ資産番号の行を引き、項目ごとに値で比べて差分を出す
- 自動差分が無く備考も空の回答は「一致」として台帳の確認日だけを更新する
- 自動差分か備考のある回答について、Claude API に差分と備考を渡し、食い違いの種類・急ぎ度・台帳の更新の案・本人への確認の文を返させる
- 自動結果を確認の一覧のシートに書く
- 人担当者が確認の一覧を見て、台帳の更新の案を承認するか直し、本人への確認を送る
- 自動毎月11日、時間主導型のトリガーで、回答の無い社員と、OS の版が基準より古いままの端末の一覧を作る
各工程の詳しい説明を読む
- 毎月1日に、全社員へ自己点検のフォームの案内メールを送る
- 回答の一覧を、資産番号の順に並べ替える
- 1件ずつ、資産台帳の同じ資産番号の行を探し、使用者・シリアル番号・設置の場所・OS の版を見比べる
- 備考の欄を読み、台帳を直すべきか、本人に尋ねるべきかを決める
- 尋ねるべきものは、本人へメールを書く
- 台帳を直すべきものは、台帳の行を書き換え、更新の履歴の列に日付を書く
- 締め切りを過ぎても回答の無い社員に、催促のメールを送る
(a)見比べに時間がかかる。 3番目は、資産番号で台帳の行を探し、4つの項目を目で見比べる作業です。1件は短くても、900件で毎月60時間になります。
(b)備考の欄の一言を読み落とす。 「上長の指示で〇〇さんと交換した」と書かれた回答は、資産番号もシリアル番号も合っていて、台帳の使用者だけがずれています。 値の見比べが合っていると、備考の欄まで目が届かず、そのまま次の行へ進みます。
(c)台帳の更新が遅れる。 異動や交換の申請が出ないまま端末が人から人へ移り、台帳の使用者は前の人のまま残ります。 監査の前にまとめて直すので、それまでの数か月は台帳と実物が合っていません。
(d)OS の更新の遅れを拾えない。 OS の版の欄は、社員が設定の画面を見て書きます。版の書き方がばらばらで、社内の基準より古いかを目で判断するのに迷います。
- 【自動】 毎月1日、時間主導型のトリガーで Apps Script が動き、台帳から社員ごとに資産番号を入れた回答の URL を作って案内を送る
- 【人/社員】 社員が、資産番号の入ったフォームを開き、手元にあるか・シリアル番号・使う場所・OS の版・備考を答える
- 【自動】 フォームの送信のトリガーで、Apps Script が台帳の同じ資産番号の行を引き、項目ごとに値で比べて差分を出す
- 【自動】 差分が無く備考も空の回答は「一致」として台帳の確認日だけを更新する
- 【自動】 差分か備考のある回答について、Claude API に差分と備考を渡し、食い違いの種類・急ぎ度・台帳の更新の案・本人への確認の文を返させる
- 【自動】 結果を確認の一覧のシートに書く
- 【人】 担当者が確認の一覧を見て、台帳の更新の案を承認するか直し、本人への確認を送る
- 【自動】 毎月11日、時間主導型のトリガーで、回答の無い社員と、OS の版が基準より古いままの端末の一覧を作る
4番目で、9割の回答は人の目を通りません。 値がすべて合い、備考も空なら、確かめることがないからです。 担当者が見るのは、差分のある回答と、備考に何か書かれた回答だけです。
7番目で、台帳を直すのは人です。 AI が出すのは更新の「案」で、台帳の行を書き換えるのは担当者の承認の後です。 台帳は監査の根拠になる記録で、AI の読み違いで使用者が書き換わると、紛失の際に誰の端末だったかが分からなくなります。
02今回想定するシステム構成
【トリガー①】時間主導型(毎月1日)
Google Apps Script
├── 資産台帳 ── 社員ごとの資産番号・種類
├── FormApp ── 資産番号を入れた回答の URL を作る(toPrefilledUrl)
└── GmailApp ── 社員へ案内を送る
社員 ── 自己点検のフォーム(Google フォーム)
▼ 回答がスプレッドシートに書き込まれる
【トリガー②】スプレッドシートのフォーム送信(インストール型)
Google Apps Script
├── 資産台帳 ── 同じ資産番号の行を引く
├── 値で比べる:使用者・シリアル番号・場所・OS の版
├── 差分なし・備考なし → 台帳の確認日を更新して終わり
└── 差分か備考あり →
Claude API(UrlFetchApp、構造化出力)
── 食い違いの種類・急ぎ度・台帳の更新の案・確認の文
確認の一覧のシート ── 結果を書く
【トリガー③】時間主導型(毎月11日)
└── 回答の無い社員・OS の更新の遅れの一覧
▼
【担当者が確かめて台帳を直す】| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Make、Power Automate |
| 生成AI | Claude API(構造化出力) | Gemini API、OpenAI API |
| 受付 | Google フォーム | Microsoft Forms |
| 保管 | Google スプレッドシート(資産台帳、回答、確認の一覧、OS の基準の表) | - |
| メール | Gmail(情報システム部の資産管理用のアカウント) | - |
新しく足すのは、Apps Script と、確認の一覧のシートと、OS の基準の表です。 フォームと資産台帳はいまのものを使い、フォームに資産番号の欄を加えて、案内の URL で入れておくように変えます。
資産番号は、回答の URL にあらかじめ入れます。 公式のページでは、FormResponse の toPrefilledUrl() は、回答が入った状態のフォームの URL を作ります。スクリプトで作った未送信の回答に withItemResponse() で項目の回答を足し、その URL を案内に載せます。社員が資産番号を打ち間違える余地を減らします。
きっかけは3つです。 公式のページでは、インストール型のトリガーには、フォーム送信のトリガーと、時間主導型のトリガーがあり、時間主導型は1分ごとから月に1回まで選べます。月の決まった日に動かすには、時間主導型のトリガーの組み立てで onMonthDay() を使います。 開始の時刻は atHour() で決め、分は前後15分ほどずれます。
Apps Script は、資産管理用のアカウントで作ります。 インストール型のトリガーは、作った人のアカウントで動きます。案内のメールの送り主も、そのアカウントになります。
判定は Claude API の構造化出力で受け取ります。 output_config.format に type: "json_schema" とスキーマを渡すと、その形の JSON が返ります。オブジェクトには additionalProperties: false が要り、数値の minimum・maximum は使えません。
代替候補の Gemini API は、Interactions の書き方になっています。 公式のページでは、既定ですべてのやり取りを保存し(store=true)、有料の段階で55日、無料の段階で1日保持されます。社員の名前と端末の情報が入るので、使う場合は store=false を指定します。
03どうやって実装するのか
処理の起点を決める
トリガーは3本です。 毎月1日の案内(トリガー①)、回答の送信のたびの突き合わせ(トリガー②)、毎月11日の未回答と更新の遅れの一覧(トリガー③)です。
トリガー②は、スプレッドシートの側のフォーム送信のトリガーです。 公式のページでは、そのイベントには質問の名前と値の組(namedValues)と、書き込まれた範囲(range)が入ります。資産番号は namedValues から取り、結果は範囲の行の位置を使って回答の行の横にも印を付けます。
回答のたびに動かすのは、急ぐずれがあるからです。 「手元に無い」「どこに置いたか分からない」という回答は、月の締め切りを待たずに、その日のうちに担当者が本人に連絡すべきものです。 10日にまとめて見ると、紛失の疑いに気づくのが最大で9日遅れます。
トリガー③は、「更新の遅れ」を拾うためのものです。 締め切りの翌日に、回答の無い社員と、台帳の最後の確認日が3か月以上前の端末、OS の版が基準より古いまま先月から変わっていない端末を一覧にします。回答のたびの突き合わせでは、答えなかった人のずれは見えません。 月に一度、答えの無いところを数える段を別に置きます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 自己点検の回答 | 資産番号(あらかじめ入る)、手元にあるか(はい/いいえ/修理に出している/ほかの人が使っている)、シリアル番号、使う場所(社内/在宅/両方)、OS の版、備考 | 自己点検のフォーム |
| 回答者 | フォームが集めたメールアドレス | フォームの回答 |
| 資産台帳の行 | 資産番号、種類、機種、シリアル番号、使用者、所属、設置の場所、最後の確認日 | 資産台帳 |
| 社員の名簿 | 社員のメールアドレス、所属、在籍の状態(在籍・休職・退職の予定) | 社員の名簿 |
| OS の基準の表 | 機種ごとの、社内で認める最も古い OS の版 | OS の基準の表 |
シリアル番号は、社員に本体のラベルから書き写してもらいます。 資産番号のシールは貼り替えられることがありますが、本体のシリアル番号は変わりません。 資産番号とシリアル番号の組が台帳と合わなければ、シールの貼り違いか、端末そのものが入れ替わっています。
OS の版は、選択肢にせず、設定の画面の表示を書き写してもらいます。 選択肢にすると、分からない社員が一番上を選びます。書き写した文字列を、スクリプトが版の番号として読み、基準の表と比べます。 読めない書き方のものだけを、AI に回します。
入れないもの: 端末の中のファイルや閲覧の記録。自己点検は所在と状態を確かめるもので、使い方を調べるものではありません。
データの取得方法を決める
| 取るもの | どこから | どの操作で |
|---|---|---|
| 社員ごとの資産番号 | 資産台帳 | トリガー①でシートを読む |
| 回答の URL | 自己点検のフォーム | createResponse() → withItemResponse() → toPrefilledUrl() |
| 回答 | 回答のシート | トリガー②のイベントの namedValues と range |
| 台帳の行 | 資産台帳 | 資産番号で行を探す |
| 判定の結果 | Claude API | UrlFetchApp で Messages API を呼ぶ |
案内のメールは、1人に1通にまとめます。 3台を持つ社員には、3つの URL を1通に並べて送ります。 公式のページでは、Google Workspace のアカウントで1日に送れるメールの宛先は1,500までです。750名なら1日で送り終えますが、台数ごとに送ると宛先の数が台数分に増え、上限に近づきます。
台帳の行は、資産番号で1行に決まる形にしておきます。 同じ資産番号が2行あると、どちらと比べるかが決まりません。突き合わせの前に、台帳の資産番号の重複をスクリプトで数え、あれば担当者に知らせて止めます。
AIへ渡す前に整形する
- 回答者の確かめ … フォームが集めたメールアドレスが社員の名簿にあるかを見ます
- 資産番号の確かめ … 台帳にその資産番号が無ければ、「台帳に無い」の差分にします
- 値で比べる … 使用者(回答者と台帳の使用者)、シリアル番号、使う場所、OS の版を比べ、項目ごとに
一致/不一致/読めないを付けます - OS の版を番号として読む … 書き写した文字列から版の番号を取り出し、基準の表と比べます。取り出せなければ
読めないにします - 一致で終える … 4項目がすべて
一致、手元に「はい」、備考が空なら、台帳の最後の確認日を更新して終わります - 在籍の状態を添える … 社員の名簿で退職の予定・休職の印があれば、AI に渡す情報に加えます
3番目と4番目を、AI に渡す前にスクリプトで済ませます。 シリアル番号が1文字違うかどうかは、値を比べれば決まり、読む力は要りません。 AI に台帳の行と回答の両方を渡して「違いを探して」と頼むと、ときどき違いを見落とし、ときどき無い違いを作ります。
6番目の在籍の状態は、leaving の区分を正しく選ばせるために渡します。 退職の予定の社員が「手元にある」と答えた端末は、台帳の上ではずれていませんが、返却の段取りが要ります。 名簿の印が無いと、AI はこの回答を「一致」と同じに扱います。
5番目で、AI を呼ぶ回答は1割ほどに減ります。 呼ばない回答は、確認の一覧にも載りません。担当者の一覧が、確かめるべきものだけになります。
AIに処理させる
| させること | 返す項目 | 決め方 |
|---|---|---|
| 食い違いの種類を決める | discrepancy_type | 決めた8つの区分から1つ |
| 急ぎ度を決める | urgency | 区分ごとの決まりに沿って high/normal |
| 台帳の更新の案 | ledger_update | 直すべき項目と、備考に書かれた新しい値(書かれていなければ空) |
| 根拠の文 | evidence | 備考の文をそのまま写す |
| 本人への確認の文 | question | 案を確かめるために本人に尋ねる1〜2文 |
| 読めない OS の版の扱い | os_reading | 書き写された文字列から版を読めたか。読めなければ unreadable |
区分は次の8つです。
| 区分 | 例 | 急ぎ度 |
|---|---|---|
possible_loss 紛失・盗難の疑い | 手元に無く、場所が分からない/置き忘れた | high |
handed_over 他の人へ渡った | 同じ部署の人に貸している/交換した | normal |
repair 修理・預け | 画面が割れて総務に預けた/メーカーの修理 | normal |
swapped_label シールの貼り違い | 資産番号とシリアル番号の組が台帳と違う | normal |
location_change 使う場所の変更 | 在宅になった/別の拠点に移った | normal |
os_outdated OS の更新の遅れ | 基準より古い版/更新ができないと書かれている | normal |
leaving 退職・休職に伴う返却待ち | 退職の予定の社員が持っている | normal |
other その他 | 上のどれにも当たらない | normal |
high にするのは possible_loss だけです。 急ぎ度を AI の読みに広く任せると、「至急」と書いた社員の回答が上に来ます。区分ごとに急ぎ度を固定し、AI には区分を選ばせるだけにします。
| させないこと | 理由 |
|---|---|
| 台帳の書き換え | 案だけを返す。書き換えは担当者が承認してから |
| 紛失・盗難と決めること | 疑いとして返すだけ。届出の判断は情報システム部と総務が行う |
| 新しい使用者の推測 | 備考に名前が無ければ空にする。所属から推し量らない |
| 社員の落ち度の評価 | 「管理が甘い」などを書かない |
| 値の比べ直し | 差分はスクリプトの結果を使う |
指示内容を固定する
あなたは情報システム部で、貸与端末の自己点検の回答を確かめる係です。
スクリプトが比べた差分と、社員が書いた備考だけを使ってください。
差分を比べ直さないでください。
【discrepancy_type】
次の8つから1つ選んでください。迷ったら other にしてください。
possible_loss / handed_over / repair / swapped_label /
location_change / os_outdated / leaving / other
「手元にあるか」が「いいえ」で、場所が分からない、置き忘れた、
と読める場合は possible_loss にしてください。
【ledger_update】
台帳のどの項目を直すべきかと、新しい値を返してください。
- 新しい値は、備考に書かれている場合だけ入れてください。
書かれていなければ空にしてください。推測で埋めないでください。
- 新しい使用者の名前は、備考に書かれた名前をそのまま写してください。
所属や前後の文から推し量らないでください。
【evidence】
判定の根拠にした備考の文を、そのまま写してください。要約しないでください。
【question】
案を確かめるために本人に尋ねる文を、1〜2文で書いてください。
責める言い方をしないでください。possible_loss の場合は、
「最後に使った日と場所を教えてください」を必ず含めてください。
【os_reading】
OS の版の欄の文字列から版の番号を読めたら、その番号を返してください。
読めなければ unreadable にしてください。
【回答】{answer}
【スクリプトの差分】{diff}
【在籍の状態】{employment}
「新しい使用者を推し量らない」は、この構成でいちばん大事な一文です。 「〇〇課の新しい人に渡した」と書かれた回答で、AI が名簿から〇〇課の新しい人を探して名前を入れると、台帳の使用者がもっともらしい誤りで書き換わります。 名前が無ければ空にし、本人に尋ねます。
possible_loss の質問の文を固定するのは、後で要る事実だからです。 紛失の疑いがあれば、情報システム部は端末の利用を止めるかを決め、総務は届出が要るかを考えます。 最後に使った日と場所は、そのどちらにも要ります。
出力形式を固定する
次のスキーマの JSON で受け取ります。 オブジェクトごとに additionalProperties: false にします。
{
"asset_no": "NB-2023-0418",
"discrepancy_type": "handed_over",
"urgency": "normal",
"ledger_update": [
{ "field": "使用者", "current": "(台帳の使用者)", "proposed": "" }
],
"evidence": "9月の配置換えで、同じ課の後任の方に引き継ぎました",
"question": "引き継いだ方のお名前を教えてください。あわせて、引き継いだ日も分かれば教えてください。",
"os_reading": "14.6"
}
1つ目の理由は、ledger_update の proposed が空のまま返ることです。 新しい使用者の名前が備考に無いので、空のまま返り、担当者は本人に尋ねるべきだと一目で分かります。 名前を埋めた形で返させると、確かめずに承認されるおそれがあります。
2つ目は、discrepancy_type で確認の一覧を並べ替えられることです。 possible_loss を一番上に、os_outdated をまとめて下に並べれば、担当者は急ぐものから順に見られます。
3つ目は、os_reading で書き方のばらつきを吸収できることです。 スクリプトで読めなかった文字列だけを AI に読ませ、読めた番号を基準の表と比べ直します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 資産台帳 | スプレッドシートの読み書き | 行を引く。「一致」の回答だけ最後の確認日を更新する |
| 自己点検のフォーム | FormApp | 資産番号を入れた回答の URL を作る |
| 社員の名簿 | スプレッドシートの読み取り | 在籍の状態とメールアドレス |
| Claude API | UrlFetchApp | 差分と備考を渡し、構造化出力で受け取る |
| 確認の一覧 | スプレッドシートの書き込み | 区分・急ぎ度・更新の案・確認の文 |
| Gmail | GmailApp | 毎月の案内、締め切りの後の催促 |
台帳への書き込みは、最後の確認日だけです。 使用者・場所・シリアル番号は、担当者が確認の一覧で承認した後に、担当者の操作で書き換えます。 確認の一覧に「承認」の列を置き、承認された行だけを台帳に反映するボタンを置く作りにもできます。
本人への確認は、担当者が送ります。 question の文を Gmail の下書きにする作りにしても、送るかどうかは担当者が決めます。 紛失の疑いの連絡は、文面よりも先に電話をかけることもあります。
人が確認する
possible_lossを最初に見る … 本人に電話かメールで連絡し、最後に使った日と場所を確かめます。見つからなければ、端末の利用の停止と、総務への届出の要否を決めます- 台帳の更新の案を確かめる …
evidenceを読み、案の項目と新しい値が備考と合っているかを見ます - 空の値は本人に尋ねる …
proposedが空のものは、確認の文を送り、返事を待って台帳を直します - 承認して台帳を直す … 承認した案だけを台帳に反映し、更新の履歴の列に日付を書きます
- 案を退けたら記録する … 退けた理由を確認の一覧に書きます
1番目を、確認の一覧の順番任せにしないでください。 possible_loss が出たら、一覧を開くのを待たずに担当者へ知らせるようにします。スクリプトから担当者あてのメールを1通送るだけで足ります。
目標は、900件をならして1件1分です。 9割の回答は人が開かないので、残る1割に、ならして1件1分の時間を使えます。 1割の回答に1件あたり数分から10分ほどかけられる計算です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 回答者が社員の名簿にいない | 確認の一覧に「回答者の確認」で載せ、担当者が見る |
| 台帳に無い資産番号 | 台帳に無い。シールの貼り違いか、台帳の登録漏れかを担当者が確かめる |
| 同じ資産番号に2人が回答 | 両方を確認の一覧に載せる。片方の回答で台帳を直さない |
| 締め切りまでに回答が無い | トリガー③で一覧にし、催促を送る。2か月続けば上長へ |
| 退職の予定の社員の回答 | leaving。返却の段取りの担当へ回す |
| OS の版が読めない | AI でも読めなければ unreadable。本人に設定の画面の写しを頼む |
| 台帳の資産番号に重複がある | 突き合わせを止め、担当者に知らせる |
| Claude API がエラーを返す | 確認の一覧に「判定なし」で載せ、担当者が手で見る |
| 1回の実行が長くなる | 公式のページでは1回の実行は6分まで。トリガー①の案内は社員を分けて送る |
3行目は、端末の入れ替わりの典型です。 2人が同じ資産番号に答えたなら、どちらかの手元の端末のシールが違っています。 先に答えた側で台帳を直すと、後から答えた側の端末が台帳から消えます。
記録を残す
- 回答の全文と、送信の日時、回答者のメールアドレス
- スクリプトの差分の結果(項目ごとの
一致/不一致/読めない) - AI の結果の JSON の全文と、使った OS の基準の表の版
- 担当者の承認と退けた記録、台帳を直した日と直した人
- 本人への確認の送信と返事の日付
- 毎月の未回答と OS の更新の遅れの一覧
4つ目の「台帳を直した人」は、監査の前に要ります。 台帳の値が、いつ誰の判断で変わったかが分かれば、監査の前にまとめて直す作業が要らなくなります。
最後の行は、月ごとに残します。 同じ社員が何か月も続けて答えていない、同じ機種の OS の更新が毎月遅れている、といった傾向は、1か月分の一覧では見えません。 機種の入れ替えや、更新の手順の案内を見直す材料になります。
04実装レベルの3段階
半自動化で、1件4分が1分になります。 本記事の想定はこの段階です。9割の回答が人の目を通らなくなり、残る1割に時間を使えます。 段階を飛ばさないでください。 半自動化を2〜3か月回すと、どの区分のずれが多いかが数字で分かります。handed_over が多ければ、異動や交換の申請の流れの側に穴があります。 自己点検で拾い続けるより、申請の流れを直すほうが早く効きます。 本格構成は、MDM の対象の広さで決まります。 OS の版と最後の接続の日時を MDM から取れれば、社員に尋ねるのは所在と使用者だけになります。 スマートフォンやルーターが MDM の外なら、その分の自己点検は残ります。
05工数削減シミュレーション
導入後 900件 × 1分 ÷ 60 = 15 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 社員が数百〜千名ほどの会社で、ノートPC・スマートフォン・モバイルルーターなどの貸与端末を情報システム部が資産台帳(スプレッドシート)で管理し、毎月の自己点検で所在と状態を社員に確かめている場合。回答を1件ずつ台帳と見比べ、シリアル番号の違い、使用者の変わった端末、OS の更新の遅れを手で拾っていて、月の前半がその作業で埋まる場合。台帳の更新が異動や交換に追いつかず、監査の前にまとめて直している場合。Google Workspace を使っている場合。
- 端末が数十台で、担当者が目で見て足りている場合。すべての端末がモバイルデバイス管理(MDM)の仕組みに入っていて、所在と OS の版を自動で取れており、社員に尋ねる項目がほとんど無い場合。なお、紛失・盗難の届出の判断、懲戒などの人事上の扱い、端末の利用の停止の判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の自己点検の回答から、ずれのあった回答を30件選ぶ
- スプレッドシートの関数で、回答と台帳のシリアル番号・使用者・場所を並べ、差分の列を作る
- 30件の差分と備考を、手元の生成AIの画面に1件ずつ貼る
- 第7章の8つの区分と「新しい使用者を推し量らない」の指示を添えて、区分と更新の案を返させる
- 当時の担当者の判断と並べる
2番目だけでも、効果が見えます。 関数で差分の列を作ると、9割の回答が「合っている」ことが1列で分かります。 AI を使う前から、見るべき回答が絞れます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の判断とおおむね一致した | Apps Script の構築に進む |
| 備考に無い使用者の名前を入れた | 指示の書き方で直る。構成は有効 |
| 台帳そのものの資産番号が重複していた | 台帳の整理が先。 AI の問題ではない |
試すときは、社員の名前を仮の記号に置き換えてください。 備考には同僚の名前が書かれていることがあります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AI が新しい使用者の名前を推し量って入れる | 指示で禁じ、proposed を空で返させる |
| 差分の比べ直しで無い違いが出る | 比べるのはスクリプト。AI には差分の結果だけを渡す |
| 社員が資産番号を打ち間違える | 回答の URL に資産番号を入れて送る |
| 案内のメールが宛先の上限に近づく | 1人1通にまとめる。上限は1日1,500の宛先 |
| トリガーが担当者の異動で止まる | 資産管理用のアカウントで作る |
| OS の版の書き方がばらばら | スクリプトで番号を読み、読めないものだけ AI に回す |
| 急ぎ度が書き方の強さで決まる | 区分ごとに急ぎ度を固定する |
| 2人の回答で台帳を交互に書き換える | 同じ資産番号の2件目は一覧に載せ、台帳を直さない |
| 構造化出力で 400 が返る | 数値の minimum・maximum を外す。オブジェクトは additionalProperties: false |
| 案内の送信が6分を超える | 社員を分けて、複数回に分けて送る |
上の2行が、この構成の失敗のほとんどです。 どちらも、AI に「値を作らせる」ところから出ています。値はスクリプトが比べ、AI は備考を読むだけ、と役割を分けることで防ぎます。
下から2行目の 400 は、スキーマを書き慣れた人ほど踏みます。 他の仕組みで使っていたスキーマに数値の範囲の制約が入っていると、そのまま渡して止まります。範囲の確かめは、受け取った後にスクリプトで行います。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 社員の名前とメールアドレス、所属、端末の資産番号とシリアル番号、使う場所(在宅かどうか)、そして備考の欄に書かれた同僚の名前や私的な事情です。
- AI に渡す範囲を絞る … 判定に要るのは差分の結果と備考です。台帳の行の全体や社員の名簿は渡しません
- 在宅の場所を集めない … 「使う場所」は社内・在宅・両方の区分だけにし、自宅の住所は聞きません
- 自己点検を監視に使わない … 回答の遅れや紛失の疑いを、人事の評価の材料にする設計にしません。目的は台帳を実物に合わせることです
- 紛失の疑いは人が判断する …
possible_lossは疑いの印です。端末の利用の停止、届出の要否は、情報システム部と総務が決めます - 代替候補の利用の条件を確かめる … Gemini API の Interactions は既定でやり取りを保存するので、使う場合は
store=falseを指定します - 確認の一覧を見られる人を限る … 情報システム部の資産の担当者に限ります
誤りが起きた場合のリスクは、台帳の使用者が誤った名前に書き換わることと、紛失の疑いを見落とすことの2つです。 前者は推し量りを禁じる指示と承認の段で、後者は区分の急ぎ度の固定と担当者への即時の知らせで防ぎます。
10まず何から始めるか
1週目:台帳を整える
資産台帳の資産番号の重複を数えて直し、機種ごとの OS の基準の表を作ります。あわせて、自己点検のフォームに資産番号の欄を足し、シリアル番号を本体のラベルから書き写す案内を加えます。
2週目:30件で試す
先月のずれのあった回答から30件を選び、関数で差分の列を作ってから、生成AIの画面で区分と更新の案を返させます。備考に無い使用者の名前を入れていないかを最優先で見ます。
3週目:案内と突き合わせをつくる
資産管理用のアカウントで Apps Script を作り、資産番号を入れた回答の URL の案内と、回答ごとの差分の書き込みまでを組みます。この時点では AI を呼ばず、一致の回答の確認日の更新だけを動かします。
4週目:AI の判定を並べて見る
Claude API の呼び出しを足し、1週間分のずれのある回答について、担当者が区分と更新の案を読みます。possible_loss を担当者にすぐ知らせる段も、ここで足します。
2か月目: 毎月11日の未回答と OS の更新の遅れの一覧を足し、退けた案を数えます。3か月目以降: 退けた案の多い区分の指示を直します。台帳のずれがその月のうちに直り、監査の前にまとめて直す作業が要らなくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| インストール型のトリガーにフォーム送信と時間主導型があり、時間主導型は1分ごとから月1回まで選べること。作った人のアカウントで動くこと | Apps Script: Installable Triggers | 2026-10-15 |
onMonthDay() で月の日を、atHour() で時刻を指定でき、nearMinute() の分が前後15分ずれうること | Apps Script: ClockTriggerBuilder | 2026-10-15 |
toPrefilledUrl() が回答の入ったフォームの URL を作り、withItemResponse() がスクリプトで作った未送信の回答に項目の回答を足すこと | Apps Script: FormResponse | 2026-10-15 |
スプレッドシートの側のフォーム送信のイベントに namedValues と range が入ること | Apps Script: Event Objects | 2026-10-15 |
| GmailApp でメールの送信と下書きの作成ができること | Apps Script: GmailApp | 2026-10-15 |
| Google Workspace のアカウントでメールの宛先が1日1,500まで、1回の実行が6分まで、URL Fetch が1日10万回までであること | Apps Script: Quotas | 2026-10-15 |
構造化出力で output_config.format に type: "json_schema" を渡すこと。オブジェクトの additionalProperties を false にし、数値の minimum・maximum が使えないこと | Claude: Structured outputs | 2026-10-15 |
Interactions が既定でやり取りを保存し(store=true)、有料の段階で55日、無料の段階で1日保持され、store=false で保存しないようにできること | Gemini API: Interactions | 2026-10-15 |
紛失・盗難の届出の判断と、端末の利用の停止の判断は、情報システム部と総務で行ってください。 本記事は上記の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1661)についてのご相談はこちらから。
