研究所の共用機器の予約と利用の記録を毎月集計し、機器ごとの稼働率・予約の重なり・保守の時期の見込みを出して、増設と保守の計画の材料にする
研究所の共用機器の予約と利用の記録を毎月集計し、機器ごとの稼働率、予約の重なり、保守の時期の見込みを出します。そのうえで、増設を考えるべき機器、予約のルールを見直すべき機器、保守の手配を急ぐべき機器を、根拠の数字を添えて一覧にします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate/Python
- 対象業界
- 医療/教育/製造
- 対象部門
- 研究開発
- 対象業務
- 台帳・マスタ管理/集計・分析
- 主な課題
- データ分析に時間がかかる/判断に時間がかかる/期限・対応漏れが起きる
- AIで行う処理
- 予測
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 月初に、担当者が機器ごとのカレンダーを開き、前月の予約を数える
- フォームの回答のシートから、機器ごとの利用の時間を合計する
- 予約と利用の記録を見比べ、予約があったのに利用の記録が無い枠を拾う
- 保守の台帳を開き、消耗品の交換の周期と、前回の交換からの稼働時間を足し上げる
- 機器ごとに、稼働率と気になった点をメモにする
- 四半期に1回、3か月分のメモをまとめて設備の委員会の資料にする
- 人研究員は、今までどおりカレンダーで予約し、フォームで利用の記録を入れる
- 自動毎月1日の朝に Google Apps Script が動き、60台のカレンダーの前月の予約と、フォームの回答を読み込む
- 自動機器ごとに、稼働率、予約率、使われなかった予約の割合、時間帯ごとの予約率、予約の重なりを計算する
- 自動過去12か月の推移と、研究グループが登録した今後の利用の予定から、次の3か月の稼働率の見込みを出す
- 自動保守の台帳の周期と、前回の保守からの稼働時間から、次の保守の時期の見込みと、手配を始める期限を出す
- 自動Claude API に機器ごとの数字を渡し、対応の区分と所見を構造化した形で受け取る
- 自動機器ごとの一覧と、手配の期限が近い機器の一覧をシートに書き出し、担当者に知らせる
- 人担当者が所見を確かめ、手配の期限が近い機器の保守を業者に依頼する
- 人四半期に1回、増設とルールの見直しの区分が続いた機器を、設備の委員会の資料にする
各工程の詳しい説明を読む
- 月初に、担当者が機器ごとのカレンダーを開き、前月の予約を数える
- フォームの回答のシートから、機器ごとの利用の時間を合計する
- 予約と利用の記録を見比べ、予約があったのに利用の記録が無い枠を拾う
- 保守の台帳を開き、消耗品の交換の周期と、前回の交換からの稼働時間を足し上げる
- 機器ごとに、稼働率と気になった点をメモにする
- 四半期に1回、3か月分のメモをまとめて設備の委員会の資料にする
(a)集計に毎月20時間かかる。 1番目のカレンダーの予約の数え方が手作業で、60台のカレンダーを1つずつ開いて、月の予定を数えています。 月をまたぐ長時間の測定は、どちらの月に入れるかが人によって違います。
(b)消耗品の交換が使われ方に追いつかない。 4番目の稼働時間の足し上げが後回しになりやすく、ランプの寿命が来てから交換の手配をすることがあります。 部品の取り寄せに数週間かかると、その間その機器は使えません。
(c)増設の要望の根拠が弱い。 研究グループから「予約が取れない」という声が出ても、どの時間帯に、どれだけ取れていないのかの数字がありません。 委員会は声の大きさで判断することになります。
(d)予約されたのに使われない枠が見えない。 3番目で拾った枠はメモに残るだけで、同じ人が毎週同じ枠を押さえて使っていないことが、誰にも伝わりません。
- 【人】 研究員は、今までどおりカレンダーで予約し、フォームで利用の記録を入れる
- 【自動】 毎月1日の朝に Google Apps Script が動き、60台のカレンダーの前月の予約と、フォームの回答を読み込む
- 【自動】 機器ごとに、稼働率、予約率、使われなかった予約の割合、時間帯ごとの予約率、予約の重なりを計算する
- 【自動】 過去12か月の推移と、研究グループが登録した今後の利用の予定から、次の3か月の稼働率の見込みを出す
- 【自動】 保守の台帳の周期と、前回の保守からの稼働時間から、次の保守の時期の見込みと、手配を始める期限を出す
- 【自動】 Claude API に機器ごとの数字を渡し、対応の区分と所見を構造化した形で受け取る
- 【自動】 機器ごとの一覧と、手配の期限が近い機器の一覧をシートに書き出し、担当者に知らせる
- 【人】 担当者が所見を確かめ、手配の期限が近い機器の保守を業者に依頼する
- 【人】 四半期に1回、増設とルールの見直しの区分が続いた機器を、設備の委員会の資料にする
4番目と5番目の見込みは、AIではなくスクリプトが出します。 見込みは委員会で投資の判断の根拠になる数字です。AIが文章の流れで作った数字が資料に載ることがないようにします。
8番目の保守の手配は、毎月の作業として人が行います。 委員会を待つ必要はありません。手配の期限が見えることで、消耗品の交換が寿命の後にずれ込むのを防ぎます。
02今回想定するシステム構成
機器ごとの予約のカレンダー(60台) フォームの回答(利用の記録) 保守の台帳 │ │ スプレッドシート │ スプレッドシート ▼【トリガー】毎月1日 7時台 ▼ ▼ Google Apps Script ◀───────────────────────────────────────────┘ ├──▶ 機器の一覧からカレンダーのIDを引き、前月の予約を取得 ├──▶ 月の境目での切り分け、予約と利用の突き合わせ ├──▶ 稼働率・予約率・使われなかった予約・時間帯ごとの予約率・重なり ├──▶ 次の3か月の稼働率の見込み(推移+登録された利用の予定) ├──▶ 保守の時期の見込みと手配の期限 ▼ Claude API ── 構造化出力 │ ① 対応の区分(増設の検討/ルールの見直し/保守の手配/集約の検討/対応なし) │ ② 根拠にした数字 │ ③ 委員会向けの所見 ▼ Google Apps Script ── 数字の突き合わせ(AIの書いた数字が入力と一致するか) ├──▶ 機器ごとの一覧(スプレッドシート) └──▶ 手配の期限が近い機器の一覧 ▼ 【人】担当者が確認し、保守を手配/四半期ごとに委員会へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Python、Power Automate、Make |
| 生成AI | Claude API | OpenAI API、Gemini API |
| 予約 | Google カレンダー(機器ごとの予約のカレンダー) | Microsoft Outlook の予定表 |
| 台帳 | Google スプレッドシート(機器の一覧・利用の記録・保守の台帳・集計の記録) | Microsoft Lists |
新しく足すのは、スクリプトと Claude API の利用だけです。 予約のしかたも、利用の記録の入れ方も、研究員にとっては今のままです。最初の準備作業は、機器の一覧を作ることです。 機器ID、機器名、予約のカレンダーのID、利用できる時間帯(平日の日中だけか、夜間の連続測定も受けるか)、保守の種類と周期を、1行1台にします。
カレンダーの予約は、Apps Script のカレンダーのサービスで読みます。 CalendarApp.getCalendarById でIDからカレンダーを取り、そのカレンダーの getEvents(startTime, endTime) で期間の中の予定を取ります。この getEvents は、期間の中で始まる予定、期間の中で終わる予定、期間をまたぐ予定をすべて返します。 月をまたぐ測定は両方の月に出てくるので、スクリプトで月の境目で切り分けます。
AIの出力の形は、Claude API の構造化出力で固定します。 output_config.format に json_schema の形でスキーマを渡すと、応答がスキーマに沿った JSON になります。対応の区分を enum で決めた種類に絞ります。
03どうやって実装するのか
処理の起点を決める
毎月1日の朝7時台に、月1回の時間主導型のトリガーで動かします。 時間主導型のトリガーは、毎分から月1回までの間隔で設定でき、時刻は1時間の幅の中で選ばれます。稼働率は月単位で見るもので、毎日動かす必要はありません。
利用の記録の入れ忘れを待つために、1日ではなく3日に動かす運用もあります。 月末に使った分を翌月の初めに入れる研究員がいるからです。どちらにするかは、入れ忘れの多さを2か月見てから決めます。
60台を1回の実行で処理しきれない場合に備えて、続きから動けるようにします。 1回の実行は6分までです。カレンダーを60回、それぞれ1か月分読むので、予定の多い機器が重なると時間がかかります。処理が終わった機器の印をシートに残し、6分に近づいたら止めて、次の実行で続きから動かします。
トリガーは研究企画室の共有の管理用アカウントで作ります。 インストール型のトリガーは作った人のアカウントで動きます。そのアカウントに、60台の予約のカレンダーを見る権限を与えておきます。 権限の無いカレンダーは取得できません。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 予約 | 機器ごとの予定の開始・終了、予約した人、予定の題名 | 機器ごとのカレンダー |
| 利用の記録 | 機器ID、利用者、開始・終了の時刻、測定の件数、不具合のメモ | フォームの回答のシート |
| 機器の一覧 | 機器ID、カレンダーのID、利用できる時間帯、設置の場所 | 機器の一覧のシート |
| 保守の台帳 | 機器ID、保守の種類、周期(月数か稼働時間)、前回の実施日、業者の手配にかかる日数 | 保守の台帳 |
| 利用の予定 | 研究グループ、機器ID、今後3か月の月ごとの利用の見込みの時間 | 利用の予定のシート |
| 過去の集計 | 機器ごとの過去12か月の稼働率、予約率、使われなかった予約の割合 | 集計の記録のシート |
質を決めるのは、利用の記録です。 予約はカレンダーに確実に残りますが、利用の記録は研究員の入力しだいです。 入れ忘れが多い機器は、使われなかった予約の割合が高く出ます。
利用の予定は、見込みの精度を上げるために持ちます。 過去の推移だけでは、新しい研究のテーマが始まって利用が急に増えることを読めません。研究グループのリーダーに、四半期ごとに主な機器の利用の見込みを入れてもらいます。 入っていない機器は、推移だけで見込みを出します。
機器の一覧の「利用できる時間帯」が、稼働率の分母を決めます。 夜間の連続測定を受ける機器を日中だけの時間帯で数えると、稼働率が100%を超えます。逆に、日中しか使えない機器を24時間で数えると、いつも空いているように見えます。機器ごとに、実際に予約を受けている時間帯を書きます。
データの取得方法を決める
カレンダーは機器の一覧の順に1台ずつ読み、計算はスクリプトの中でまとめて行います。 フォームの回答と台帳は、範囲を1回でまとめて読みます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 前月の予約の時間 | 各カレンダーの getEvents | 予約率、時間帯ごとの予約率、重なり |
| 前月の利用の時間 | フォームの回答 | 稼働率、保守までの稼働時間 |
| 予約と利用の突き合わせ | 予約と利用の記録 | 使われなかった予約の割合 |
| 前回の保守からの累計の稼働時間 | 台帳の前回の実施日以降の利用の記録 | 保守の時期の見込み |
| 過去12か月の稼働率 | 集計の記録 | 見込みの推移 |
計算の式は、次のように決めます。
利用できる時間 = 機器ごとに決めた時間帯 × その月の稼働日
稼働率 = 利用の記録の時間の合計 ÷ 利用できる時間
予約率 = 予約の時間の合計 ÷ 利用できる時間
使われなかった予約の割合 = 利用の記録と重ならなかった予約の時間 ÷ 予約の時間の合計
ピークの予約率 = 10時〜16時の予約の時間 ÷ 10時〜16時の利用できる時間
次の3か月の見込み = 直近6か月の稼働率の傾き × 経過月数 + 登録された利用の予定の増分
保守の時期の見込み = 前回の保守の日 +(周期の時間 − 累計の稼働時間)÷ 直近3か月の1日あたりの稼働時間
手配を始める期限 = 保守の時期の見込み − 業者の手配にかかる日数
予定の時刻は、スクリプトのタイムゾーンで解釈されます。 カレンダーのタイムゾーンと違うことがあるので、スクリプトのタイムゾーンを研究所の所在地に合わせておきます。 ずれていると、時間帯ごとの予約率が丸ごと何時間かずれます。
AIへ渡す前に整形する
- 月の境目での切り分け …
getEventsが返した予定のうち、月をまたぐものは前月の範囲の部分だけを数えます - 利用できる時間帯での切り分け … 日中だけ受ける機器で夜にかかった予約は、日中の部分だけを予約率に入れ、夜の部分は別に数えます
- 予約の重なりの検出 … 同じ機器で時間が重なる予定を拾います。カレンダーが重複した予約を受け付けてしまった件数です
- 予約と利用の突き合わせ … 予約の時間帯と利用の記録の時間帯が重なるかで、使われた予約と使われなかった予約に分けます
- 利用の記録の点検 … 終了が開始より前、24時間を超える、予約のない時間の利用を拾い、一覧の末尾に出します
- 見込みの計算 … 「データの取得方法」の式で、次の3か月の稼働率と保守の時期、手配の期限を出します
- AIに渡す材料の組み立て … 機器ごとに、当月の数字、過去12か月の推移、見込み、保守の時期を1つのまとまりにします
4番目で、使われなかった予約を「無断の取り消し」と決めつけないでください。 利用の記録の入れ忘れも、同じ形で出てきます。5番目で記録の点検を出し、入れ忘れが多い機器は、使われなかった予約の割合を参考の値として扱います。
7番目で、予約した人の名前は渡しません。 機器ごとの合計の数字だけを渡します。
AIに処理させる
させるのは、機器ごとに並んだ数字を読み、どの対応に当たるかを判定して、委員会で読める所見を書くことです。 計算と見込みは前処理で終わっています。
| 対応の区分 | 判定の材料 | 所見の中心 |
|---|---|---|
add_capacity | ピークの予約率が高く、使われなかった予約の割合が低く、見込みが上がっている | 増設か、利用できる時間帯の拡大の検討 |
rule_change | 予約率は高いが、使われなかった予約の割合が高い | 予約のルールの見直し(直前の取り消しの扱い、枠の上限) |
maintenance_due | 手配を始める期限が来月までに来る | 保守の手配 |
consolidate | 稼働率が低い状態が続き、見込みも上がらない | 集約や他部署との共用の検討 |
data_quality | 利用の記録の点検で問題が多い | 記録の入れ方の確認 |
no_action | どれにも当たらない | 所見なし |
1台に付ける区分は、最大2つまでにします。 保守の手配と増設の検討が同時に当たる機器はあります。maintenance_due は他の区分と並べて付け、見落とされないようにします。 data_quality が付いた機器は、他の区分を付けさせません。記録が信用できないのに、増設やルールの見直しを言えないからです。
| させないこと | 理由 |
|---|---|
| 稼働率や見込みの計算 | 前処理の数字をそのまま使う。AIの数字を資料に載せない |
| 増設するかどうかの結論 | 投資の判断は設備の委員会が行う |
| 特定の研究員や研究グループの名指し | 予約の使い方の問題は、ルールで扱う |
| 機器の故障の推測 | 不具合のメモに無い故障を書かない |
| 保守の業者や費用の提示 | 手配は担当者が業者と相談して決める |
3行目が、いちばん起きやすい失敗です。 使われなかった予約の割合が高い機器について、何も言わなければ「特定の利用者による予約の確保が考えられます」と書きます。名前を渡していなくても、推測で人の問題として書きます。 所見はルールの見直しとして書かせます。
指示内容を固定する
あなたは研究所の研究企画室で、共用機器の利用の状況を設備の委員会に報告する立場です。
与えられた数字だけを使って判定してください。推測で埋めないでください。
【あなたの仕事】
機器ごとに、対応の区分を最大2つ選び、根拠にした数字を挙げ、
委員会で読める所見を書いてください。
【区分の選び方】
- add_capacity .... peak_booking_rate が 0.85 以上、unused_rate が 0.15 未満、
forecast_3m が今月の utilization より高い
- rule_change ..... booking_rate が 0.80 以上で、unused_rate が 0.25 以上
- maintenance_due . order_deadline が来月末までにある
- consolidate ..... 過去6か月の utilization がすべて 0.30 未満で、forecast_3m も 0.30 未満
- data_quality .... record_issues が 5 件以上
- no_action ....... どれにも当たらない
data_quality を選んだときは、他の区分を選ばないでください。
maintenance_due は他の区分と並べて選んでかまいません。
【厳守事項】
- 数字は入力の値をそのまま書いてください。計算し直さないでください。
- evidence には、根拠にした項目名と値を書いてください。
- 増設すべき、廃止すべきという結論を書かないでください。「検討の対象」と書いてください。
- 研究員や研究グループを特定する書き方をしないでください。
- 不具合のメモに無い故障や劣化を推測しないでください。
- 業者名や費用を書かないでください。
- 所見は機器ごとに3文以内にしてください。
【機器ごとの入力】{equipment_json}
【対象の月】{month}
区分の条件の数字は、指示の中ではなく機器の一覧のシートに置き、指示を組み立てるときに差し込みます。 委員会で線を変えたときに、指示の文を直さずに済みます。線が変わったことは、集計の記録に残します。
出力形式を固定する
次の形のJSONで受け取ります。
{
"month": "2026-09",
"items": [
{
"equipment_id": "EQ-017",
"categories": ["add_capacity", "maintenance_due"],
"evidence": [ { "field": "peak_booking_rate", "value": "0.91" } ],
"comment": "",
"maintenance_note": ""
}
]
}
1つ目の理由は、categories を enum で絞れることです。 区分が決まった値なら、四半期の委員会の前に「3か月続けて add_capacity が付いた機器」を記録から機械的に拾えます。委員会の資料の候補が、毎月の判定から自動でそろいます。
2つ目は、evidence を入力と突き合わせられることです。 スクリプトが field の値を前処理の値と比べ、違えばその機器の所見を捨てて、数字だけを一覧に載せます。
3つ目は、maintenance_note を別の項目にすることで、保守の一覧を分けて作れることです。 委員会の資料と、担当者が毎月見る保守の手配の一覧は、読む人も読む時期も違います。
スキーマに沿わない応答に備えます。 stop_reason が refusal や max_tokens のときは、出力がスキーマに沿わないことがあります。60台を1回で渡すと出力が長くなり、max_tokens で切れやすくなるので、10台ずつに分けて呼びます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 機器ごとのカレンダー | getCalendarById と getEvents | 前月の予約(書き込まない) |
| フォームの回答・台帳・利用の予定 | 範囲をまとめて読む | 利用の記録、保守の周期、見込みの材料 |
| Claude API | UrlFetchApp.fetch で呼ぶ | 区分と所見を構造化出力で受け取る |
| 機器ごとの一覧・保守の一覧 | 範囲をまとめて書く | 当月の数字、見込み、区分、所見 |
| 集計の記録 | 範囲をまとめて書く | 次の月の推移の材料 |
Claude API は UrlFetchApp.fetch で呼びます。 method を post、contentType を JSON にし、headers に API キーを入れます。muteHttpExceptions を true にして、失敗の応答でも例外で止めずに応答のコードを見ます。 API キーはスクリプトのプロパティに置きます。
カレンダーにも保守の台帳にも書き込みません。 保守を手配した日、交換した日を台帳に入れるのは担当者です。スクリプトが台帳を書き換えると、前回の実施日がずれて、次の見込みが狂います。
人が確認する
担当者が毎月見るのは、maintenance_due と data_quality の機器です。 他の区分は四半期ごとに委員会の資料にまとめるときに見ます。
maintenance_dueを最初に見る … 手配の期限と、累計の稼働時間を確かめ、業者に連絡しますdata_qualityを次に見る … 利用の記録の点検の内容を見て、その機器を使う研究員に入れ方を確かめます- 所見の数字を確かめる …
evidenceの値が、一覧の数字と合っているかを見ます - 四半期ごとに委員会の資料にする …
add_capacity、rule_change、consolidateが続いた機器を拾い、研究グループの声と並べます
1番目を後回しにしないでください。 手配の期限は、業者の手配にかかる日数から逆算した日です。期限を過ぎると、交換が寿命の後にずれ込みます。
区分を直したときは、直した理由を一言残します。 「記録の入れ忘れだった」「研究のテーマが終わった」といった理由がたまると、どの区分の線が実態に合っていないかが見えてきます。 委員会で線を見直す材料になります。
目標は、60台をならして1台5分です。 毎月の確認は保守と記録の点検の数台に時間を使い、残りは一覧の流し見です。四半期の資料の作成の時間も、ならして含めています。
例外に対処する
| 起きること | 対応 |
|---|---|
| カレンダーが取得できない | 権限が無いか、IDが違う。その機器を一覧の末尾に出し、数字を空ける |
| 利用の記録が1件も無い機器 | 稼働率0と決めつけず、data_quality の候補として人へ |
| 月をまたぐ長時間の測定 | 月の境目で切り分けて数える |
| 終日の予定で予約されている | 利用できる時間帯の全部を予約とみなし、記録の点検に出す |
| 保守の周期が台帳に無い | 保守の時期の見込みを出さず、台帳の整備の一覧に出す |
| 過去の推移が6か月に満たない | 見込みを出さず、当月の数字だけを載せる |
| 1回の実行が6分を超えそう | 処理済みの印を残して止め、次の実行で続きから動かす |
| Claude API が応答しない・失敗の応答 | 数字と見込みだけを一覧に載せ、所見の欄を空ける |
| 所見の数字が入力と違う | その機器の所見を捨てる。AIの数字を資料に載せない |
上から2行目までが、最初の数か月の大半を占めます。 どれもAIの問題ではなく、カレンダーの権限と、利用の記録の入れ方の問題です。 記録の入れ忘れが多い機器は、フォームを機器の横に置く場所から見直します。
記録を残す
- 機器ごとの当月の稼働率、予約率、使われなかった予約の割合、ピークの予約率、重なりの件数
- 次の3か月の見込み、保守の時期の見込み、手配の期限
- AIに渡した入力と、返ってきたJSONの全文
- 担当者が区分を直した記録
- 保守を手配した日と、実際に交換した日
- そのときの区分の線と、利用できる時間帯の設定
保守の見込みと実際の交換の日を並べて残すのは、見込みの当たり方を確かめるためです。 見込みより早く寿命が来た機器は、1日あたりの稼働時間の見方か、周期そのものを見直す材料になります。
04実装レベルの3段階
半自動化で、1台20分が5分になります。この段階が本記事の想定です。 集計、突き合わせ、保守の時期の計算、所見のメモが自動になり、担当者の時間は、保守の手配と記録の点検と、四半期の資料のまとめになります。 本格構成は、機器ごとに稼働の記録の出し方が違うことが壁になります。 分析装置の制御のソフトには測定の記録を出せるものが多いですが、形式は機器ごとに違います。稼働率が高く、増設の議論になりやすい機器から順に取り込むのが現実的です。
05工数削減シミュレーション
導入後 60件 × 5分 ÷ 60 = 5 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 分析装置や試験機を数十台、複数の研究グループで共用している研究所。予約を Google カレンダーで受け、利用の記録をフォームやノートで取っているが、機器ごとの稼働率を毎月出す人がいない場合。保守の時期を台帳で管理しているのに、使われ方で前後する消耗品の交換が遅れがちな場合。増設の要望が出るたびに、根拠の数字を一から集めている場合。
- 共用の機器が数台で、管理者が毎日の予約の状況を把握している場合。機器の予約と利用の記録を専用の機器管理のシステムで持ち、稼働率の集計の機能が使われている場合。予約も利用の記録も残っていない場合。なお、増設するか、どの機器を廃止するかという投資の判断は、この構成では代替できません。
07最小構成で試す方法
- 共用機器から、予約が取れないという声の多い機器と、あまり使われていない機器を合わせて10台選ぶ
- その10台の前月の予約の時間と利用の時間を、カレンダーとフォームの回答から手で集計する
- 稼働率、予約率、使われなかった予約の割合を表にし、保守の台帳から周期と前回の実施日を書き足す
- 予約した人の名前を外し、手元のAIサービスに表を貼り付ける
- 「機器ごとに、増設の検討・予約のルールの見直し・保守の手配・集約の検討・対応なしのどれに当たるかを判定し、根拠の数字を挙げてください。表に無い数字は書かないでください。人を特定する書き方をしないでください」と指示する
10台は必ずやってください。 スクリプトを書く前に、「この数字で、委員会が使える区分が付くのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 研究グループの声と区分がおおむね合う | スクリプトでの自動化に進む |
| 特定の利用者の問題として書いた | 指示の書き方で直る。構成は有効 |
| 利用の記録が足りず、判定できない機器が多い | 記録の入れ方の見直しが先。 フォームの置き場所と項目を直す |
3行目が出ることは珍しくありません。 利用の記録は、研究員にとって手間の割に見返りの無い入力だからです。その場合は、集計した稼働率を研究員にも見せ、記録が増設の根拠になることを伝えるところから始めます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 月をまたぐ予定が両方の月に数えられる | getEvents は期間をまたぐ予定も返す。月の境目で切り分ける |
| 時間帯ごとの予約率がずれる | スクリプトのタイムゾーンを研究所に合わせる |
| 記録の入れ忘れが使われなかった予約に見える | 記録の点検を出し、入れ忘れの多い機器は参考の値にする |
| カレンダーが取得できない | 管理用アカウントに全カレンダーの閲覧の権限を与える |
| 1回の実行が6分で終わらない | 処理済みの印を残し、続きから動かす |
| AIが稼働率を計算し直す | 計算しないことを指示に書き、evidence を入力と突き合わせる |
| 特定の利用者の問題として書く | 名前を渡さず、人を特定する書き方を禁じる |
| 60台を一度に渡して出力が切れる | 10台ずつに分けて呼ぶ |
| 保守の台帳をスクリプトが書き換える | 台帳は読むだけにし、実施日は担当者が入れる |
| 区分の線が委員会のたびに変わる | 線をシートに置き、変えたことを記録に残す |
上の3行が、この構成の失敗のほとんどです。 どれも数字の数え方の問題で、数え方がずれた稼働率に、AIはもっともらしい所見を付けてしまいます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 研究員ごとの予約と利用の記録、予定の題名、機器の不具合のメモです。予定の題名には、研究のテーマや試料の名前が書かれていることがあります。
- 予定の題名をAIに渡さない … 集計に要るのは予約の時間だけです。題名には未公開の研究のテーマが含まれることがあるので、スクリプトの中で捨てます
- 研究員の名前を渡さない … 機器ごとの合計の数字だけを渡します。所見で人を特定する書き方も禁じます
- 稼働率を個人の評価に使わない … この集計は機器の計画のためのものです。誰が使っていないかを見る道具にすると、利用の記録が正しく入らなくなります
- 増設と廃止をAIに決めさせない … 投資の判断は設備の委員会が行います。所見は「検討の対象」までにします
- カレンダーの閲覧の権限を必要な範囲に限る … 管理用アカウントに与えるのは、共用機器のカレンダーの閲覧だけにします
- API キーをスクリプトの本文に書かない … スクリプトのプロパティに置き、編集権限を研究企画室の管理者に限ります
誤りが起きた場合のリスクは、保守の時期を遅く見誤ることと、記録の入れ忘れを使われていない機器と取り違えることの2つです。 前者は台帳の周期と累計の稼働時間の確認で防ぎ、後者は記録の点検で防ぎます。
10まず何から始めるか
1週目:機器の一覧を作る
60台について、機器ID、カレンダーのID、利用できる時間帯、保守の種類と周期、業者の手配にかかる日数を1行1台にします。管理用アカウントに、全カレンダーの閲覧の権限を与えます。
2週目:10台で試す
声の多い機器と使われていない機器を合わせて10台選び、前月の分を手で集計して、手元のAIサービスで区分を付けさせます。研究グループの声と突き合わせ、人を特定する書き方をしていないかを最優先で見ます。
3週目:集計をスクリプトにする
Apps Script でカレンダーとフォームの回答を読み、稼働率、予約率、使われなかった予約の割合を出すところまで作ります。この時点ではAIを呼ばず、数字の一覧と記録の点検だけを1か月回します。
4週目以降: 保守の時期の見込みと手配の期限を足し、Claude API による区分と所見を足します。担当者が区分を直した件数を数えます。3か月目以降: 四半期の委員会の資料を、毎月の判定から作ります。保守の手配が見込みの期限の前に始まるようになり、増設の要望に毎月の数字が添えられるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 時間主導型のトリガーが毎分から月1回までの間隔で設定でき、時刻が1時間の幅の中で選ばれること。インストール型のトリガーが作った人のアカウントで動くこと | Google for Developers: Installable Triggers | 2026-10-06 |
| 1回の実行が6分まで、Google Workspace のアカウントで URL Fetch が1日100,000回であること。上限が予告なく変わりうること | Google for Developers: Quotas for Google Services | 2026-10-06 |
getCalendarById でIDからカレンダーを取得でき、見つからなければ null を返すこと | Google for Developers: Class CalendarApp | 2026-10-06 |
getEvents(startTime, endTime) が期間の中の予定を取得すること。期間の中で始まる予定、期間の中で終わる予定、期間をまたぐ予定を返すこと。タイムゾーンの指定が無い場合、時刻がスクリプトのタイムゾーンで解釈され、カレンダーのタイムゾーンと違うことがあること | Google for Developers: Class Calendar | 2026-10-06 |
fetch(url, params) の method・contentType・headers・payload。muteHttpExceptions を true にすると失敗の応答でも例外を投げずに応答を返すこと | Google for Developers: Class UrlFetchApp | 2026-10-06 |
| スクリプトのプロパティがすべての利用者に共有されるアプリ全体の設定値の置き場所であること。値が文字列で保存されること | Google for Developers: Properties Service | 2026-10-06 |
output_config.format に json_schema の形でスキーマを渡すと JSON で応答すること。enum・required・additionalProperties: false が使えること。stop_reason が refusal や max_tokens のとき出力がスキーマに沿わないことがあること | Claude Docs: Structured outputs | 2026-10-06 |
稼働率の分母とする利用できる時間帯、区分の線、増設と保守の判断の手続きは、自社の研究所の運用と設備の委員会の取り決めに従ってください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。機器の制御のソフトからの記録の出し方は、各機器の製造元の案内を確認してください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0553)についてのご相談はこちらから。
