社内の購入依頼の品目と用途から費目・勘定科目・購買の区分の候補を付け、経理の計上と購買の手配の前の仕分けを済ませる
社内の購入依頼が届くたびに、品目と用途の記載から費目・勘定科目・購買の区分の候補を付けます。金額の基準に当たるものと記載の足りないものに印を付け、購買担当と経理担当が候補を確かめるだけで仕分けが終わるようにします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate/Python
- 対象業界
- IT・SaaS/商社/広告/製造
- 対象部門
- 経理/購買
- 対象業務
- 内容確認・チェック/分類・仕分け
- 主な課題
- 入力作業が多い/属人化している/確認ミスが多い
- AIで行う処理
- 分類
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 社員がフォームで購入依頼を出し、部門長が台帳の承認の列に印を付ける
- 購買担当が台帳を開き、品目と用途を読んで手配の方法を決める
- ソフトウェアや外部サービスなら情報システム部へ、金額が大きければ固定資産の申請へ回す
- 記載が足りなければ(数量がない、用途が「業務用」だけなど)、依頼者にチャットで聞く
- 購買担当が手配する
- 請求書や領収書が届いたら、経理担当が台帳の依頼と突き合わせ、勘定科目を決めて計上する
- 月末に、科目の付け方がばらついていないかを経理担当が見直し、付け替える
- 人社員がフォームで購入依頼を出す
- 自動フォームの送信をきっかけにスクリプトが動き、依頼の行を読む
- 自動金額と数量から1単位あたりの金額を計算し、金額の基準に当たるかを判定する
- 自動費目表と、似た品目の過去の確定済みの依頼を引く
- 自動Claude API に、費目・勘定科目・購買の区分の候補と、記載の不足を返させる
- 自動返ってきた候補が費目表と区分の一覧の中にあるかを確かめ、台帳の候補の列に書く
- 自動記載の不足があれば、依頼者に聞く内容の下書きを台帳に書き、購買のスペースに知らせる
- 人購買担当が、部門長の承認が済んだ依頼について購買の区分の候補を確かめ、手配する
- 人経理担当が、計上のときに勘定科目の候補を確かめ、確定した科目を台帳に書く
- 自動確定した区分と科目を、次の依頼の参考の記録に加える
各工程の詳しい説明を読む
- 社員がフォームで購入依頼を出し、部門長が台帳の承認の列に印を付ける
- 購買担当が台帳を開き、品目と用途を読んで手配の方法を決める
- ソフトウェアや外部サービスなら情報システム部へ、金額が大きければ固定資産の申請へ回す
- 記載が足りなければ(数量がない、用途が「業務用」だけなど)、依頼者にチャットで聞く
- 購買担当が手配する
- 請求書や領収書が届いたら、経理担当が台帳の依頼と突き合わせ、勘定科目を決めて計上する
- 月末に、科目の付け方がばらついていないかを経理担当が見直し、付け替える
(a)依頼の文面を2回読んでいる。 購買担当は手配の方法を決めるために、経理担当は科目を決めるために、同じ依頼を別々のタイミングで読んでいます。 どちらも「これは何に使うものか」を読み取る作業で、中身はほとんど同じです。
(b)科目が担当者と時期で分かれる。 技術書は「新聞図書費」か「研修費」か、開発用のクラウドサービスは「通信費」か「支払手数料」か。費目表には書いてあっても、迷う品目は担当者の記憶で決まります。 月末の見直しで付け替える件数が、毎月数十件あります。
(c)金額の基準を見落とす。 1台9万円のモニターを3台、という依頼は、1単位で見れば10万円未満です。一方、テーブルと椅子のように組で取引されるものは、組で判定が要ります。 依頼の金額欄が合計しか書かれていないと、購買担当は単価を計算し直す必要があり、急いでいると見落とします。
(d)記載の不足が手配の後に分かる。 用途が「業務用」としか書かれていない依頼は、手配の時点では困りませんが、経理が科目を決めるときに初めて困ります。 そのときには購入は終わっていて、依頼者に聞き直すのは1か月後です。
- 【人】 社員がフォームで購入依頼を出す
- 【自動】 フォームの送信をきっかけにスクリプトが動き、依頼の行を読む
- 【自動】 金額と数量から1単位あたりの金額を計算し、金額の基準に当たるかを判定する
- 【自動】 費目表と、似た品目の過去の確定済みの依頼を引く
- 【自動】 Claude API に、費目・勘定科目・購買の区分の候補と、記載の不足を返させる
- 【自動】 返ってきた候補が費目表と区分の一覧の中にあるかを確かめ、台帳の候補の列に書く
- 【自動】 記載の不足があれば、依頼者に聞く内容の下書きを台帳に書き、購買のスペースに知らせる
- 【人】 購買担当が、部門長の承認が済んだ依頼について購買の区分の候補を確かめ、手配する
- 【人】 経理担当が、計上のときに勘定科目の候補を確かめ、確定した科目を台帳に書く
- 【自動】 確定した区分と科目を、次の依頼の参考の記録に加える
8番目と9番目が、人の仕事として残る部分です。 購買担当は区分の候補を、経理担当は科目の候補を確かめます。どちらも、文面を読んで一から決める作業が、候補を見て「合っている」か「直す」かを選ぶ作業に変わります。
3番目を規則に置いているのは、意図してのことです。 金額の基準は、税抜か税込か、1単位をどう数えるかで答えが変わります。式で判定し、判定に使った単価と方式を台帳に残せば、後から誰でも検算できます。
02今回想定するシステム構成
Google フォーム(購入依頼) ▼ 依頼台帳のスプレッドシート 【トリガー】フォーム送信時(インストール型) Google Apps Script ├──▶ 1単位あたりの金額の計算と金額の基準の判定(規則) ├──▶ 費目表と、似た品目の確定済みの依頼を引く ▼ Claude API(構造化出力) │ ① 費目・勘定科目の候補 ② 購買の区分の候補 │ ③ 組で判定が要るかの印 ④ 記載の不足 ▼ Google Apps Script ── 候補が一覧の中にあるかを確認し、台帳の候補の列へ └──▶ Google Chat の購買のスペースへ知らせる(Webhook) ▼ 【購買担当が区分を、経理担当が科目を確かめて確定】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Make、Python |
| 生成AI | Claude API(構造化出力) | Gemini API、OpenAI API |
| シート | Google スプレッドシート(依頼台帳・費目表・購買の区分・確定の記録) | Microsoft 365 のブック |
| 通知 | Google Chat(購買のスペースへの Webhook) | Gmail |
新しく足すのは、スクリプトと Claude API の契約だけです。 フォームも依頼台帳も費目表も、今あるものを使います。会計の仕組みには書き込みません。 経理担当は、台帳の候補を見ながら今までどおり会計の仕組みに入力します。
土台になるのは、Google Apps Script のフォーム送信時のトリガーです。 インストール型のトリガーで、利用者がフォームに回答したときに動きます。インストール型トリガーは作成した人のアカウントで実行されるので、依頼台帳と費目表を読める購買担当のアカウントで作ります。 スプレッドシートのフォーム送信のイベントは、回答の値を values(シートの列の順)と namedValues(設問の名前ごと)で渡し、書き込まれた範囲を range で渡します。
スクリプトの実行時間には上限があります。 1回の実行は6分まで、トリガーの合計の実行時間は Google Workspace のアカウントで1日6時間まで、外部へのURLの呼び出しは1日100,000回までとされています。1回の送信で処理するのは1件なので、上限に当たることはまずありません。 ただし、月初に依頼がまとまって届く朝は、同時に複数の実行が走ります。第7章でロックの扱いを書きます。
知らせには、Google Chat の受信 Webhook を使います。 外部からスペースへ一方向に投稿する仕組みで、投稿はスペースあたり毎秒1回までの上限があります。知らせるのは記載の不足と金額の基準に当たる依頼だけに絞ります。
構造化出力は Claude API の output_config.format で指定します。 type を json_schema にし、JSONスキーマを渡します。すべてのオブジェクトに additionalProperties: false が必要で、minimum や maxLength のような数値や文字数の制約は使えません。 選択肢は enum で列挙できるので、費目表の科目名をそこに入れます。
03どうやって実装するのか
処理の起点を決める
フォーム送信時のインストール型トリガーを、依頼台帳のスプレッドシートに1つ置きます。 依頼が1件届くたびに1回動き、その1件の候補を付けます。手配の前に候補が付いていることが、この構成の前提です。 1日1回のまとめ処理にすると、朝に届いた依頼の手配が翌日にずれます。
部門長の承認を待たずに動かします。 承認の前に候補と記載の不足が出ていれば、部門長は承認するときに「用途の記載が足りない」に気づけます。 承認の後に不足が分かると、依頼者と部門長の両方に聞き直すことになります。
同時に動いたときの書き込みの衝突を避けます。 月初の朝は依頼が続けて届き、複数の実行が同時に台帳へ書きます。スクリプトのロックを取ってから台帳に書き、書き終えたら放します。 ロックは取得を指示するまで有効にならないので、tryLock で待つ時間を決めて取り、取れなければ「候補待ち」の印を付けて終わります。
「候補待ち」は、1時間ごとの時間主導型のトリガーで拾い直します。 送信時のトリガーが失敗した依頼も、この拾い直しで候補が付きます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 購入依頼 | 依頼番号、依頼者の部署、品目、用途、数量、金額(単価か合計かの別)、購入先の候補、URL | 依頼台帳(フォームの回答) |
| 費目表 | 費目のコード、勘定科目、費目の説明、含めるものと含めないものの例 | 費目表のスプレッドシート |
| 購買の区分 | カタログ購買/都度見積/ソフトウェア・クラウド契約/業務委託/固定資産の申請 と、それぞれの条件 | 購買の区分のシート |
| 確定済みの依頼 | 過去の依頼の品目・用途と、確定した区分と科目 | 確定の記録のシート |
| 会社の設定 | 消費税の経理処理の方式(税抜/税込)、固定資産の申請が要る金額の線 | 設定のシート |
AIに渡すのは、品目・用途・数量・単価・購入先と、費目表と、似た品目の確定済みの依頼5件だけです。 依頼者の氏名は渡しません。部署は渡します。 同じ「撮影用の照明」でも、広報部なら広告宣伝費、開発部なら研究開発費、と自社の費目表で分けていることがあるからです。
費目表の「含めるものと含めないものの例」が、候補の質を決めます。 科目名だけを渡すと、AIは一般的な会計の知識で選び、自社の決め方と食い違います。「技術書は新聞図書費。研修の教材として配るものは研修費」のように、迷う品目の決め方を自社の言葉で書いておきます。
データの取得方法を決める
依頼の行は、フォーム送信のイベントの namedValues から取ります。設問の名前で値を引けるので、列の並びを入れ替えても壊れません。 書き込み先の行は、イベントの range から分かります。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 依頼の各項目 | イベントの namedValues | 候補を付ける対象 |
| 書き込む行 | イベントの range | 候補の列の位置 |
| 費目表と購買の区分 | 各シート | プロンプトの選択肢と enum |
| 似た品目の確定済みの依頼 | 確定の記録のシート | 自社での前例として渡す |
| 経理処理の方式と金額の線 | 設定のシート | 金額の基準の判定 |
似た品目の前例は、スクリプトの側で選びます。 品目の文字列を単語に分け、確定の記録の品目と共通する単語の多い順に5件を取ります。単純な方法ですが、「USB-C電源アダプタ」と「USB-C 充電器」が拾えれば足ります。 前例が見つからなければ、前例なしで渡します。
Claude API は UrlFetchApp で呼びます。 鍵はスクリプト プロパティに置き、x-api-key と anthropic-version のヘッダに入れます。muteHttpExceptions を true にして、失敗の状態コードでも応答を受け取り、再試行するかを決めます。
AIへ渡す前に整形する
- 金額の正規化 … 金額欄の「¥」「円」「,」を外して数にします。「約」「〜」が付いていれば
approxの印を付けます - 単価の計算 … 金額が合計で書かれていれば、数量で割って1単位あたりの金額を出します。単価か合計かは、フォームの設問で選ばせておきます
- 税の扱いの確認 … フォームの「税込/税抜」の選択と、設定のシートの経理処理の方式から、判定に使う金額を決めます
- 金額の基準の判定 … 判定に使う1単位あたりの金額が、設定のシートの線(10万円、20万円など)のどこに入るかを式で判定します
- URLの扱い … 購入先のURLは、AIには渡さずに台帳に残します。商品ページを読みに行かせることはしません
- 前例の取得 … 似た品目の確定済みの依頼を5件まで取ります
- 費目表の
enumの作成 … 費目表の有効な行から科目名の一覧を作り、スキーマに入れます
3番目と4番目を規則で行う理由は、国税庁の説明にあります。 少額の減価償却資産に当たるかの「10万円未満」は、法人が適用している消費税等の経理処理の方式に応じて算定した価額で判定するとされ、税抜経理方式なら税抜、税込経理方式なら税込の価額が取得価額になります。同じ107,800円(税込)のパソコンでも、方式によって10万円の線のどちら側かが変わります。 AIに任せず、会社の設定から式で決めます。
4番目の判定は、あくまで「確認が要るかの印」です。 取得価額は通常1単位として取引される単位ごとに判定し、応接セットならテーブルと椅子の1組で、カーテンなら部屋ごとの合計で見る、と国税庁は例を挙げています。何を1単位と見るかは品目しだいなので、組で判定が要りそうな依頼にはAIに印を付けさせ、経理担当が決めます。
AIに処理させる
させるのは、品目と用途の記載を読んで、費目表と購買の区分の中から候補を1つずつ選び、根拠の語句と、記載の不足を返すことです。
| させること | 中身 | 判断できないときの扱い |
|---|---|---|
| 費目・勘定科目の候補 | 費目表の中から1つ。次点を1つまで | 決めきれなければ confidence を low |
| 購買の区分の候補 | 5つの区分の中から1つ | ソフトウェアか業務委託かが文面で分からなければ low |
| 組で判定が要るかの印 | テーブルと椅子、複数枚で機能するものなど、組で取引されそうか | 分からなければ印を付ける |
| 記載の不足 | 用途が抽象的、数量がない、品目が特定できない など | 不足の種類と、聞く内容の下書き |
| 根拠 | 候補を選んだ語句を、品目と用途からそのまま写す | — |
前例は「参考」として渡し、前例と違う候補を選ぶことも許します。 似た品目でも用途が違えば科目が変わるからです。前例と違う候補を選んだときは、その理由を note に書かせます。 経理担当は、前例との違いが書かれた依頼から先に見ます。
| させないこと | 理由 |
|---|---|
| 金額の基準の判定 | 経理処理の方式と単位の数え方で答えが変わる。式で行う |
| 費目表に無い科目の提案 | 会計の仕組みに無い科目は入力できない |
| 固定資産として計上するか、費用にするかの決定 | 経理と顧問税理士が決める |
| 購入の可否や、より安い品の提案 | 依頼の承認は部門長が行う |
| 商品ページの内容の推測 | URLの先は読ませていない。書かれていないことを補わない |
いちばん起きやすい失敗は、1行目です。 依頼に「モニター 3台 270,000円」とあると、AIは「27万円なので固定資産」と書きがちです。1台9万円で、しかも税込か税抜かで線の位置が変わります。 判定はスクリプトが済ませ、AIの出力に金額の判定を書く欄そのものを作りません。
指示内容を固定する
あなたは管理部で、社内の購入依頼を仕分ける立場です。
依頼の品目と用途を読み、費目表と購買の区分の中から候補を選んでください。
候補は担当者が確かめてから確定します。迷ったときは確信が低いと示してください。
【費目表】{account_table}
(科目名、説明、含めるものの例、含めないものの例)
【購買の区分】
- catalog ...... 購買サイトで買える備品・消耗品・書籍
- quotation .... 取引先から見積を取って買うもの(製作物、什器、大量の購入)
- software ..... ソフトウェアのライセンス、クラウドサービス、購読(情報システム部の確認が要る)
- outsourcing .. 人や会社に作業を頼むもの(制作、研修の実施、翻訳)
- fixed_asset .. 固定資産の申請が先に要るもの(金額の判定は別に済んでいる。下の判定結果を使う)
【この依頼】
部署:{department}
品目:{item}
用途:{purpose}
数量:{quantity} 1単位あたりの金額(判定に使う額):{unit_price}
金額の判定結果(規則で済み):{amount_rule_result}
【似た品目の前例(確定済み)】{precedents}
【厳守事項】
- 勘定科目は費目表にある名前からだけ選んでください。新しい科目名を作らないでください。
- 金額が基準を超えるかどうかを判断しないでください。判定結果はすでに渡しています。
- 固定資産にするか費用にするかを決めないでください。
- evidence には、候補を選んだ語句を品目と用途からそのまま写してください。
- 用途が「業務用」「仕事で使う」など、何に使うかが分からない書き方なら、
missing_info に purpose_vague を入れ、依頼者に聞く内容を question_draft に書いてください。
- テーブルと椅子のように組で取引されるもの、複数を組み合わせて機能するものは、
set_judgement_needed を true にしてください。
- 前例と違う候補を選んだときは、理由を note に書いてください。
- URLの先の内容を推測しないでください。
「判定結果はすでに渡しています」と書くのが要点です。 金額の判定を禁じるだけだと、AIは「27万円のため固定資産の可能性」と note に書いてきます。判定が済んでいることを伝えると、金額に触れずに品目と用途だけで選ぶようになります。
question_draft は、依頼者への問い合わせの下書きです。 購買担当がチャットで聞くときに、そのまま使える文にします。「何に使いますか」より「どの業務で、誰が使いますか(例:新人研修の教材、開発チームの検証用)」のように、答えやすい形で書かせます。
出力形式を固定する
次の形のJSONで受け取ります。 output_config.format の type を json_schema にし、account と account_alt は費目表の科目名を、procurement は5つの区分を enum で列挙します。
{
"request_id": "PR-2026-10-0412",
"account": "新聞図書費",
"account_alt": "研修費",
"procurement": "catalog",
"confidence": "high",
"set_judgement_needed": false,
"missing_info": [],
"question_draft": "",
"evidence": "技術書 TypeScript入門 チームの勉強会で輪読",
"note": ""
}
1つ目の理由は、enum で費目表の外の科目を出させないことです。 候補が会計の仕組みに無い科目名だと、経理担当は結局一から選び直します。選択肢に閉じ込めておけば、候補をそのまま確定できる依頼が増えます。
2つ目の理由は、account と account_alt を分けて持てることです。 技術書のように2つの科目で迷う品目では、次点が見えるだけで経理担当の判断が速くなります。
3つ目は、出力を確かめる手順がはっきりすることです。 公式の説明では、stop_reason が refusal のときは出力がスキーマに合わないことがあり、max_tokens のときはJSONが途中で切れるとされています。スクリプトはまず stop_reason を見て、end_turn 以外ならその依頼を「候補待ち」に戻します。 そのうえで account が費目表の今の有効な行にあるかを確かめます。費目表を直した直後は、古い科目名が返ることがあるからです。
台帳には、AIの出力に加えてスクリプトの判定を並べます。
| 列 | 中身 | 書く主体 |
|---|---|---|
| 判定に使った単価と方式 | 例:90,000円(税抜) | スクリプト |
| 金額の判定 | 10万円未満/10万円以上20万円未満/… | スクリプト |
| 科目の候補・次点 | account、account_alt | AI |
| 区分の候補 | procurement | AI |
| 確定した区分 | 購買担当が選ぶ | 人 |
| 確定した科目 | 経理担当が選ぶ | 人 |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 依頼台帳 | フォーム送信時のトリガー、候補の列への書き込み | 依頼の読み取りと候補の書き込み |
| 費目表・購買の区分・設定 | 読み取りのみ | 選択肢、金額の線、経理処理の方式 |
| 確定の記録 | 読み取りと追記 | 前例の取得と、確定した区分・科目の追加 |
| Claude API | UrlFetchApp で呼び出し | 候補・印・記載の不足 |
| Google Chat | 受信 Webhook | 記載の不足と、金額の基準に当たる依頼の知らせ |
台帳への書き込みは、候補の列と判定の列だけにします。 依頼者が書いた列と、部門長の承認の列には書きません。確定の列も、スクリプトは空のまま残します。 候補を確定の列に先回りして書くと、人が確かめたかどうかが見分けられなくなります。
Chat への知らせは、1件ごとではなく、まとめて送ります。 投稿はスペースあたり毎秒1回までなので、送信時のトリガーでは知らせる内容を台帳の印にとどめ、15分ごとの時間主導型のトリガーで印の付いた依頼をまとめて1件で知らせます。
人が確認する
- 購買担当が区分の候補を確かめる … 部門長の承認が済んだ依頼について、候補の区分で手配してよいかを見て、確定の列に区分を書きます
- 記載の不足を聞く …
question_draftを見て、依頼者に聞きます。送るのは人です - 組で判定が要る依頼を経理に回す …
set_judgement_neededがtrueのものは、手配の前に経理担当が1単位の数え方を決めます - 経理担当が科目の候補を確かめる … 請求書や領収書が届いて計上するときに、候補の科目でよいかを見て、確定の列に科目を書きます
- 前例と違う候補を先に見る …
noteに理由が書かれた依頼は、費目表の決め方が足りていない可能性があります
4番目で候補と違う科目を確定したら、その依頼は次から前例として効きます。 確定の記録に入るので、似た品目が来たときにAIへ渡る前例が変わります。人が直した分だけ、次の候補が自社の決め方に寄っていきます。
目標は、600件をならして1件1分です。 候補をそのまま確定できる依頼は購買・経理とも数秒で済み、記載の不足と組の判定と前例と違う候補の分だけ時間を使う、という想定です。
例外に対処する
| 起きること | 対応 |
|---|---|
| ロックが取れない | 「候補待ち」の印を付けて終わり、1時間ごとの拾い直しで処理する |
| API が失敗の状態コードを返す | 1回だけ送り直し、だめなら「候補待ち」にする |
stop_reason が end_turn 以外 | その依頼を「候補待ち」にし、拾い直しで送り直す。2回続けば人へ |
| 科目の候補が費目表の今の行に無い | 候補を空にし、「要確認」の印を付ける |
| 金額欄が数にならない | 金額の判定を「判定不能」にし、依頼者に聞く内容の下書きを作る |
| 1件の依頼に複数の品目が書かれている | 品目ごとに分けず、missing_info に multiple_items を入れて依頼者に分けてもらう |
| 外貨の金額で書かれている | 換算はしない。「判定不能」にして購買担当へ |
| 費目表を改訂した | 改訂の日付を設定のシートに入れ、それより前の前例は渡さない |
いちばん多いのは、5行目と6行目です。 「一式」「合計約30万」のような書き方や、1つの依頼にモニターとケーブルと椅子が並ぶ書き方です。どちらもAIの問題ではなく、フォームの設問の問題です。 単価と数量を別の設問にし、1依頼1品目を案内に書くほうが、候補の精度を上げようとするより効きます。
記録を残す
- 依頼番号、送信日時、処理した日時、処理の結果(候補あり/候補待ち/要確認)
- 判定に使った単価、税の扱い、経理処理の方式、金額の判定
- AIの出力の全文(
account、account_alt、procurement、confidence、evidence、noteなど)と、そのとき渡した前例の依頼番号 - 確定した区分と科目と、候補と違ったかどうか
- そのときの費目表の版
4つ目は、候補の当たり方を測る材料です。 科目の候補がそのまま確定された割合を、科目ごとに毎月数えます。当たらない科目は、費目表の「含めるものと含めないものの例」が足りていません。
3つ目で前例の依頼番号を残すのは、候補が前例に引っ張られたかを後から見るためです。 前例の科目が誤って確定されていた場合、その誤りが似た品目の候補に広がります。どの前例を見て選んだかが残っていれば、広がった範囲を追えます。
04実装レベルの3段階
本記事が想定するのは半自動化です。 候補を確かめて確定するのは購買担当と経理担当です。1件3分が1分になるのはこの段階です。 本格構成に進むのは、科目ごとの候補の当たり方が見えてからにしてください。 当たりの悪い科目が残ったままでは、確かめる手間が会計の仕組みの側に移るだけです。
05工数削減シミュレーション
導入後 600件 × 1分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 社員が数百名から千名ほどで、備品・書籍・ソフトウェア・外部サービスなどの購入依頼を Google フォームやスプレッドシートで受け付けている会社。購入依頼が月に数百件あり、購買担当が手配の方法を、経理担当が勘定科目を、それぞれ依頼の文面から読み取って決めている場合。同じ品目でも担当者によって科目が分かれ、月末に付け替えが発生している場合。Google Workspace を使っていて、スクリプトを動かせる担当者がいる場合。
- 購入依頼が月に数十件で、担当者1名が全件を把握できている場合。購買の仕組み(購買管理のサービス)で品目マスタからしか依頼できず、科目が品目に紐づいてすでに決まっている場合。勘定科目の決め方そのものが社内で決まっておらず、費目表が無い場合(先に経理と顧問税理士で費目表を作る必要があります)。AIに科目を確定させ、そのまま会計の仕組みへ登録したい場合(この構成が出すのは候補までです)。
07最小構成で試す方法
- 先月の購入依頼から、確定した科目と手配の方法が分かっているものを100件選ぶ(科目の付け替えがあった依頼を混ぜる)
- 費目表に「含めるものと含めないものの例」の列が無ければ、迷う品目について書き足す
- 社内で使ってよいAIサービスの画面に、費目表と5つの区分の説明を貼る
- 100件の品目・用途・部署だけを貼り、「費目表の科目と区分の中から1つずつ選び、根拠の語句を写してください。金額は判断しないでください」と指示する
- AIの候補と、実際に確定した科目・区分を突き合わせる
| 出てきた内容 | 判断 |
|---|---|
| 確定した科目とおおむね同じ | スクリプトでの自動化に進む |
| 付け替えがあった依頼で、AIも迷う | 費目表の決め方の例を書き足す。 構成は有効 |
| 費目表に無い科目名を出す | 構造化出力の enum で直る |
2行目は、自社の決め方が文章になっていなかったということです。 費目表を直すだけで、AIを入れる前から付け替えが減ることがあります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 自社に無い科目名が候補に出る | 費目表から enum を作る。 スキーマに必ず入れる |
| AIが金額で固定資産と判断する | 金額の判定は式で済ませ、判定結果を渡し、判断を禁じる |
| 税込と税抜を取り違える | 経理処理の方式を設定に持ち、フォームで税込・税抜を選ばせる |
| 合計しか書かれず単価が分からない | フォームの設問を単価と数量に分ける |
| 組で取引される品目を1つずつ判定する | set_judgement_needed で印を付け、経理が数え方を決める |
| 前例の誤りが広がる | 前例の依頼番号を残し、誤りを直したら影響範囲を追う |
| 月初に同時実行で台帳が壊れる | ロックを取ってから書く。取れなければ「候補待ち」 |
| Chat の投稿が上限に当たる | 印だけ付け、15分ごとにまとめて1件で知らせる |
stop_reason を見ずにJSONを読む | end_turn 以外は候補待ちに戻す |
| 候補を確定の列に書いてしまう | 確定の列はスクリプトが触らない |
| 費目表の改訂の前後で候補が混ざる | 改訂の日付より前の前例は渡さない |
上の2行が、この構成の要です。 候補が費目表の外に出れば経理は使えず、金額の判定がAIに混ざれば誰も検算できません。どちらも、AIに選ばせる範囲を狭く決めることで守ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 購入依頼の品目・用途・金額・購入先、依頼者の部署、費目表と過去の確定の記録です。依頼者の氏名はAIに渡しません。
- 用途の欄に機密が書かれることを前提にする … 「新製品○○の展示会用」「顧客△△向けの検証環境」のように、まだ公表していない計画や取引先の名前が用途に書かれます。 API の利用条件とデータの扱いを契約の前に確かめ、社内の情報の区分でAIに渡してよい範囲に入るかを決めておきます
- 会計の仕組みに書き込まない … 確定は人が行い、会計の仕組みへの入力も人が行います。候補が誤っていても、計上まで進む前に止まります
- 税務上の判断を代替しない … 固定資産にするか費用にするか、何を1単位と数えるかは、経理と顧問税理士が決めることです。 この構成が出すのは、金額の線のどこに入るかという式の結果と、品目からの候補だけです
- 鍵と権限を絞る … Claude API の鍵はスクリプト プロパティに置き、スクリプトと費目表の編集権限を購買担当と経理担当に限ります
誤りが起きた場合のリスクは、科目の誤りがそのまま計上されることと、固定資産の申請が要る依頼が手配まで進むことの2つです。 前者は確定の列を人が埋めることで、後者は金額の判定を式で行い印を付けることで防ぎます。どちらも、AIの候補を確定と見なさない設計で守ります。
10まず何から始めるか
1週目:費目表に例を書き足す
先月までの依頼から、月末に付け替えがあった品目を集め、費目表に「含めるものと含めないものの例」の列を足して書き込みます。 あわせて、5つの購買の区分の条件を1枚にまとめます。
2週目:100件で試す
確定済みの依頼100件の品目・用途・部署を、社内で使ってよいAIサービスに貼り、候補を出させます。確定した科目と並べ、迷った品目を費目表に書き足します。
3週目:フォームを直す
金額の設問を「単価」「数量」「税込・税抜」に分け、1依頼1品目と案内に書きます。 設定のシートに経理処理の方式と金額の線を書き、経理担当に確かめてもらいます。
4週目:送信時のトリガーで候補を付ける
フォーム送信時のトリガーを置き、金額の判定と候補の付与を台帳の候補の列に書くところまで作ります。この時点では Chat に知らせず、購買担当と経理担当が台帳で候補を見るだけにします。
2か月目: 記載の不足の下書きと Chat の知らせを足し、承認の前に聞き直す運用を始めます。3か月目以降: 科目ごとに候補がそのまま確定された割合を数え、1件3分が何分になったかを実測します。月末の付け替えが目立って減った時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| フォーム送信時などのイベントのトリガーと、時間主導型のトリガーがあること。インストール型トリガーは作成した人のアカウントで実行されること | Google: Installable triggers | 2026-10-07 |
スプレッドシートのフォーム送信のイベントが values(シートの列の順)、namedValues(設問の名前ごと)、range を持つこと | Google: Event objects | 2026-10-07 |
| 1回の実行が6分まで、トリガーの合計実行時間が Workspace のアカウントで1日6時間、URLの呼び出しが1日100,000回、同時実行が1ユーザー30までであること | Google: Quotas for Google Services | 2026-10-07 |
UrlFetchApp の fetch、headers・payload・method の指定、muteHttpExceptions を true にすると失敗の応答でも例外にならないこと | Google: Class UrlFetchApp | 2026-10-07 |
getScriptLock がコードの同時実行を防ぐロックを返し、tryLock・waitLock を呼ぶまでロックは取得されないこと | Google: Class LockService | 2026-10-07 |
| 受信 Webhook が外部からスペースへの一方向の通知であること。スペースあたり毎秒1回の上限があること | Google: Send Google Chat messages with incoming webhooks | 2026-10-07 |
構造化出力を output_config.format(type に json_schema)で指定すること。すべてのオブジェクトに additionalProperties: false が要り、minimum・maxLength などは使えないこと。enum が使えること。stop_reason が refusal ではスキーマに合わないことがあり、max_tokens ではJSONが途中で切れること | Claude API Docs: Structured outputs | 2026-10-07 |
| 少額の減価償却資産が使用可能期間1年未満または取得価額10万円未満のものであること。取得価額は通常1単位として取引される単位ごとに判定し、応接セットは1組、カーテンは部屋ごとの合計で見ること。20万円未満の一括償却資産、中小企業者等の30万円未満の特例があること | 国税庁: No.5403 少額の減価償却資産になるかどうかの判定の例示 | 2026-10-07 |
| 10万円未満かどうかは法人が適用している消費税等の経理処理の方式に応じて算定した価額で判定し、税抜経理方式なら税抜、税込経理方式なら税込の価額が取得価額となること | 国税庁: 消費税等の経理処理方式の違いによる少額の減価償却資産の判定 | 2026-10-07 |
勘定科目の決め方、固定資産として扱う線、1単位の数え方は、自社の経理と顧問税理士で決めてください。 本記事は公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0783)についてのご相談はこちらから。
