加工機ごとの切削工具の使用記録から交換時期を見込み、翌週に交換が要る工具と在庫の手配の一覧を毎週作る
加工機ごとの加工数の記録と工具の交換の記録から、工具1本ごとに「あと何日で交換になるか」を見込み、翌週に交換が要る工具の一覧と、在庫が足りない工具の手配の候補を毎週金曜に作ります。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Power Automate/Python
- 対象業界
- 製造
- 対象部門
- 生産/購買
- 対象業務
- 書類作成/集計・分析
- 主な課題
- 判断に時間がかかる/属人化している/期限・対応漏れが起きる
- AIで行う処理
- 予測
- 主な効果
- 属人化解消/工数削減/機会損失防止
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 作業者が交換のたびに Google フォームで「機械・工具番号・品番・理由」を記録する。理由は自由記述
- 作業者が毎日の終わりに、機械ごと・品番ごとの加工数を日報のフォームに入れる
- 金曜の午後、班長が担当の機械10台分について、日報のシートから先週の加工数を拾う
- 工具ごとに、前回の交換から何個加工したかを電卓で足し上げる
- 自分の経験の寿命と比べて、来週のうちに替えそうな工具に印を付ける
- 印を付けた工具の品番を倉庫の在庫表と見比べ、足りなさそうなものを購買課にメッセージで伝える
- 購買課が、伝えられた品番を発注する。伝え漏れたものは、切れた当日に急ぎで手配する
- 人作業者はこれまでどおり、交換の記録と加工数の日報をフォームで入れる
- 自動毎日夜、Apps Script が新しい交換の記録だけを Gemini API に渡し、理由のメモを読み分けて「寿命の母数に入れるか」の印を付ける
- 自動金曜の朝、Apps Script が工具ごとに前回の交換からの加工数を足し上げる
- 自動品番・被削材ごとに、母数に入れた過去の寿命の中央値と下側の値を計算する
- 自動直近20稼働日の1日あたりの加工数から、工具ごとの「交換まであと何日」を出す
- 自動翌週の稼働日のうちに交換になる工具を、機械ごとの交換予定の一覧にする
- 自動交換予定の工具を品番ごとに数え、在庫と発注中の数を差し引いて、手配の候補を作る
- 自動見込みの根拠が弱い工具(母数が少ない、寿命のばらつきが大きい)に注記を付ける
- 人班長が交換予定の一覧を見て、外す工具・足す工具を直す
- 人購買課が手配の候補を確かめ、発注する
各工程の詳しい説明を読む
- 作業者が交換のたびに Google フォームで「機械・工具番号・品番・理由」を記録する。理由は自由記述
- 作業者が毎日の終わりに、機械ごと・品番ごとの加工数を日報のフォームに入れる
- 金曜の午後、班長が担当の機械10台分について、日報のシートから先週の加工数を拾う
- 工具ごとに、前回の交換から何個加工したかを電卓で足し上げる
- 自分の経験の寿命と比べて、来週のうちに替えそうな工具に印を付ける
- 印を付けた工具の品番を倉庫の在庫表と見比べ、足りなさそうなものを購買課にメッセージで伝える
- 購買課が、伝えられた品番を発注する。伝え漏れたものは、切れた当日に急ぎで手配する
(a)寿命の数字が人の頭の中にある。 「このエンドミルはSUSなら1,500個」という数字は、班長が経験で持っているものです。どこにも書かれていないので、班長ごとに違い、新しく班長になった人は持っていません。
(b)足し上げる作業が重い。 4番目は、前回の交換の日付を交換の記録から探し、その日以降の日報の加工数を、その工具を使う品番だけ拾って足す作業です。1台に30本の工具があれば30回この作業になります。 結局、主要な工具だけを見て、残りは「まだ大丈夫だろう」で済ませます。
(c)交換の理由がまざっている。 交換の記録には、摩耗で替えたものと、欠けて替えたもの、段取り替えで外したものが同じ形で並びます。班長が記録から寿命を見直そうとしても、どれが寿命だったのかを1件ずつ読み分けないと数字になりません。 それをする時間はありません。
(d)在庫とつながっていない。 交換の見込みは班長、在庫は購買課で、つなぐのは金曜のメッセージ1本です。 伝え漏れは、工具が切れた日に機械が止まってから分かります。
- 【人】 作業者はこれまでどおり、交換の記録と加工数の日報をフォームで入れる
- 【自動】 毎日夜、Apps Script が新しい交換の記録だけを Gemini API に渡し、理由のメモを読み分けて「寿命の母数に入れるか」の印を付ける
- 【自動】 金曜の朝、Apps Script が工具ごとに前回の交換からの加工数を足し上げる
- 【自動】 品番・被削材ごとに、母数に入れた過去の寿命の中央値と下側の値を計算する
- 【自動】 直近20稼働日の1日あたりの加工数から、工具ごとの「交換まであと何日」を出す
- 【自動】 翌週の稼働日のうちに交換になる工具を、機械ごとの交換予定の一覧にする
- 【自動】 交換予定の工具を品番ごとに数え、在庫と発注中の数を差し引いて、手配の候補を作る
- 【自動】 見込みの根拠が弱い工具(母数が少ない、寿命のばらつきが大きい)に注記を付ける
- 【人】 班長が交換予定の一覧を見て、外す工具・足す工具を直す
- 【人】 購買課が手配の候補を確かめ、発注する
2番目が、この設計でAIを使う場所です。 寿命の数字の質は、母数に何を入れるかで決まります。そこを毎日少しずつ、記録が入った翌日のうちに読み分けておきます。 金曜にまとめて読むと、班長が記録の書き手に「これは何で替えたのか」を聞き直す時間がありません。
9番目を省かないでください。 見込みは過去の平均から出した数字で、来週の加工の中身が変われば外れます。 新しい品番の加工が入る、被削材が変わる、といった予定は班長しか知りません。
02今回想定するシステム構成
Google フォーム(工具の交換の記録/加工数の日報)
│
▼
Google スプレッドシート(交換の記録・日報・工具の一覧・在庫表)
│
├─【毎日 夜】Google Apps Script
│ └──▶ Gemini API ── 交換の理由のメモを読み分ける
│ (寿命の母数に入れる/入れない、その理由)
│
└─【金曜 朝】Google Apps Script
├── 工具ごとの前回の交換からの加工数を足し上げる
├── 品番・被削材ごとの寿命の中央値・下側の値を計算する
├── 交換まであと何日かを出す
├── 翌週の交換予定の一覧(機械ごと)
└── 手配の候補(品番ごと、在庫と発注中を差し引く)
▼
【班長が交換予定を、購買課が手配を確かめる】| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Python |
| 生成AI | Gemini API(構造化出力) | Claude API、OpenAI API |
| 入力 | Google フォーム(交換の記録・日報) | Microsoft Forms |
| 台帳 | Google スプレッドシート(交換の記録・日報・工具の一覧・在庫表) | Microsoft 365 のブック |
| 通知 | Gmail(班長と購買課への一覧のお知らせ) | Google Chat |
新しく足すシステムはありません。 交換の記録と日報はすでにフォームで集まっており、足すのは工具の一覧のシート(どの機械のどの工具番号に、どの品番の工具が載り、どの品番の加工で使うか)だけです。これが無いと、日報の加工数を工具に割り振れません。
Apps Script の時間主導型のトリガーは、毎分から月1回までの間隔で動かせます。 毎日の読み分けは everyDays(1)、金曜の集計は onWeekDay() と atHour() で組みます。インストール型のトリガーは作成した人のアカウントで動くため、班長の個人アカウントではなく、製造課の管理用のアカウントで作ります。
Gemini API の構造化出力は、/v1beta/interactions に response_format で JSON Schema を渡す形です。 type・mime_type・schema を指定し、返ってきた output_text を JSON として読みます。JSON Schema のうち使えるのは一部(enum・required・minimum など)で、大きすぎる・深すぎるスキーマは拒否されることがあるとされています。読み分けの結果は浅い形にとどめます。
03どうやって実装するのか
処理の起点を決める
トリガーは2本に分けます。 1本は毎日夜に動く読み分け、もう1本は金曜の朝に動く集計です。
読み分けは ClockTriggerBuilder の everyDays(1) と atHour(22) で組みます。atHour() を使うときは everyDays() などの頻度の指定が要り、実行は指定の時刻のあたりで少しずれます。 夜のうちに終わればよい処理なので、ずれは問題になりません。
集計は everyWeeks(1) と onWeekDay(ScriptApp.WeekDay.FRIDAY)、atHour(7) です。金曜の朝にしているのは、その日の午後に班長が一覧を見て、夕方までに購買課が発注できるようにするためです。 金曜の夕方に作ると、発注が翌週に回ります。
集計を読み分けと同じトリガーにまとめないでください。 1回の実行は6分までで、30台分の集計に読み分けまで載せると、交換の記録が多かった週だけ途中で止まります。 止まった週にかぎって一覧が出ない、という壊れ方は気づきにくいものです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 工具の交換の記録 | 日時、機械、工具番号、工具の品番、理由(自由記述)、記録した人 | フォームの回答シート |
| 加工数の日報 | 日付、機械、加工した部品の品番、加工数 | フォームの回答シート |
| 工具の一覧 | 機械、工具番号、工具の品番、その工具を使う部品の品番、被削材の区分 | 新しく作るシート |
| 工具の在庫表 | 工具の品番、在庫数、発注中の数、納期の目安日数 | 購買課の在庫表 |
| 翌週の稼働日 | 休日・計画停止の日 | 製造課のカレンダーのシート |
質を決めるのは、3つ目の工具の一覧です。 日報にあるのは「どの部品を何個加工したか」で、どの工具を何回使ったかではありません。 部品の品番から工具を引く対応表が無ければ、加工数を工具に割り振れません。
被削材の区分は、寿命を分けて数えるための列です。 同じエンドミルでも、炭素鋼とステンレスでは寿命がまったく違います。区分を持たずにまとめて計算すると、ステンレスの多い機械だけ交換が遅れます。 区分は「炭素鋼/合金鋼/ステンレス/アルミ/鋳鉄」くらいの粗さで足ります。
交換の記録の「理由」は、自由記述のままにします。 選択式にすると記録は楽になりますが、「欠けたが、加工数はほぼ寿命だった」のような中間の事情が消えます。 読み分けはAIにさせるので、書き手には思ったとおり書いてもらいます。
データの取得方法を決める
すべて同じスプレッドシートの中にあるので、SpreadsheetApp で読むだけです。読み分けは「まだ印の無い交換の記録」だけを対象にします。 印を付けた行は二度と読まないので、毎晩の件数は、その日に入った交換の数(1日に数件〜十数件)で済みます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 印の無い交換の記録 | 交換の記録のシート(label 列が空の行) | 毎晩の読み分け |
| 前回の交換の日時 | 交換の記録のシート(機械・工具番号ごとの最新) | 足し上げの起点 |
| 前回の交換以降の加工数 | 日報のシート | 工具ごとの累計の加工数 |
| 直近20稼働日の加工数 | 日報のシート | 1日あたりの使い方 |
| 母数に入れた過去の寿命 | 交換の記録のシート(label が wear_life の行) | 寿命の中央値と下側の値 |
寿命1件は「前回の交換から今回の交換までの加工数」です。 交換の記録に加工数を書かせるのではなく、日報から足し上げて出します。 作業者に加工数を書かせると、数え方が人によって変わります。
Gemini API は UrlFetchApp.fetch() で呼びます。 method を post、contentType を application/json、headers にAPIキーを入れ、muteHttpExceptions を true にして、失敗したときも応答の中身を読めるようにします。APIキーはスクリプト プロパティに置きます。 スクリプト プロパティはそのスクリプトのすべての利用者で共有されるので、スクリプトの編集権限は製造課の管理者だけにします。
AIへ渡す前に整形する
- 機械と工具番号の表記をそろえる … 「MC-03」「MC3」「3号機」を工具の一覧の表記に寄せる。寄せられないものは読み分けに回さず、
unmatchedにする - 同じ交換の二重の記録をまとめる … 同じ機械・工具番号で10分以内に2件あれば、後の1件を重複として印を付ける
- 前回の交換の無い工具を分ける … 記録を始めて最初の交換は、起点が無いので寿命として数えない
- 加工数を工具に割り振る … 日報の部品の品番から工具の一覧を引き、その工具の累計に足す
- 被削材の区分を付ける … 工具の一覧の区分を、寿命1件ごとに写す
- 理由のメモの前後の空白と改行を落とす … 内容は変えない
3番目を飛ばすと、寿命が極端に長い1件が混ざります。 記録を始める前から使っていた工具は、本当は何個加工したかが分かりません。 起点の無い1件目は、母数から外すと最初に決めておきます。
AIに処理させる
させるのは、交換の記録1件ごとに、理由のメモを読んで「寿命の母数に入れるか」の印を付けることだけです。
| 印 | 意味 | 母数に入れるか |
|---|---|---|
wear_life | 摩耗で替えた(加工面の悪化、寸法の外れ、バリ、音など) | 入れる |
breakage | 欠け・折損で替えた | 入れない(別に数える) |
setup_change | 段取り替え・品番替えで外した | 入れない |
trial | 新しい工具・条件を試すために替えた | 入れない |
preventive | まだ使えるが、連休前などに予防で替えた | 入れない |
unclear | メモから理由が読めない | 入れない。班長に聞く |
breakage を入れないのは、欠けは寿命とは別の原因で起きるからです。 折れた工具の加工数を寿命として数えると、中央値が下がり、まだ使える工具まで早めに替えることになります。 欠けの件数は別に数え、多い品番は加工の条件を見直す材料にします。
preventive も入れません。 連休前に替えた工具は、寿命に達する前に外しています。入れると寿命が短く出て、予防で替えるほど次の予防が早まるという回り方になります。
| させないこと | 理由 |
|---|---|
| 寿命の数字の計算 | Apps Script で計算する。AIに数えさせると、同じ記録から週ごとに違う数字が出る |
| 交換するかどうかの判断 | 班長が加工の予定を見て決める |
| 発注の数の決定 | 購買課が納期と最小の発注単位を見て決める |
| メモに無い理由の推測 | 「たぶん摩耗だろう」で埋めると、母数がにごる |
1行目が、この構成の線引きです。 AIは読み分けだけ、数字は Apps Script です。見込みが外れたときに、どの記録をどう数えたかを後から追えるのは、計算が式で書かれているからです。
指示内容を固定する
あなたは機械加工の工場で、切削工具の交換の記録を整理する担当です。
交換の記録1件ごとに、理由のメモを読み、交換の理由の区分を1つ選んでください。
寿命の計算はしないでください。区分を選ぶだけです。
【区分】
- wear_life ...... 摩耗で替えた。加工面が荒れた、寸法が外れた、バリが出た、
音や振動が変わった、刃先が丸くなった など
- breakage ....... 欠けた、折れた、チッピングした
- setup_change ... 段取り替え・品番の切り替えで外した
- trial .......... 新しい工具・新しい切削条件を試すために替えた
- preventive ..... まだ使えるが、連休前・長時間の無人運転前などに予防で替えた
- unclear ........ メモから理由が読み取れない
【厳守事項】
- メモに書かれていることだけで選んでください。書かれていない理由を推測しないでください。
- 「交換」「新品」「替えた」とだけ書かれ、理由が無い場合は unclear にしてください。
wear_life を選ばないでください。
- 摩耗と欠けの両方が書かれている場合は breakage にし、note にその旨を書いてください。
- 「予定どおり」「定期」とだけ書かれている場合は preventive にしてください。
- evidence には、区分を選ぶ根拠にしたメモの文字列をそのまま写してください。
- 加工数・寿命・交換の時期について、何も書かないでください。
- 区分に迷った場合は unclear を選んでください。迷ったときに wear_life を選ばないでください。
【交換の記録】
{records}
(1件ごとに record_id、機械、工具番号、工具の品番、理由のメモ)
「理由が無い場合に wear_life を選ばない」を明記しないと、ほとんどが wear_life になります。 工具の交換の大半は摩耗なので、何も言わなければ多いほうに寄せます。寄せた1件ずつは当たっていることが多くても、外れた1件が寿命の母数に入ります。
「寿命の計算をしない」を冒頭と末尾の2か所に書いているのは、記録に加工数の数字が書かれていることがあるからです。 数字があると、AIは寿命を言い当てようとします。
出力形式を固定する
次の形のJSONで受け取ります。 スキーマは response_format の schema に渡し、label は enum で6つに限ります。
{
"results": [
{
"record_id": "R-2026-10-07-014",
"label": "wear_life | breakage | setup_change | trial | preventive | unclear",
"evidence": "仕上げ面にむしれ、寸法+0.02",
"note": ""
}
]
}
JSONで受ける1つ目の理由は、印をそのまま交換の記録のシートの列に書き戻せることです。 label は寿命の計算の絞り込みにそのまま使い、evidence は班長が印を直すときの根拠として同じ行に残します。
2つ目は、enum で印の種類を固定できることです。 自由文で返すと「摩耗(軽度)」「摩耗のため」のような書き方の揺れが出て、絞り込みから漏れます。
金曜の集計は、Apps Script が次の2つの一覧をシートに書き出します。
| 交換予定の一覧の列 | 中身 |
|---|---|
| 機械・工具番号・工具の品番 | どの工具か |
| 前回の交換からの加工数 | 日報から足し上げた数 |
| 寿命の目安(下側の値)・中央値 | 母数に入れた過去の寿命から |
| 交換まであと何日 | (下側の値 − 加工数)÷ 1日あたりの加工数 |
| 根拠の強さ | ok / few_samples(母数が5件未満) / wide_spread(ばらつきが大きい) |
| 班長の判断 | 空欄。班長が「替える/見送る/前倒し」を入れる |
| 手配の候補の列 | 中身 |
|---|---|
| 工具の品番 | どの工具か |
| 翌週の交換予定の本数 | 交換予定の一覧から数える |
| 在庫数・発注中の数 | 在庫表から |
| 不足の見込み | 予定の本数 − 在庫数 − 発注中の数(0未満は0) |
| 納期の目安日数 | 在庫表から。翌週に間に合わないものに印 |
下側の値を使うのは、中央値で見込むと半分の工具が見込みより先に寿命になるからです。 どこを下側とするか(下から4分の1、など)は、欠けが出たときの損失の大きさで工場ごとに決めます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| フォームの回答シート | SpreadsheetApp の読み取り | 交換の記録と日報を読む |
| 交換の記録のシート | label・evidence 列への書き込み | 読み分けの印を残す |
| Gemini API | UrlFetchApp.fetch() | 理由のメモの読み分け |
| 交換予定・手配の候補のシート | 新しいタブへの書き出し | 金曜の一覧 |
| Gmail | 一覧のシートへのリンクを送る | 班長と購買課へのお知らせ |
在庫表と発注の仕組みには書き込みません。 手配の候補は別のタブに出すだけで、発注の数を決めて在庫表の「発注中」を更新するのは購買課です。 書き込みを足すと、見込みの外れがそのまま発注になります。
一覧はメールに本文で貼らず、シートへのリンクだけを送ります。 班長が「班長の判断」の列を埋め、購買課がそれを見て発注する、という流れを同じシートの上で完結させるためです。
人が確認する
- 班長が交換予定の一覧を見る … 翌週の加工の予定と照らし、替える・見送る・前倒しを入れます。新しい品番、被削材が変わる加工、無人運転の長い日は、見込みより早めに替える側に寄せます
- 根拠の弱い工具を先に見る …
few_samplesとwide_spreadの付いた工具は、見込みの数字よりも班長の経験を優先します unclearの交換の記録を片づける … 書いた作業者に理由を聞いて、印を付け直します。週に数件のうちに片づけないと、母数の外にたまり続けます- 購買課が手配の候補を見る … 納期に間に合わない品番は、代替の品番か、他の機械からの融通を班長と相談します
目標は、1台5分です。 一覧を上から見て、判断の列を埋めるだけで済む状態にします。5分で終わらない週は、few_samples が多いか、工具の一覧が古くなっています。
例外に対処する
| 起きること | 対応 |
|---|---|
| 日報の機械・品番が工具の一覧に無い | 加工数を割り振らず、unmatched として班長へ。工具の一覧の更新漏れをまず疑う |
| 母数に入れた寿命が5件未満 | 見込みは出すが few_samples を付ける。班長の経験を優先する |
| 寿命のばらつきが大きい | wide_spread を付ける。条件の違う加工がまざっていないかを見る |
| 直近20稼働日に加工が無い | 「あと何日」を出さず、「加工予定なし」と書く |
| 交換の記録が二重に入った | 前処理で重複として外す。外した記録は消さずに印だけ付ける |
| Gemini API が応答しない・エラー | その晩は印を付けずに終わる。翌晩、印の無い行として自動で拾い直す |
| 6分の実行時間に近づく | 処理した行の位置をスクリプト プロパティに残し、次の実行で続きから始める |
| 在庫表に無い品番 | 手配の候補に「在庫表に無い」と書き、購買課に回す |
上の3行が、運用で毎週出るものです。 どれもAIの誤りではなく、工具の一覧と交換の記録の書き方の問題です。 判定の精度を上げるより、工具の一覧を最新に保つほうが見込みは当たります。
失敗した実行は、「Summary of failures for Apps Script」という件名のメールで知らされます。 宛先はトリガーを作ったアカウントなので、そのアカウントのメールを製造課の誰かが読むようにしておきます。
記録を残す
- 交換の記録の各行に、読み分けの印(
label)と根拠(evidence)、印を付けた日時と、人が直したかどうか - 金曜ごとの交換予定の一覧と手配の候補(タブを週ごとに残す)
- 班長の判断の列(替える/見送る/前倒し)と、実際に替えた日
- 見込みの「あと何日」と、実際の交換までの日数の差
- 使った寿命の母数の件数と、中央値・下側の値(品番・被削材ごと)
4つ目が、この構成を育てる記録です。 見込みより早く替えた工具が多い品番は、下側の値の取り方が甘いか、母数にまだ欠けがまざっています。3か月分たまると、どの品番の見込みが当てにならないかが分かります。
1つ目の「人が直したかどうか」も消さずに残します。 班長が unclear を wear_life に直した件数が多い週は、指示の書き方より、作業者のメモの書き方に手を入れる時期です。どちらを直すかを、この記録で決めます。
04実装レベルの3段階
半自動化で、1台20分が10分程度になります。 足し上げはなくなりますが、読み分けを人がまとめてやる手間と、在庫表との見比べが残ります。本格構成で5分になり、この段階が本記事の想定です。 半自動化を1か月回してから本格構成に進んでください。 交換予定の一覧を毎週見ていると、工具の一覧の抜けと、被削材の区分の付け間違いが先に見つかります。 そこを直さないまま手配の候補まで自動で出すと、購買課が当てにならない数字で発注することになります。
05工数削減シミュレーション
導入後 120件 × 5分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- マシニングセンタ・NC旋盤を数十台持ち、同じ品番をくり返し加工している金属部品の加工工場。工具の交換の記録と加工数の日報を Google フォームや Google スプレッドシートで残しているが、交換の時期は班長の経験で決めており、工具が切れてから倉庫に取りに行く、急ぎの発注が月に何度も出る、といった状態の場合。
- 一品物の試作が中心で、同じ工具を同じ条件で使い続けることが少ない場合(寿命の母数がたまりません)。工具の交換の記録が残っておらず、いつ何本目を使っているかが分からない場合。主軸の負荷や振動のセンサーで工具の状態を直接見る仕組みを、すでに入れている場合。
07最小構成で試す方法
- よく使う工具の品番を5つ選ぶ(エンドミル、ドリル、タップを最低1つずつ)
- その5品番について、過去6か月の交換の記録を抜き出す
- 理由のメモを手元のAIサービスの画面に貼り付け、「摩耗/欠け/段取り替え/試し/予防/不明 のどれかに分けてください。書かれていない理由は推測しないでください」と指示する
- 分けた結果のうち「摩耗」の記録について、前回の交換からの加工数を日報から手で足し上げる
- 品番ごとに中央値と下側の値を出し、班長の経験の寿命と見比べる
5番目で、班長の数字と大きく違う品番が出ることがあります。 そのときは、理由の読み分けが外れているか、被削材がまざっているかのどちらかです。 どちらなのかを確かめてから先へ進みます。
| 出てきた内容 | 判断 |
|---|---|
| 班長の数字に近い寿命が出た | Apps Script で毎週の集計に進む |
| 摩耗でない記録が「摩耗」に入った | 指示の書き方で直る。構成は有効 |
| 寿命のばらつきが大きすぎる | 被削材の区分か工具の一覧が先。 AIの問題ではない |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 理由の無い記録がすべて「摩耗」になる | 理由が無ければ unclear と指示に書く。迷ったときに wear_life を選ばせない |
| 欠けた工具が寿命に数えられ、交換が早まる | breakage を母数から外し、別に数える |
| 予防交換が寿命に数えられ、交換がさらに早まる | preventive を母数から外す |
| 記録を始める前の工具が、極端に長い寿命になる | 起点の無い1件目を母数から外す |
| ステンレスの多い機械だけ交換が遅れる | 被削材の区分ごとに寿命を分けて計算する |
| 日報の加工数が工具に割り振られない | 工具の一覧の更新漏れ。品番が増えたら一覧に足す |
| 中央値で見込んで半分が先に切れる | 下側の値で見込む |
| 集計が途中で止まった週だけ一覧が出ない | 読み分けと集計のトリガーを分け、続きから再開できるようにする |
| トリガーが班長の個人アカウントで動いている | 製造課の管理用のアカウントで作り直す |
| AIに寿命の数字まで出させてしまう | 寿命の計算は Apps Script の式。AIは読み分けだけ |
| 手配の候補がそのまま発注になる | 在庫表には書き込まない。発注は購買課が決める |
上の3行が、見込みが外れる原因のほとんどです。 どれも「母数に何を入れたか」で、数字の計算の問題ではありません。 見込みが外れたら、まず交換の記録の印を見直してください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 機械の稼働と加工数、工具の品番と在庫、交換の記録を書いた作業者の名前です。顧客名と部品の図面は扱いません。 部品の品番は日報にありますが、Gemini API に渡すのは交換の記録の理由のメモと工具の品番だけにします。
- AIに渡す範囲を、理由のメモに限る … 読み分けに加工数も部品の品番も要りません。渡さなければ、寿命の数字を言い当てようとすることもありません
- 有料の Gemini API で使う … Gemini API の規約では、無料の範囲では入力と出力が製品の改善に使われ、人が読むことがあるとされています。有料の範囲では、入力と出力を製品の改善に使わないとされています。 加工の実績を外へ出す以上、有料の範囲で使います
- APIキーをスクリプト プロパティに置き、編集権限を絞る … スクリプト プロパティはスクリプトの利用者全員で共有されます。スクリプトを編集できる人を製造課の管理者だけにします
- 見込みで交換を決めない … 一覧は「交換の候補」で、替えるかどうかは班長が決めます。 欠けた工具がそのまま加工を続けると、部品の不良だけでなく、機械と人に危険が及ぶことがあります。見込みより先に異常が出たら、見込みに関係なく替えることを現場のルールとして残します
- 作業者の評価に使わない … 交換の記録には記録した人の名前が残ります。「この人の担当の機械は欠けが多い」という読み方は、加工の条件の見直しにだけ使い、人の評価には使わないでください
誤りが起きた場合のリスクは、交換が遅れて不良や欠けが出ることと、交換が早すぎて工具の費用が増えることの2つです。 前者は欠けや予防交換を寿命に数えないことで、後者は下側の値の取り方で調整します。どちらも母数の読み分けから出ているので、そこは人が毎週見ます。
10まず何から始めるか
1週目:工具の一覧を10台分作る
加工数の多い10台について、工具番号・工具の品番・使う部品の品番・被削材の区分を書き出します。残りの20台は後で構いません。
2週目:過去の交換の記録を読み分ける
その10台の過去6か月の交換の記録を、手元のAIサービスで読み分けます。unclear になった記録を班長に見てもらい、どのくらいの割合で理由が書かれていないかを数えます。 多ければ、作業者に「何で替えたか」を一言書いてもらうお願いを先にします。
3週目:寿命を計算して、班長の数字と比べる
Apps Script で、品番・被削材ごとの中央値と下側の値を出します。班長の経験の寿命と大きく違う品番は、読み分けと被削材の区分を見直します。
4週目:金曜の交換予定の一覧を出す
集計のトリガーを組み、10台分の交換予定の一覧を出します。この時点では手配の候補は出さず、班長が一覧の当たり外れを見ます。
2か月目: 毎晩の読み分けを自動にし、残りの20台の工具の一覧を足します。3か月目以降: 在庫表とつないで手配の候補を出し、購買課が使い始めます。見込みの「あと何日」と実際の交換の日の差を品番ごとに見て、下側の値の取り方が工場に合った時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 時間主導型のトリガーが毎分から月1回までの間隔で動かせること。実行の時刻が少しずれることがあること。インストール型トリガーが作成した人のアカウントで動くこと。失敗が「Summary of failures for Apps Script」という件名のメールで知らされること | Google for Developers: Installable triggers | 2026-10-08 |
ClockTriggerBuilder の everyDays()・everyWeeks()・onWeekDay()・atHour()。atHour() には頻度の指定が要ること | Google for Developers: ClockTriggerBuilder | 2026-10-08 |
| 1回の実行が6分まで。Google Workspace でトリガーの合計実行時間が1日6時間、URL Fetch の呼び出しが1日10万回であること | Google for Developers: Quotas for Google Services | 2026-10-08 |
UrlFetchApp.fetch() の method・contentType・headers・payload・muteHttpExceptions | Google for Developers: UrlFetchApp | 2026-10-08 |
| スクリプト プロパティがスクリプトのすべての利用者で共有されること | Google for Developers: Properties Service | 2026-10-08 |
構造化出力が /v1beta/interactions に response_format(type・mime_type・schema)を渡す形であること。JSON Schema の一部(enum・required など)に対応し、大きすぎる・深すぎるスキーマは拒否されうること | Google AI for Developers: Structured output | 2026-10-08 |
| 無料の範囲では入力と出力が製品の改善に使われ人が読むことがあること。有料の範囲では製品の改善に使わないこと | Google AI for Developers: Gemini API Additional Terms of Service | 2026-10-08 |
工具の寿命の見込み方(どこを下側の値とするか、どの交換を母数に入れるか)は、工場の加工の条件に合わせて製造課で決めてください。 本記事は Google for Developers と Google AI for Developers で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0934)についてのご相談はこちらから。
