倉庫会社が荷主ごとの入出庫・在庫の記録と作業の備考から、月の保管料・荷役料・附帯作業料の請求明細を作り、料金表との違いと請求の漏れを拾う
倉庫管理システムから書き出した入出庫と在庫の記録で、荷主ごとの保管料・荷役料を Apps Script が料金表どおりに計算し、作業の備考と荷主からの作業依頼の文面からは、AI が附帯作業と急ぎの指図を抜き出します。そのうえで請求明細の下書きと、請求の漏れ・金額の違いの一覧を作ります。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- EC/商社/物流/製造
- 対象部門
- 物流/経理
- 対象業務
- 内容確認・チェック/書類作成
- 主な課題
- 入力作業が多い/属人化している/確認ミスが多い
- AIで行う処理
- 抽出
- 主な効果
- 入力漏れ削減/工数削減/機会損失防止
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 月初に、倉庫管理システムの請求の機能で、荷主ごとの請求の下書きを出す
- 料金表のスプレッドシートを開き、荷主ごとに単価・期の決め方・最低料金を確かめる
- 入出庫と在庫の記録を書き出し、保管料と荷役料を手元の表で計算し直して、下書きの金額と見比べる
- 前月の作業実績の備考を荷主で絞り込んで読み、ラベル貼りや仕分の作業を拾う
- 作業依頼の台帳と荷主からのメールを読み、急ぎの出庫や指図の取り消しを拾う
- 拾った作業の数量を現場のリーダーに確かめ、単価を掛けて請求の下書きに行を足す
- 請求の担当の上長が見て、荷主に請求書を送る
- 人現場のリーダーがこれまでどおり作業実績の備考を書き、受付の担当が荷主からの作業依頼を、受けた日時とともに作業依頼の台帳に貼る
- 自動毎週月曜の朝に Apps Script が動き、前週の備考と作業依頼の文面を Gemini API に渡して、附帯作業と急ぎの指図の候補を JSON で受け取る
- 人現場のリーダーが、前週の候補の一覧で数量と作業の有無を確かめ、印を付ける
- 人月初に、経理の担当が倉庫管理システムから入出庫・在庫・請求の下書きの CSV を書き出し、取り込み用のシートに貼る
- 自動月初の朝に Apps Script が動き、荷主ごとに保管料・荷役料を料金表のシートどおりに計算する
- 自動現場が確かめた附帯作業と急ぎの指図に単価を掛け、請求明細の下書きを作る
- 自動倉庫管理システムの請求の下書きと行ごとに見比べ、金額の違いと、片方にしか無い行を一覧にする
- 人経理の担当が違いと漏れの一覧を見て、請求の仕組みの下書きを直し、上長が見てから荷主に送る
各工程の詳しい説明を読む
- 月初に、倉庫管理システムの請求の機能で、荷主ごとの請求の下書きを出す
- 料金表のスプレッドシートを開き、荷主ごとに単価・期の決め方・最低料金を確かめる
- 入出庫と在庫の記録を書き出し、保管料と荷役料を手元の表で計算し直して、下書きの金額と見比べる
- 前月の作業実績の備考を荷主で絞り込んで読み、ラベル貼りや仕分の作業を拾う
- 作業依頼の台帳と荷主からのメールを読み、急ぎの出庫や指図の取り消しを拾う
- 拾った作業の数量を現場のリーダーに確かめ、単価を掛けて請求の下書きに行を足す
- 請求の担当の上長が見て、荷主に請求書を送る
(a)荷主ごとに決め方が違う。 3番の計算し直しは、荷主ごとの期の分け方と単価の単位を頭に入れていないとできません。60社の決め方を全部覚えているのは、ベテランの担当1人です。 その人が休む月は、締めが遅れます。
(b)附帯作業が漏れる。 4番の備考は、書き方が人によってばらばらです。「ラベル」「値札」「シール貼り」と同じ作業が違う言葉で書かれ、数量が書かれていないこともあります。 読み落とした作業は、そのまま請求に載りません。荷主から言われることは無いので、漏れたことにも気づきません。
(c)急ぎの指図の料金が取れない。 当日の午後に入った出庫の指示や、出荷の直前の取り消しは、作業の段取りを組み直す手間がかかります。料金表に急ぎの料金を決めている荷主でも、指示の時刻が作業依頼の台帳とメールにしか残っておらず、 請求のときに拾えていません。
(d)単価の改定が反映されない。 覚書で単価を上げたのに登録が遅れ、旧い単価のまま何か月も請求していたことがありました。
- 【人】 現場のリーダーがこれまでどおり作業実績の備考を書き、受付の担当が荷主からの作業依頼を、受けた日時とともに作業依頼の台帳に貼る
- 【自動】 毎週月曜の朝に Apps Script が動き、前週の備考と作業依頼の文面を Gemini API に渡して、附帯作業と急ぎの指図の候補を JSON で受け取る
- 【人】 現場のリーダーが、前週の候補の一覧で数量と作業の有無を確かめ、印を付ける
- 【人】 月初に、経理の担当が倉庫管理システムから入出庫・在庫・請求の下書きの CSV を書き出し、取り込み用のシートに貼る
- 【自動】 月初の朝に Apps Script が動き、荷主ごとに保管料・荷役料を料金表のシートどおりに計算する
- 【自動】 現場が確かめた附帯作業と急ぎの指図に単価を掛け、請求明細の下書きを作る
- 【自動】 倉庫管理システムの請求の下書きと行ごとに見比べ、金額の違いと、片方にしか無い行を一覧にする
- 【人】 経理の担当が違いと漏れの一覧を見て、請求の仕組みの下書きを直し、上長が見てから荷主に送る
2番目と3番目を週ごとに回しているのが、この設計の要です。 附帯作業の数量は、作業した週のうちなら現場のリーダーが覚えています。 月初にまとめて聞くと、「1,200枚だったか1,500枚だったか」が分からなくなります。抜き出しを週ごとに行い、確かめるのも週ごとにします。
5番目の計算を AI に任せないのは、請求が金額の約束だからです。 期の区切り方も、最低料金も、改定日からの単価の切り替えも、料金表のシートに書いた決まりのとおりにスクリプトが計算します。 AI に入出庫の記録を渡すことはありません。
02今回想定するシステム構成
作業実績の備考(倉庫管理システム → CSV)+ 作業依頼の台帳(スプレッドシート) │【トリガー1】毎週月曜の朝 ▼ Google Apps Script ── 前週の備考と依頼の文面を荷主ごとにまとめる ▼ Gemini API ── 附帯作業・急ぎの指図の候補を、根拠の文付きの JSON で返す ▼ Google Apps Script ── 根拠の文を原文と突き合わせ、候補の一覧に書く ▼ 【人】現場のリーダーが数量と作業の有無を確かめる 入出庫・在庫・請求の下書き(倉庫管理システム → CSV) │【トリガー2】毎月3日の朝(取り込み済みを確かめてから) ▼ Google Apps Script ├──▶ 料金表のシートどおりに保管料・荷役料を計算 ├──▶ 確かめた附帯作業・急ぎの指図に単価を掛ける ├──▶ 請求の下書きと行ごとに見比べる ▼ 違いと漏れの一覧 ──▶【人】経理が請求の仕組みを直し、上長が見て送る
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Make |
| 生成AI | Gemini API(Interactions API、構造化出力) | Claude API、OpenAI API |
| 保管 | Google スプレッドシート(取り込み用、料金表、作業依頼の台帳、候補の一覧、違いと漏れの一覧、処理ログ) | - |
| 倉庫の記録 | 倉庫管理システム(CSV の書き出しのみ) | - |
新しく足すのは、Apps Script と、料金表・候補の一覧・違いと漏れの一覧・処理ログのシートだけです。 倉庫管理システムには書き込みません。請求の下書きを直すのは、これまでどおり経理の担当が請求の仕組みの画面で行います。
附帯作業の請求には、標準約款の裏付けがあります。 国土交通省の資料では、2026年4月1日施行の標準倉庫寄託約款の改正で第4条(附帯業務等)が新設され、搬出入車両内での手荷役、仕分、全数検品・開梱検品及びラベル貼りその他の、保管と庫入れ・庫出しに附帯する業務について、別途定める料金または実際に要した費用を請求できるとされています。同じ条の第2項では、十分な時間的余裕のない入出庫の指図と、指図の取り消しが発生した場合にも、別途費用を請求できるとされています。資料は、附帯作業が無償で求められることや、当日の入出庫の求めが荷待ちの時間を増やすことを背景に挙げています。附帯業務等の料金を定めたときは、その日から30日以内に届け出ることも、手続きとして示されています。
この構成が拾うのは、まさにこの第4条の2つの項です。 料金を決めてあっても、作業の記録と結び付かなければ請求に載りません。
03どうやって実装するのか
処理の起点を決める
トリガーは2つ置きます。 1つ目は、毎週月曜の朝6時台に動く時間主導型のトリガーで、前週の月曜から日曜までの備考と作業依頼の文面から候補を抜き出します。2つ目は、毎月3日の朝に動く時間主導型のトリガーで、前月分の計算と見比べを行います。時間主導型のトリガーは毎分から月に1回までの間隔で動かせ、公式のページでは、9時に設定すると9時から10時のあいだのどこかで動くとされています。
月次の処理は、日付だけを条件にしません。 CSV の書き出しと取り込みは経理の担当の作業です。スクリプトは最初に取り込み用のシートの「状態」の欄を見て、前月分の3つの CSV が「取込済み」になっていなければ、何も計算せずに担当へ知らせて止まります。 3日から7日まで毎朝見に行き、取込済みになった日に動きます。半端な取り込みのまま計算すると、在庫の数が欠けたまま保管料が出てしまうからです。
インストール型のトリガーは、作った人のアカウントで動きます。 公式のページにそう書かれています。トリガーは経理課の担当者個人ではなく、請求の業務用の共用のアカウントで作ります。 トリガーが失敗すると失敗のまとめのメールが届くので、その宛先も共用のアカウントになります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 入出庫の明細 | 日付、荷主、品番、入庫・出庫の区分、数量(個・ケース・パレット)、重さ・容積 | 倉庫管理システムの CSV |
| 在庫 | 日付ごとの荷主・品番の在庫の数 | 倉庫管理システムの CSV |
| 請求の下書き | 荷主、項目、数量、単価、金額 | 倉庫管理システムの請求の CSV |
| 作業実績の備考 | 日付、荷主、作業のコード(あれば)、備考の文 | 倉庫管理システムの CSV |
| 作業依頼の台帳 | 受けた日時、荷主、依頼の文面、作業の予定日 | 作業依頼の台帳のシート |
| 料金表 | 荷主ごとの保管料の単位と単価、期の分け方、荷役料の単位と単価、附帯作業の単価、急ぎの指図の条件と料金、最低料金、改定日 | 料金表のシート |
質を決めるのは、料金表のシートです。 寄託の契約と覚書に書かれた決まりを、荷主ごとに1つの表の形にそろえることが、この構成の最初の作業です。決まりが表になっていないと、スクリプトは計算できず、AI が抜き出した作業に単価を掛けることもできません。
改定日の扱いは、料金表の行で持たせます。 改定のたびに行を足し、適用の始まりを書きます。国土交通省が公示した標準冷蔵倉庫寄託約款(乙)では、第52条で料金を変更したときは、変更された日の属する期から新料金で請求するとされています。自社の約款と荷主との契約で同じ決まりを使っているなら、 スクリプトは改定日の属する期から新しい単価を使います。
作業依頼の台帳の「受けた日時」が、急ぎの指図を見分ける材料です。 料金表に「前日の15時より後に受けた当日の出庫」のような条件があれば、受けた日時と作業の予定日をスクリプトが比べて判定します。 AI には時刻の比較をさせません。
データの取得方法を決める
| 取るもの | どう取るか | 何に使うか |
|---|---|---|
| 前週の備考 | 作業実績の CSV を毎週取り込み用のシートに貼り、日付で絞る | 附帯作業の候補の抜き出し |
| 前週の作業依頼 | 作業依頼の台帳を受けた日時で絞る | 急ぎの指図・取り消しの候補 |
| 前月の入出庫と在庫 | 取り込み用のシートを一度に読み、荷主・品番でまとめる | 保管料・荷役料の計算 |
| 請求の下書き | 取り込み用のシートを荷主と項目で引く | 行ごとの見比べ |
| 料金表 | 料金表のシートを荷主と適用の期間で引く | 単価と決まり |
CSV は経理の担当がシートに貼ります。 倉庫管理システムと直接つなぐ方法は製品ごとに違い、外から取れないものも多いので、書き出しを自動にしようとせず、貼る作業を月に1回と週に1回に集めます。 作業実績の備考だけは週ごとに要るので、週の書き出しは現場の事務の担当に頼みます。
シートは範囲を一度に読み、スクリプトの中で荷主ごとにまとめます。 入出庫の明細は月に数万行になるので、1行ずつ読むと1回の実行時間に収まりません。
AIへ渡す前に整形する
- 期間と件数の確認 … 入出庫と在庫の日付が前月の範囲にそろっているか、件数が前月から極端に変わっていないかを見ます
- 荷主のコードの照合 … CSV の荷主のコードが料金表のシートにすべてあるか。無い荷主は計算せず、一覧に「料金表なし」と出します
- 期ごとの数の計算 … 料金表の期の分け方に沿って、期ごとに前の期の末の在庫とその期の入庫を数え、単位(個・ケース・パレット・重さ)に合わせます
- 単価の選び方 … 改定日の属する期から新しい単価を使います
- 備考の整え … 備考と依頼の文面から、人の名前、電話番号、メールアドレスを伏せます。荷主は名前ではなく荷主のコードで渡します
- 作業のコード付きの行を分ける … 作業のコードが付いた行は、倉庫管理システムの請求に載っているはずなので、抜き出しには渡さず、見比べのほうで使います
- 文面の並べ方 … 1件ずつ「番号|日付|荷主のコード|種類(備考・依頼)|文」の1行にし、荷主ごとにまとめます
6番目で、AI に渡す量を絞ります。 抜き出しが要るのは、コードが付かずに文でしか残っていない作業だけです。コードの付いた作業まで渡すと、同じ作業が二重に候補に出ます。
3番目の単位の合わせ方は、荷主ごとの決まりの中でいちばん間違えやすいところです。 ケースで数える荷主の在庫が、倉庫管理システムでは個で入っていることがあります。入り数は品番の台帳から取り、入り数が無い品番は計算せずに一覧に出します。
AIに処理させる
させるのは、備考と作業依頼の文面から、請求の対象になりうる作業を項目として抜き出すことです。
| 抜き出すもの | 中身 | 例 |
|---|---|---|
| 作業の種類 | ラベル貼り、仕分、全数検品、開梱検品、手荷役、その他 | 「値札シール貼り」→ラベル貼り |
| 数量の書かれ方 | 文に書かれた数量と単位を、書かれたとおりに | 「約1,200枚」「パレット3枚分」 |
| 日付 | 作業の日、または依頼の作業予定日 | - |
| 指図の変更 | 当日の出庫の依頼、出庫の取り消し、入庫の日の変更 | 「本日16時までに出荷お願いします」 |
| 根拠の文 | 抜き出しの元になった部分を原文のまま | - |
数量は、書かれたとおりに写させます。 「約1,200枚」を1200に直させません。「約」が付いた数量は、現場のリーダーが確かめる対象で、その印を消さないためです。数として読める形にするのはスクリプトで、「約」「〜分」「程度」が付いたものは、確かめが済むまで請求の計算に使いません。
指図の変更は、時刻を判定させません。 「本日16時までに」という依頼の文面を抜き出させるだけで、それが料金表の「急ぎ」の条件に当たるかは、台帳の受けた日時と予定日からスクリプトが決めます。
| させないこと | 理由 |
|---|---|
| 金額を計算する・単価を当てる | 請求の金額は料金表のシートとスクリプトで出す |
| 数量を推し量る・丸める | 書かれた数量だけ。無ければ空にする |
| 急ぎの料金に当たるかを判断する | 時刻と条件はスクリプトが比べる |
| 請求すべきかを決める | 荷主との取り決めの解釈。経理と営業が決める |
| 別の言葉の作業を勝手に束ねる | 種類の対応表に無いものは「その他」にする |
| 根拠の文を言い換える | 原文と突き合わせて確かめるため |
2行目がいちばん起きやすい失敗です。 「パレット3枚分のラベル貼り」と書かれていると、AI はパレットの入り数から枚数を出そうとします。その瞬間、現場が書いていない数量が請求に入ります。 数量が文に無ければ空にし、現場に聞きます。
指示内容を固定する
あなたは営業倉庫の経理課で、荷主への請求の準備を手伝う担当です。
以下は、1つの荷主の1週間分の「作業実績の備考」と「作業依頼の文面」です。
この文だけを使って、請求の対象になりうる作業を1件ずつ抜き出してください。
【作業の種類】
labeling(ラベル・値札・シール貼り)/sorting(仕分)/
full_inspection(全数検品)/unpack_inspection(開梱検品)/
hand_unloading(車両での手荷役)/order_change(当日の出庫依頼・
出庫の取り消し・入出庫の日の変更)/other(上のどれにも当たらない作業)
【書き方】
- items:作業ごとに1件。同じ作業が備考と依頼の両方に出ていれば、
1件にまとめ、source_ids に両方の番号を入れる。
- quantity_text:文に書かれた数量と単位を、書かれたとおりに写す。
「約」「程度」「〜分」も含めて写す。数量が無ければ空にする。
- work_date:作業の日、または依頼された作業の予定日。書かれていなければ空。
- evidence:抜き出しの元になった部分を、原文のまま写す。
【厳守事項】
- 金額・単価を書かないでください。計算をしないでください。
- 数量を推し量らないでください。入り数から枚数を出す、
「約」を外す、丸めることをしないでください。
- 当日の依頼や取り消しが、急ぎの料金に当たるかを判断しないでください。
order_change として抜き出すだけにしてください。
- 請求すべきかどうかを書かないでください。
- 作業の種類に迷ったら other にしてください。
- 保管や通常の入庫・出庫そのもの(附帯の作業を伴わないもの)は抜き出さないでください。
- 人の名前、連絡先を書かないでください。
【荷主のコード】{shipper_code}
【文の一覧】{notes}
最後から2つ目の「通常の入庫・出庫は抜き出さない」が、候補の数を左右します。 備考には「入庫 30ケース 完了」のような記録が多く、何も言わなければ全部を作業として抜き出します。 第4条が別の料金を認めているのは附帯する業務なので、通常の業務は候補から外すことを明記します。
出力形式を固定する
Gemini API の Interactions API で、構造化出力を使って次の形の JSON を受け取ります。 公式のページでは、/v1beta/interactions に response_format で mime_type を application/json にし、schema を渡す書き方が示されています。
{
"shipper_code": "SH-024",
"week_start": "2026-10-19",
"items": [
{ "work_type": "labeling",
"quantity_text": "約1,200枚",
"work_date": "2026-10-21",
"source_ids": ["N-1021-07", "Q-1020-03"],
"evidence": "値札シール貼り 約1,200枚" }
],
"needs_review": ""
}
1つ目の理由は、根拠をスクリプトで検算できることです。
| 検査 | 合わないとき |
|---|---|
source_ids がすべて、その荷主の前週の文の番号にある | 確認待ち(存在しない、または別の荷主の番号) |
evidence が、その番号の原文にそのまま含まれる | 確認待ち(言い換え) |
quantity_text が、evidence の中にそのまま含まれる | 確認待ち(数量の作り込み) |
work_type が決めた7つのどれか | 確認待ち |
| 作業のコード付きの行と同じ日・同じ種類でない | 二重の候補として印を付ける |
3行目が、数量を守る検査です。 写したはずの数量が根拠の文に無ければ、AI が計算するか推し量ったということです。文字列の一致で見るので、作り込まれた数量は必ず見つかります。
2つ目の理由は、現場が確かめる一覧にそのまま並べられることです。 種類・日付・書かれた数量・根拠の文が並ぶので、現場のリーダーは、確かめた数量を隣の列に書くだけで済みます。
公式のページでは、出力の JSON は構文として正しくても値はアプリケーションの側で必ず確かめることとされ、制約の中には制約付きの生成の仕組みで守られないものがあるとも書かれています。列挙型の値も検査で確かめ直します。 スキーマが大きすぎたり深すぎたりすると400のエラーで断られることがあるとされているので、スキーマは上の形の1段の入れ子にとどめます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 取り込み用のシート | Apps Script の読み取り | 入出庫・在庫・請求の下書き・備考の CSV |
| 作業依頼の台帳・料金表 | Apps Script の読み取り | 依頼の文面と受けた日時、決まりと単価 |
| Gemini API | UrlFetchApp.fetch | 荷主ごとの候補を受け取る |
| 候補の一覧 | Apps Script の書き込み | 現場のリーダーが確かめる |
| 違いと漏れの一覧 | Apps Script の書き込み | 経理の担当が請求の仕組みを直す |
API の呼び出しでは muteHttpExceptions を true にします。 公式のページでは、これを true にすると失敗の応答でも例外を投げず、応答を返すとされています。応答のコードを見て、混み合いなら時間をおいてやり直し、続けて失敗した荷主は「候補なし」ではなく「抜き出し失敗」として一覧に出します。 候補が無いことと、抜き出せなかったことを混ぜると、漏れを探す仕組みそのものが漏れます。API キーはスクリプトのプロパティに置きます。公式のページでは、スクリプトのプロパティはそのスクリプトの利用者全員で共有され、スクリプトの間では共有されないとされています。
Interactions API は、既定でやり取りを保存します。 公式のページでは、既定で store=true となり、有料の利用では55日、無料の利用では1日保たれるとされ、store=false を指定すれば保存しないとされています。この構成は1回ごとに完結するので、リクエストに store=false を付けます。
人が確認する
確認は2か所で、別の人が行います。
- 週ごと:現場のリーダーが候補を確かめる … 候補の一覧で、作業が本当にあったか、数量はいくつか。「約」の付いた数量は確かめた数を隣の列に書き、確かめの印を付けます
- 月ごと:経理の担当が違いと漏れの一覧を見る … 上から「料金表なし」「抜き出し失敗」「請求の下書きに無い行(漏れ)」「金額の違い」「下書きにしか無い行」の順に並びます
- 漏れの行は、料金表の決まりを確かめてから足す … 附帯作業の料金を決めていない荷主の作業は、請求に足さず、営業の担当に回します
- 金額の違いは、どちらが正しいかを決める … 改定の反映漏れなら、倉庫管理システムの単価の登録も直します
- 上長が見てから送る … 送るのはこれまでどおり請求の仕組みから
3番目を省かないでください。 作業があったことと、その作業に料金を請求できることは別の話です。料金を決めていない作業をいきなり請求すると、荷主との関係を損ねます。 そうした作業が毎月出るなら、料金を決めて届け出る話として営業に渡します。
1件12分を目安にします。 計算の違いが無い荷主は数分で終わり、漏れや改定のある荷主に時間を使います。
例外に対処する
| 起きること | 対応 |
|---|---|
| 前月分の CSV が取込済みになっていない | 計算せず止まり、担当へ知らせる |
| 料金表に無い荷主 | 計算せず「料金表なし」と出す。推測の単価を当てない |
| 品番の入り数が無い | その品番の保管料を計算せず一覧に出す |
| 数量に「約」が付いたまま確かめが無い | 請求の計算に使わず、月次の一覧に「現場の確かめ待ち」と出す |
| 備考の作業に料金の決まりが無い | 請求に足さず、営業の担当に回す |
| 同じ作業がコード付きの行と候補の両方にある | 候補に「二重」の印。コード付きの行を優先 |
| API が応答しない・混み合い | やり直し、続けて失敗したら「抜き出し失敗」と出す |
| 1回の実行が時間切れになる | 処理済みの印を見て、続きを数分後のトリガーで作る |
最後の行は、Apps Script の上限から来ます。 公式の上限の表では、スクリプトの実行時間は1回あたり6分で、トリガーで動かした合計の実行時間は Google Workspace のアカウントで1日6時間です。60社分の計算は入出庫の明細が多い荷主で重くなるので、10社ずつ計算し、残りは1回きりのトリガーで続きを作ります。 トリガーはユーザー・スクリプトごとに20個までとされているので、続きのトリガーは動いたら消します。
記録を残す
- 実行の日時、対象の週または月、荷主ごとの取り込みの件数
- 荷主ごとの計算の内訳(期ごとの数、単位、使った単価と料金表の行、最低料金の当てはめ)
- AI に渡した文の一覧(伏せ字の後)と、AI が返した JSON の全文
- 検査の結果と、確認待ちにした理由
- 現場のリーダーが確かめた数量と、確かめた日・人
- 経理の担当が直した請求の行と、その理由
2つ目の計算の内訳が、荷主からの問い合わせへの答えになります。 「今月の保管料が高い」と言われたとき、どの期の、どの在庫の数に、どの単価を掛けたかをそのまま示せます。
最後の行は、同じ違いが毎月出る荷主の登録を直す材料になります。
04実装レベルの3段階
最小構成では60社をさばけません。 計算がまだ手作業なので、漏れの大きさを確かめるための段階です。 本記事の想定は半自動化です。 現場は週に一度候補を確かめ、経理は月初に違いと漏れの一覧から請求を直します。1件40分が12分になるのはこの段階です。 差が大きいのは、①の計算し直しがスクリプトに、②③の拾い出しが AI の抜き出しと現場の確かめに移るからです。 本格構成は、漏れの多い作業の種類が一覧で分かってから進めます。
05工数削減シミュレーション
導入後 60件 × 12分 ÷ 60 = 12 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 数十社の荷主から貨物を預かる営業倉庫で、荷主ごとに保管料・荷役料の単価や期の決め方が違い、月末に経理の担当が倉庫管理システムの記録と料金表を見比べて請求明細を作っている場合。ラベル貼りや仕分、検品などの附帯作業や、当日の急ぎの出庫が作業実績の備考や荷主からのメールにしか残っておらず、請求に載せ忘れが出ている場合。Google Workspace を使っている場合。
- 荷主が数社で、料金が月額の定額にまとまっている場合。倉庫管理システムの請求の機能に附帯作業の単価まで登録でき、作業の入力のときに必ず作業のコードが付く運用になっている場合。料金表そのものが荷主ごとに書面で決まっておらず、計算の正しさを照らす先が無い場合。なお、料金の改定の交渉や、荷主との契約の解釈はこの構成の対象外です。
07最小構成で試す方法
- 荷主を5社選ぶ(附帯作業の多い荷主・急ぎの出庫が多い荷主・料金の決め方が特殊な荷主を混ぜる)
- その5社の前月の作業実績の備考と作業依頼の文面を書き出し、人の名前を伏せる
- 手元の Gemini の画面に、第7章のプロンプトと1社ずつの文を貼る
- 出てきた候補を、前月に経理の担当が手で拾った作業と並べる
- 手で拾えていなかった候補について、現場のリーダーに作業が本当にあったかを確かめる
5番目が、この試しのいちばんの目的です。 手で拾えなかった作業が本当にあったなら、それがそのまま毎月の漏れの大きさです。 計算の自動化より先に、漏れの大きさを知ってください。
| 出てきた内容 | 判断 |
|---|---|
| 手で拾った作業をすべて拾い、さらに漏れが見つかった | スクリプトで週ごとの抜き出しをつなぐ段階に進む |
| 通常の入出庫まで候補に出る | 指示の書き方で直る。構成は有効 |
| 数量を計算して書く | 写す指示を強め、文字列の一致の検査を足す |
| 備考に数量がほとんど書かれていない | 備考の書き方を先に決める。 AI の問題ではない |
4行目が出たら、「作業・数量・単位」の順で書く決まりを先に作ります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AI が入り数から数量を計算する | 書かれたとおりに写させ、根拠の文との一致で検査する |
| 通常の入出庫まで候補に出る | 附帯の作業だけを抜き出すと明記する |
| 「候補なし」と「抜き出し失敗」が混ざる | 失敗は別の印で一覧に出す |
| 料金の決まりが無い作業まで請求する | 請求に足さず営業に回す |
| 急ぎの料金の判定を AI に任せる | 受けた日時と予定日をスクリプトが比べる |
| 改定の単価が反映されない | 料金表に改定日の行を持ち、改定日の属する期から切り替える |
| ケースと個の単位が食い違う | 品番の入り数で合わせ、無ければ計算しない |
| 半端な取り込みのまま計算する | 「取込済み」を確かめてから動く |
| コード付きの作業が二重に請求される | コード付きの行は抜き出しに渡さず、二重の印を付ける |
| 担当者のアカウントでトリガーを作る | 作成者のアカウントで動く。共用のアカウントで作る |
上の2行が、この構成の失敗のほとんどです。 どちらも「現場が書いていない作業や数量が請求に入る」失敗で、数量を写させ、文字列の一致で確かめ、附帯の作業だけに絞れば、起きようがありません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 荷主の名前と取引の条件(単価・最低料金)、預かり品の品番と数量の動き、現場の備考に書かれた作業者の名前、荷主の担当者の名前と連絡先です。
- 外部へ渡す範囲を、抜き出しに必要なものまでに限る … Gemini API に渡すのは、荷主のコードと、伏せ字を済ませた備考と依頼の文面だけです。料金表、単価、入出庫の明細は渡しません
- 有料の利用で使う … Gemini API の利用規約では、有料のサービスではプロンプトと応答を製品の改善に使わないとされ、無料のサービスでは機密や個人の情報を送らないようにとされています。取引の情報を扱うので、有料の利用を前提にします
- 保存を止める … Interactions API は既定でやり取りを保存するとされているので、
store=falseを付けます - 請求の判断を代替しない … 請求するかどうか、料金を決めていない作業をどう扱うかは、経理と営業が荷主との取り決めに沿って決めます
- 荷主どうしの情報を混ぜない … 抜き出しは1社ごとに呼び出し、ほかの荷主の文を同じ呼び出しに入れません
- API キーと料金表の権限を絞る … API キーはスクリプトのプロパティに置き、スクリプトと料金表のシートの編集権限を経理課の担当に限ります
誤りが起きた場合のリスクは、行っていない作業を請求することと、行った作業を請求し損ねることの2つです。前者は根拠の文と数量の一致の検査と現場の確かめで、後者は「抜き出し失敗」を別に出すことと週ごとの抜き出しで防ぎ、最後に経理の担当と上長が見てから送ります。
10まず何から始めるか
1週目:料金表をそろえる
寄託の契約と覚書から、荷主ごとの期の分け方・単位・単価・最低料金・改定日を1つの表の形に起こします。請求額の大きい上位20社から始めます。
2週目:5社で試す
5社の前月の備考と依頼の文面を伏せて、手元の Gemini の画面で候補を抜き出させます。手で拾えていなかった作業が本当にあったかを、現場のリーダーと確かめます。
3週目:計算と見比べをスクリプトにする
Apps Script で取り込み用のシートを読み、料金表どおりの保管料・荷役料の計算と、請求の下書きとの見比べまでを作ります。この時点では抜き出しをつながず、計算の違いだけを経理の担当が前月の請求と見比べます。
4週目:週ごとの抜き出しをつなぐ
API で候補を抜き出し、根拠の文と数量の検査を足して、現場のリーダーが確かめる候補の一覧を作ります。最初の月は5社だけで回します。
2か月目: 60社に広げ、確かめた附帯作業に単価を掛けて月次の請求明細の下書きに入れます。3か月目以降: 漏れとして出た作業の種類を数え、作業のコードの付け方を現場と見直します。60社の請求明細が、月初の数日のうちに、違いと漏れを片づけた状態で送れるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 標準倉庫寄託約款が2026年4月1日施行で改正され、第4条(附帯業務等)で、搬出入車両内での手荷役、仕分、全数検品・開梱検品及びラベル貼りその他の附帯する業務に別途の料金または実際に要した費用を請求でき、十分な時間的余裕のない入出庫の指図と指図の取り消しにも別途費用を請求できるとされたこと。附帯業務等の料金を定めたときは30日以内に届け出ること | 国土交通省: 標準倉庫寄託約款(令和8年4月1日施行)改正の内容について | 2026-10-26 |
| 標準冷蔵倉庫寄託約款(乙)第52条で、料金を変更したときは、変更された日の属する期から新料金により請求するとされていること | 国土交通省: 標準冷蔵倉庫寄託約款(乙)(令和8年国土交通省告示第352号) | 2026-10-26 |
| 時間主導型のトリガーが毎分から月1回まで動かせ、時刻がずれうること。インストール型のトリガーが作成者のアカウントで動くこと。失敗時にまとめのメールが届くこと | Google: Installable triggers | 2026-10-26 |
| 実行時間が1回6分、トリガーの合計実行時間が Workspace で1日6時間、トリガーがユーザー・スクリプトごとに20個であること | Google: Quotas for Google Services | 2026-10-26 |
muteHttpExceptions を true にすると、失敗の応答でも例外を投げず応答を返すこと | Google: Class UrlFetchApp | 2026-10-26 |
| スクリプトのプロパティがスクリプトの利用者全員で共有され、スクリプトの間では共有されないこと | Google: Properties Service | 2026-10-26 |
/v1beta/interactions で response_format に mime_type と schema を渡すこと。値はアプリケーションの側で確かめること。守られない制約があること。大きすぎる・深すぎるスキーマは400で断られうること | Google: Structured output(Gemini API) | 2026-10-26 |
Interactions API が既定でやり取りを保存し(store=true)、有料で55日・無料で1日保つこと。store=false で保存しないこと | Google: Interactions API | 2026-10-26 |
| 有料のサービスではプロンプトと応答を製品の改善に使わないこと。無料のサービスには機密や個人の情報を送らないこと | Google: Gemini API Additional Terms of Service | 2026-10-26 |
自社の倉庫寄託約款が標準約款と同じかどうか、附帯業務等の料金の届出が済んでいるかは、自社で確かめてください。 本記事は国土交通省の資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1829)についてのご相談はこちらから。
