大学の研究室の試薬の在庫表と使用記録から、発注が要る試薬を判定して発注依頼の下書きを作る
大学の研究室で、試薬の在庫表と学生が付ける使用記録を毎週照らし、発注が要る試薬を判定します。理由を添えた発注依頼の下書きを作り、試薬係の教員に届けます。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- 医療/教育/製造
- 対象部門
- 研究開発
- 対象業務
- 台帳・マスタ管理/書類作成
- 主な課題
- 入力作業が多い/属人化している/期限・対応漏れが起きる
- AIで行う処理
- 判定
- 主な効果
- 属人化解消/工数削減/機会損失防止
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 学生が実験の後に使用記録をフォームで付ける
- 月曜の朝、試薬係が先週分の使用記録を読む
- 記録の試薬名を在庫表の試薬に読み替え、減った量を頭の中で足す
- 在庫表を開き、残りの少なそうな試薬に目星を付ける
- 迷うものは棚を見に行く
- 研究室の予定(学生の研究テーマ、学会前の実験)を思い出し、多めに頼むものを決める
- 学内の購買システムに、試薬名・メーカー・品番・規格・数量を入力する
- 人学生が実験の後に使用記録をフォームで付ける(いまと同じ)
- 自動月曜の朝、Apps Script が研究室ごとに先週分の使用記録と在庫表、予定のシートを読む
- 自動AIが、使用記録の1件ずつを在庫表の試薬に結び付け、減った量を見積もる
- 自動Apps Script が、過去8週の使用量と在庫、標準の納期から、切れるまでの週数を計算する
- 自動AIが、計算の結果と予定・記録のメモから、試薬ごとに `order` / `watch` / `check` を判定する
- 自動`order` のものについて、発注依頼の下書きを発注依頼シートに書き、試薬係へメールで知らせる
- 人試薬係が下書きと `check` の試薬を確かめ、迷うものは棚を見る
- 人試薬係が予算を決め、学内の購買システムに入力する。毒物・劇物は学内の手続きを行う
- 人入力したものに「発注済み」の印を付ける
各工程の詳しい説明を読む
- 学生が実験の後に使用記録をフォームで付ける
- 月曜の朝、試薬係が先週分の使用記録を読む
- 記録の試薬名を在庫表の試薬に読み替え、減った量を頭の中で足す
- 在庫表を開き、残りの少なそうな試薬に目星を付ける
- 迷うものは棚を見に行く
- 研究室の予定(学生の研究テーマ、学会前の実験)を思い出し、多めに頼むものを決める
- 学内の購買システムに、試薬名・メーカー・品番・規格・数量を入力する
(a)切れてから気づく。 3番の読み替えを省くと、在庫表の本数のまま「まだある」と判断します。学生が「THF がもう無いです」と言いに来て、初めて気づきます。 納期が1週間かかる試薬なら、その間は実験が止まります。
(b)使用記録が読み替えられない。 「脱水 THF」「THF(安定剤なし)」「テトラヒドロフラン」が同じ試薬か別の規格か、試薬係にしか分かりません。 学生が書いた「少し」が何 mL なのかも、記録だけでは分かりません。
(c)予定が反映されない。 卒業研究の学生が合成を始める時期、学会前に実験が集中する時期に、ふだんの量で頼むと足りなくなります。 予定を覚えているのは試薬係だけです。
(d)二重に頼む。 試薬係が頼んだ後に、学生が別に頼んでいることがあります。届いてから棚に同じ瓶が並び、使い切る前に期限を迎えます。
- 【人】 学生が実験の後に使用記録をフォームで付ける(いまと同じ)
- 【自動】 月曜の朝、Apps Script が研究室ごとに先週分の使用記録と在庫表、予定のシートを読む
- 【自動】 AIが、使用記録の1件ずつを在庫表の試薬に結び付け、減った量を見積もる
- 【自動】 Apps Script が、過去8週の使用量と在庫、標準の納期から、切れるまでの週数を計算する
- 【自動】 AIが、計算の結果と予定・記録のメモから、試薬ごとに
order/watch/checkを判定する - 【自動】
orderのものについて、発注依頼の下書きを発注依頼シートに書き、試薬係へメールで知らせる - 【人】 試薬係が下書きと
checkの試薬を確かめ、迷うものは棚を見る - 【人】 試薬係が予算を決め、学内の購買システムに入力する。毒物・劇物は学内の手続きを行う
- 【人】 入力したものに「発注済み」の印を付ける
7番が、この設計の分かれ目です。 AIが出すのは、記録の結び付けと判定の理由までです。頼むかどうかを決めるのは試薬係です。 研究テーマの変更や、他の研究室から借りられる見込みのように、シートに無いことを知っているのは試薬係だからです。
4番を Apps Script で計算しているのも意図してのことです。 使用量の平均や切れるまでの週数は、AIに計算させると桁を誤ることがあります。数字はスクリプトが出し、AIはその数字を読んで判断の材料にします。
9番の「発注済み」の印は、(d)の二重の発注を防ぐためのものです。 次の週の判定では、発注済みで未着の試薬を在庫に含めて考えます。納品されたら、試薬係か受け取った学生が「納品済み」に変え、在庫表の本数を直します。この2つの印の付け忘れが、この構成でいちばん起きやすい運用の漏れです。
02今回想定するシステム構成
学生 ── Google フォーム(使用記録) ▼ 回答がスプレッドシートにたまる 【トリガー】毎週月曜の朝(時間主導型) Google Apps Script ├── 在庫表シート ── 試薬名・規格・本数・発注点・区分・標準の納期 ├── 使用記録シート ── 先週分の記録 ├── 予定シート ── 研究室の実験の予定 ├── 発注依頼シート ── 発注済みで未着のもの ├── Claude API(UrlFetchApp、構造化出力) │ ① 使用記録を在庫表の試薬に結び付ける │ ② 計算の結果と予定から発注の要否を判定する ├── 発注依頼シート ── 下書きを書く └── MailApp ── 試薬係へ知らせる ▼ 【試薬係が確かめて学内の購買システムに入力】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Make、Power Automate |
| 生成AI | Claude API(構造化出力) | OpenAI API、Gemini API |
| 保管 | Google スプレッドシート(在庫表、使用記録、予定、発注依頼) | - |
| 通知 | Gmail(MailApp) | Google Chat |
新しく足すのは、Apps Script と、予定のシートと発注依頼のシートだけです。 在庫表と使用記録のフォームはいまのものを使い、在庫表に「発注点」「区分」「標準の納期」の3つの列を足します。 学内の購買システムには、この構成から書き込みません。
「区分」の列は、一般・劇物・毒物・危険物などを入れる欄です。 毒物及び劇物取締法の第14条第2項では、毒物劇物営業者は、毒物劇物営業者以外の者に毒物または劇物を販売・授与するとき、譲受人から名称・数量・年月日・氏名・職業・住所を記載した書面の提出を受けなければならないとされています。研究室が買うときはこの譲受人の側に当たるので、区分が毒物か劇物の試薬は、下書きに「譲受の書面が要る」と明記し、学内の手続きに回します。
Apps Script の1回の実行は6分までです。 公式のページでは、スクリプトの実行時間は1回6分とされています。12研究室を1回の実行で回すと届くことがあるので、研究室ごとにトリガーの時刻をずらすか、1回で数研究室ずつ処理します。
03どうやって実装するのか
処理の起点を決める
毎週月曜の朝に動かします。 Apps Script の時間主導型のインストール型トリガーで、週に1回、月曜の7時に設定します。試薬係が出勤して最初に見る時間に、下書きが届いている状態にします。
時刻はちょうどにはなりません。 公式のページでは、時間主導型トリガーの時刻は少しずれることがあり、9時に設定すると9時から10時の間のどこかで動き、その時刻は日ごとに変わらないとされています。7時に設定すれば7時台のどこかで動き、8時半の始業には間に合います。
12研究室を1回で回さず、4つずつ3回に分けます。 7時、7時台の2本目、8時台の1本目という形でトリガーを3つ作り、それぞれが担当の研究室を処理します。1回の実行の6分の上限に余裕を持たせるためです。 処理した研究室と日付を発注依頼シートの別のタブに書き、同じ週に二度処理しないようにします。
トリガーは学部の共用アカウントで作ります。 公式のページでは、インストール型トリガーは常に作った人のアカウントで動きます。試薬係の個人のアカウントで作ると、その人が異動したときに止まります。 失敗は所有者へのメールで届くので、共用アカウントのメールを技術職員が毎日見ます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 在庫表 | 試薬ID、試薬名、別名・略称、CAS番号、メーカー、品番、規格・容量、本数(未開封)、開封中の残りの目安、発注点、区分、標準の納期(週) | 在庫表シート |
| 使用記録 | 日時、記録した人、試薬名(自由記述)、使った量(自由記述)、残り(自由記述)、メモ | 使用記録シート |
| 過去8週の使用量 | 試薬IDごとの週ごとの使用量(前の週までに確定したもの) | 使用量のタブ |
| 予定 | 期間、テーマ、多く使う見込みの試薬(自由記述) | 予定シート |
| 発注済みで未着 | 試薬ID、数量、発注日 | 発注依頼シート |
質を決めるのは、在庫表の「別名・略称」の列です。 学生が書く「THF」「脱水THF」「テトラヒドロフラン」を同じ試薬に結び付けるには、どの書き方がどの試薬IDに当たるかを在庫表に書いておく必要があります。 規格が違う試薬(脱水と一般、安定剤の有無)は別の行にし、それぞれの別名を書きます。
予定のシートは、試薬係が月に1回書き足します。 「11月から B4 の2人が合成を開始、THF とヘキサンを多く使う見込み」のように、期間と試薬を書きます。 予定が無ければ、判定はふだんの使い方だけで行われます。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 先週分の使用記録 | 使用記録シート | 日時が前週の月曜から日曜の行 |
| 在庫表 | 在庫表シート | 全行。試薬IDと別名の対応表を作る |
| 過去8週の使用量 | 使用量のタブ | 試薬IDごとに8週分 |
| 予定 | 予定シート | 期間が今日から8週以内に重なる行 |
| 発注済みで未着 | 発注依頼シート | 状態が「発注済み」で「納品済み」でない行 |
AIは UrlFetchApp から Claude API を呼びます。 fetch に method を post、contentType を application/json、headers に API のキーと anthropic-version、payload に指示と材料と output_config を入れます。公式のページでは、contentType を省くと既定はフォームの形式になり、muteHttpExceptions を有効にすると失敗の応答でも例外を投げずに応答を返します。 応答の状態を見て、失敗した研究室に印を付けるために使います。
1つの研究室につき、AIを2回呼びます。 1回目は使用記録の結び付け、2回目は発注の要否の判定です。間に Apps Script の計算を挟むので、1回にまとめません。 API のキーはスクリプトのプロパティに置き、コードに書きません。
AIへ渡す前に整形する
- 使用記録を研究室ごとに分ける … フォームの「研究室」の欄で分けます
- 在庫表の別名の一覧を作る … 試薬名と別名・略称の列から、試薬IDと書き方の対応を作ってAIに渡します。300〜500行の全部を渡さず、試薬ID・試薬名・別名・規格だけに絞ります
- 確定した使用量を計算する … 1回目のAIの結果のうち、量が数字で取れたものを試薬IDごとに足し、使用量のタブに書きます
- 切れるまでの週数を計算する … 在庫(未開封の本数 × 容量 + 開封中の残りの目安)を、過去8週の週あたり使用量の平均で割ります
- 発注点と納期で印を付ける … 未開封の本数が発注点を下回る、または切れるまでの週数が標準の納期+1週を下回る試薬に「要確認」の印を付けます
- 発注済みで未着のものを足す … 印を付ける前に、未着の数量を在庫に足します
- 2回目に渡す試薬を絞る … 印の付いた試薬と、予定のシートに名前が出てくる試薬だけを渡します
4番と5番は、AIに任せません。 平均と割り算は、スクリプトなら毎回同じ答えになります。AIに渡すのは計算の結果で、計算そのものではありません。
7番で絞るのは、判定の材料を見やすくするためです。 500種類すべてを渡すと、AIはほとんど使っていない試薬にも理由を書き、試薬係が読む量が増えます。
AIに処理させる
1回目にさせるのは、使用記録の1件ずつを在庫表の試薬IDに結び付け、量を見積もることです。
| 記録の書き方 | 扱い | 判断できないときの扱い |
|---|---|---|
| 「THF 脱水 1本開けた」 | 脱水 THF の試薬IDに結び付け、未開封から1本減、開封中が1本増 | 規格が複数あり決められなければ unmatched |
| 「アセトン 200 mL」 | 数字をそのまま使用量にする | - |
| 「半分くらい」「少し」 | qualitative として言葉のまま返す。mL に直さない | 容量が分からなければ言葉のまま |
| 「新しいの開けた、前のは空」 | 空になった瓶1本、開封1本 | 試薬が書かれていなければ unmatched |
| 在庫表に無い試薬 | not_in_inventory | 試薬係が在庫表に足すか判断 |
3行目が大事です。 「少し」を AI が勝手に 10 mL と置くと、その数字が使用量のタブに残り、次の週からの平均を少しずつ狂わせます。 あいまいな記録は言葉のまま返させ、2回目の判定の材料にだけ使います。
2回目にさせるのは、印の付いた試薬ごとに、発注が要るかを判定し、理由を書くことです。
| 判定 | 意味 |
|---|---|
order | 計算の結果と予定から、次の週までに頼まないと切れるおそれがある |
watch | 印は付いたが、予定や記録から今週は頼まなくてよいと読める |
check | 記録があいまい、在庫表と記録が食い違うなど、棚を見ないと決められない |
| させないこと | 理由 |
|---|---|
| 在庫や使用量の計算 | スクリプトが出す。AIは結果を読むだけ |
| 「少し」を数字に直す | 推測の数字が平均を狂わせる |
| 予算の科目を選ぶ | 研究費の使い道は教員が決める |
| 毒物・劇物の手続きを省く | 区分の列を見て、下書きに必ず書く |
| 在庫表に無い試薬を勝手に足す | 試薬係が判断する |
指示内容を固定する
あなたは大学の研究室で、試薬の在庫を管理する試薬係を補助する立場です。
スクリプトが計算した在庫と使用量の数字、研究室の予定、使用記録のメモをもとに、
試薬ごとに発注が要るかを判定してください。
【判定の選び方】
- order ... 切れるまでの週数が標準の納期+1週を下回り、予定や記録から
その使い方が続くと読める。または、予定で使う量が増える。
- watch ... 数字の上では印が付いたが、予定や記録から今週は頼まなくて
よいと読める(テーマの終了、他の規格への切り替えなど)。
その根拠を必ず書く。
- check ... 使用記録があいまい、在庫表の本数と記録が食い違う、
開封中の残りの目安が空欄など、棚を見ないと決められない。
迷ったときは check を選んでください。watch を選ぶのは根拠があるときだけです。
【厳守事項】
- 在庫、使用量、週数を計算し直さないでください。渡した数字をそのまま使ってください。
- 「少し」「半分くらい」などの記録を数字に直さないでください。
- 渡した材料に無い予定や事情を推測しないでください。
- 予算の科目、購入先の選択については書かないでください。
- 区分が「毒物」「劇物」の試薬は、order のとき note に
「譲受の書面が要る」と必ず書いてください。
- reason には、根拠にした数字と、予定・記録の言葉をそのまま写してください。
【発注の数量の目安】
- 標準の数量(在庫表の「標準の発注数」)をそのまま quantity に入れてください。
- 予定で使う量が増えるときだけ、標準の数量を超えてよい。そのときは
quantity_reason に予定の言葉を写してください。
【試薬ごとの計算の結果】{calc_results}
【研究室の予定(今後8週)】{schedule}
【先週の使用記録のうち、あいまいな記録と結び付けできなかった記録】{qualitative_logs}
【発注済みで未着のもの】{pending_orders}
「迷ったときは check を選ぶ」を明記しないと、watch に寄ります。 予定のシートに少しでも関係のありそうな言葉があると、それを根拠に「今週は不要」と書きます。watch が増えると、第3章の(a)に戻ります。
「計算し直さない」を書くのは、AIが渡した数字を自分で検算して別の値を書くことがあるからです。 試薬係が読む理由の数字とスクリプトの数字が食い違うと、どちらを信じればよいか分からなくなります。
出力形式を固定する
2回目の判定は、次の形のJSONで受け取ります。 Claude API の構造化出力で、output_config.format に JSON Schema を渡します。
{
"lab_id": "",
"items": [
{
"reagent_id": "",
"decision": "order | watch | check",
"quantity": 0,
"quantity_reason": "",
"reason": "",
"note": ""
}
]
}
1つ目の理由は、decision で振り分けを機械的にできることです。 order は発注依頼シートの下書きに、check は「棚を見るもの」の一覧に、watch はメールの末尾に件数だけ書きます。試薬係は、上から順に見ればよい状態になります。
2つ目は、下書きの行を在庫表から組み立てられることです。 AIが返すのは reagent_id と数量と理由だけで、試薬名・メーカー・品番・規格はスクリプトが在庫表から引いて下書きに書きます。 品番をAIに書かせると、似た品番の別の規格を書くことがあります。
3つ目は、schema の制約に合わせられることです。 公式のページでは、構造化出力の schema では minimum・maximum のような数値の制約が使えないとされています。数量が0以下や極端に大きくないかは、スクリプトで確かめます。 additionalProperties は false にします。
1回目の結び付けも、log_id、reagent_id、match(matched / unmatched / not_in_inventory)、amount_ml、qualitative、bottles_opened、bottles_emptied の形で受け取ります。 amount_ml は記録に数字があるときだけ入れ、無いときは空にします。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 在庫表・使用記録・予定のシート | SpreadsheetApp で読む | 材料を集める |
| 使用量のタブ | SpreadsheetApp で書く | 確定した使用量を週ごとに足す |
| Claude API | UrlFetchApp(POST、JSON) | 結び付けと判定 |
| 発注依頼シート | SpreadsheetApp で書く | order の下書きと check の一覧 |
| 試薬係 | MailApp | 下書きができた知らせ |
| 学内の購買システム | つながない | 試薬係が入力する |
在庫表には書き込みません。 本数を直すのは、試薬係が棚を見たときと、納品された試薬を棚に入れたときだけです。AIの結び付けで本数を自動で減らすと、結び付けの誤りがそのまま在庫表に残ります。
試薬係への知らせには、order の件数と試薬名、check の件数と試薬名、発注依頼シートへのリンクを書きます。 公式のページでは、MailApp の getRemainingDailyQuota でその日に送れる残りの宛先数が分かるので、送る前に確かめます。
人が確認する
試薬係が見るのは、自分の研究室の発注依頼シートの下書きと check の一覧です。
checkを先に見る … 棚を見て、開封中の残りの目安と未開封の本数を在庫表に直します。直した後に、その試薬を頼むかを決めますorderの理由を確かめる …reasonの数字と予定の言葉を読み、頼む数量を決めますunmatchedとnot_in_inventoryの記録を見る … 在庫表の別名を足すか、新しい試薬の行を足すかを決めます- 予算を決めて購買システムに入力する … 毒物・劇物は学内の手続きを行います
- 「発注済み」の印を付ける
3番を毎週続けると、unmatched が減っていきます。 学生の書き方は研究室ごとに癖があり、別名の列に足すほど、1回目の結び付けが当たるようになります。
学生への伝え方も、確認の一部です。 unmatched の多い書き方をする学生がいれば、試薬係が「在庫表の試薬名で書いてほしい」と伝えます。フォームの試薬名の欄を、在庫表の試薬名から選ぶ形に変えるのは、記録の数がそろってからにします。 最初から選ばせると、在庫表に無い試薬を使ったときに記録が付けられなくなります。
目標は、1研究室あたり週10分です。 check の棚を見る時間が中心で、check が多い週は、在庫表の開封中の残りの目安が空いています。
例外に対処する
| 起きること | 対応 |
|---|---|
| 先週の使用記録が0件 | AIの1回目を呼ばず、計算と印付けだけ行う。記録の付け忘れの可能性を知らせに書く |
| 結び付けできない記録が多い | 別名の列が足りない。unmatched の一覧を試薬係に回す |
| 在庫表の発注点・納期が空 | その試薬は印付けの対象外にし、空欄の一覧を知らせる |
| 過去8週の使用量が足りない | 新しく入れた試薬は、予定と印だけで判定させ、理由に「使用実績が少ない」と書かせる |
毒物・劇物の order | 下書きの note に「譲受の書面が要る」と書く。AIが書き漏らしても、スクリプトが区分の列を見て書き足す |
| Claude API が失敗を返す | 研究室に「判定失敗」の印。30分後のトリガーで再試行 |
| 実行が6分に近づく | 処理した研究室を記録して止め、残りを次のトリガーに回す |
| 数量が0以下、または標準の10倍を超える | スクリプトが弾き、check に回す |
| 同じ週に二度動く | 処理済みのタブを見て、二度目は何もしない |
5行目の二重の書き足しは、意図してのことです。 譲受の書面の要否は法律の手続きなので、AIの出力だけに頼らず、区分の列という確かな情報からスクリプトが必ず書きます。
記録を残す
- 研究室ごと・週ごとの、AIに渡した材料(計算の結果、予定、あいまいな記録)
- AIが返した JSON の全文(1回目と2回目)
- 確定した使用量の週ごとの値と、その元になった記録のID
- 試薬係が下書きを直した内容と、
checkを棚で確かめた結果 - 発注した日、数量、納品された日
- 切れてしまった試薬の記録 … 学生からの「無い」の連絡と、その試薬の直前の判定
最後の行が、この構成の見直しの材料です。 切れた試薬の直前の判定が watch だったなら指示が、印が付いていなかったなら発注点か納期の列が合っていません。どちらの誤りかで、直す場所が変わります。
04実装レベルの3段階
最小構成は確かめるための段階です。 1週分ずつ貼るので、12研究室の毎週には使えません。 半自動化で1件30分が10分になり、この段階が本記事の想定です。 本格構成で増えるのは学部の側の仕事で、研究室の試薬係の時間はあまり変わりません。 同じ溶媒を複数の研究室が別々に頼んでいるなら、まとめて頼むことで納品と検収の手間が減ります。 段階を飛ばさないでください。 半自動化を2か月回し、別名の列と発注点がそろってから研究室をまたぎます。研究室ごとに試薬の書き方が違うまま集計すると、同じ試薬が別の試薬として数えられます。
05工数削減シミュレーション
導入後 48件 × 10分 ÷ 60 = 8 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 化学・生物・薬学などの学部で、研究室ごとに試薬係の教員や技術職員が在庫表を見て発注を決めている大学。使用記録を Google フォームやスプレッドシートで付けているが、自由記述が多く、在庫表への反映が遅れている場合。試薬が切れて実験が止まる、同じ試薬を二重に頼む、といったことが年に何度も起きている場合。Google Workspace を使っている場合。
- 学内の薬品管理システムがバーコードで在庫を自動で引き当て、発注点の通知まで行っている場合。研究室の試薬が数十種類で、試薬係が棚を見れば足りる場合。発注を学部の共通の窓口がまとめて行い、研究室が在庫を持たない場合。なお、どの予算で買うか、毒物・劇物の譲受の手続き、廃棄の判断は、この構成では代替できません。
07最小構成で試す方法
- 1つの研究室の、先月の使用記録4週分と在庫表を用意する
- 在庫表から、よく使う試薬30種類の行だけを抜き出す(試薬名・別名・規格・本数・発注点・納期)
- 手元の Claude の画面に、在庫表の30行と1週分の使用記録を貼る
- 「使用記録の1件ずつを在庫表のどの試薬に当たるかで結び付け、量が数字で書かれていないものは言葉のまま返してください」と指示する
- 結び付けの結果を試薬係が見て、当たっているかを確かめる。残りの3週分も同じように試す
4週分は必ずやってください。 スクリプトを書く前に、「学生の書き方から試薬を特定できるか」を確かめます。 判定より先に結び付けを試すのは、ここが外れると後の判定が全部外れるからです。
| 出てきた内容 | 判断 |
|---|---|
| 結び付けの多くが当たった | スクリプトに進む |
| 「少し」を数字に直してしまった | 指示の書き方で直る。構成は有効 |
| 規格の違う試薬を取り違えた | 在庫表の別名の列が足りない。 AIの問題ではない |
3行目が出たら、別名の列を書き足します。 脱水と一般、安定剤の有無、容量の違いを、学生が書く言葉で書いておきます。
結び付けが当たるようになったら、判定も同じ画面で試します。 4週目の時点の在庫表と、試薬係が当時頼んだものを用意し、「どれを頼むべきか」を判定させて、当時の試薬係の判断と見比べます。 当時切らした試薬があれば、それを order にできたかを見ます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 規格の違う試薬を取り違える | 在庫表の別名の列を規格ごとに書く。 迷うものは unmatched にさせる |
| 「少し」が数字になって平均が狂う | 言葉のまま返させ、使用量のタブには数字の記録だけを書く |
| AIが数字を計算し直す | 計算はスクリプト。渡した数字を使うことを指示に書く |
| watch が多すぎる | 迷ったら check。watch には根拠を必ず書かせる |
| 品番を書き誤る | AIには試薬IDだけを返させ、品番はスクリプトが在庫表から引く |
| 毒物・劇物の手続きが漏れる | 区分の列を見て、スクリプトが下書きに必ず書き足す |
| 実行が6分で止まる | 研究室を分けて複数のトリガーで回す |
| 作った人が異動して止まる | 共用アカウントでトリガーを作る |
| 二重に頼む | 発注済みで未着のものを在庫に足す。学生にも直接頼まないよう伝える |
| 在庫表の本数と棚が合わない | check で棚を見たときに直す。AIの結び付けで本数を自動で減らさない |
上の3行が、この構成の失敗のほとんどです。 どれも、あいまいな記録や数字をAIに「それらしく」埋めさせないための線引きです。
下の2行は、仕組みの外の問題です。 学生が試薬係を通さずに頼む、棚の本数を直さない、という運用が残ったままだと、どれだけ判定が当たっても在庫表がずれていきます。 研究室の新年度の説明で、使用記録の付け方と発注の窓口を伝えておきます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 試薬の名前・量・保管場所、使用記録を付けた学生の名前、研究室の実験の予定です。個人の機微な情報はほとんど含みませんが、研究の予定は未発表の研究の内容に触れることがあります。
- AIに学生の名前を渡さない … 使用記録の「記録した人」の欄は渡しません。結び付けに名前は要りません
- 予定のシートに研究の中身を書きすぎない … 「B4 の2人が合成を開始」で足ります。化合物の構造や共同研究の相手は書きません
- 毒物・劇物の手続きを仕組みで漏らさない … 区分の列からスクリプトが必ず書き、譲受の書面の作成は学内の手続きに従います
- 発注を自動で確定させない … 下書きまでです。予算の使い道は教員が決めることで、誤った発注は研究費を減らします
- この構成は保管の管理を代替しません … 毒物・劇物の盗難や紛失の防止、危険物の保管の量は、学内の規程と担当者の管理で行います
- API のキーを共用アカウントのスクリプトに閉じる … キーはスクリプトのプロパティに置き、スクリプトを編集できる人を技術職員に限ります。 在庫表のスプレッドシートを学生と共有していても、スクリプトの編集の権限は別に絞れます
- 使用記録を研究の記録として扱わない … 使用記録は在庫のための記録です。実験ノートの代わりにしないことを学生に伝えます。 実験の条件や結果まで書かれるようになると、AIに渡る情報が増えます
誤りが起きた場合のリスクは、切れる試薬を見落とすことと、要らない試薬を頼むことの2つです。 前者は watch を出しすぎることから、後者は「少し」を大きな数字に直すことから起きます。どちらも、AIに推測させない線引きで防ぎます。
10まず何から始めるか
1週目:在庫表に4つの列を足す
別名・発注点・区分・標準の納期の列を足し、よく使う上位50種類から埋めます。区分は、学内の薬品の管理の一覧と照らして入れます。
2週目:4週分で試す
第8章の手順で、1つの研究室の4週分の使用記録を結び付けさせます。規格の取り違えと、「少し」を数字に直していないかを最優先で見ます。
3週目:予定と発注依頼のシートを作る
予定のシートを作り、試薬係が今後2か月の予定を書きます。発注依頼のシートを作り、いまの発注済みで未着のものを書き出します。
4週目:1研究室でつなぐ
時間主導型トリガーで、1つの研究室の結び付け・計算・判定・下書きまでを動かします。この時点では、試薬係はいままでどおり自分でも在庫を見て、下書きと比べます。
2か月目: 研究室を4つに広げ、別名の列を毎週書き足します。3か月目以降: 12研究室に広げ、切れた試薬の記録と直前の判定を月に1回見比べます。試薬が切れて実験が止まる週がなくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| インストール型トリガーが常に作った人のアカウントで動くこと。時間主導型の時刻が指定の時刻から1時間の中でずれること。失敗が所有者へのメールで届くこと | Google: Installable triggers | 2026-10-14 |
| スクリプトの1回の実行が6分までであること | Google: Quotas for Google Services | 2026-10-14 |
fetch に method・contentType・headers・payload を指定できること。contentType の既定がフォームの形式であること。muteHttpExceptions の動き | Google: UrlFetchApp | 2026-10-14 |
getRemainingDailyQuota でその日の残りの宛先数が分かること | Google: MailApp | 2026-10-14 |
output_config.format に JSON Schema を渡すこと。additionalProperties を false にすること。minimum・maximum などの数値の制約が使えないこと | Claude Docs: Structured outputs | 2026-10-14 |
| 毒物劇物営業者が毒物劇物営業者以外の者に毒物・劇物を販売・授与するとき、譲受人から名称・数量・年月日・氏名・職業・住所を記載した書面の提出を受けなければならないこと(第14条第2項) | e-Gov 法令API: 毒物及び劇物取締法 | 2026-10-14 |
毒物・劇物の譲受の手続きと保管の管理は、学内の規程に従ってください。 本記事は法令の該当の条文で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1476)についてのご相談はこちらから。
