2026.04.21

【Agentforce実践】製造業の在庫・発注管理をAgentforceで効率化 — チャットで在庫確認・納期追跡

はてな編集部
2026.04.21
ブログサムネイル
この記事でわかること
  • 製造業の現場で発生する「部品の在庫は?」「発注した部品はいつ届く?」をAgentforceで自動回答する方法
  • Apex InvocableMethod(Agentforceやフローから呼び出せるApexメソッド)を使った在庫検索・発注ステータス確認の実装方法
  • Agent Builderでの製造管理トピック設定と動作検証の手順

はじめに — 製造業の「今すぐ知りたい」問題

製造業の現場では、部品や資材の在庫状況を即座に確認したい場面が日常的に発生します。

  • 「ベアリングの在庫はあと何個?」 → 在庫管理システムにログインして検索
  • 「発注したサーボモーターはいつ届く?」 → 購買担当に電話やチャットで確認
  • 「安全在庫を下回っている部品は?」 → 在庫レポートを手動で確認
  • 「遅延している発注はある?」 → 発注一覧を一つずつチェック

これらの確認作業は1件あたり数分で済むものの、製造ラインの稼働に直結するため、回答の遅れが生産計画全体に影響を与えることがあります。

本記事では、Salesforce Agentforceを活用して、部品の在庫照会と発注ステータスの確認をチャットで即座に行えるエージェントを構築する方法を解説します。

項目内容
対象読者製造業のIT担当者、Salesforce管理者、生産管理担当者
構築難易度★★★☆☆(Apexの基本知識 + Salesforce管理設定の経験があれば対応可能)
所要時間約2〜3時間(Apex開発 + Agent Builder設定)
前提環境Salesforce Enterprise Edition以上 + Agentforceライセンス

完成イメージ

まず、完成したエージェントがどのように動作するかを見てみましょう。

補足

本デモでは、既存のエージェントに製造管理用のトピックを追加して検証しています。画面上のエージェント名が異なりますが、動作に影響はありません。Agentforceでは1つのエージェントに複数のトピックを追加でき、Topic Selector(ユーザーの質問内容を判定し、適切なトピックに自動振り分ける機能)が質問に応じて使い分けます。

在庫照会

ユーザー

ベアリングの在庫を教えてください

エージェント

ベアリング 6205ZZ(型番: BRG-6205ZZ)の現在庫は8個です。安全在庫(15個)を下回っているため「要発注」となっています。保管場所は部品庫 C-2棚です。

「ベアリングの在庫を教えてください」と質問すると、現在庫数・安全在庫・保管場所を即座に回答し、安全在庫を下回っている場合は「要発注」と警告します。

発注ステータス確認

ユーザー

遅延している発注はありますか?

エージェント

遅延している発注は以下の通りです。

項目内容
発注番号PO-20260315-001
部品ベアリング 6205ZZ(BRG-6205ZZ)
数量20個
仕入先あおば精機株式会社
納期2026-03-28
ステータス遅延
遅延理由仕入先の在庫切れ
新しい納期予定日2026-04-02入荷予定

「遅延している発注はありますか?」と質問すると、遅延中の発注を検出し、発注番号・部品名・仕入先・遅延理由・新しい納期予定を回答します。

アーキテクチャ

今回のエージェントは、1つのトピック(ManufacturingSupport)に2つのアクション(在庫検索、発注ステータス確認)を持つ構成です。

ユーザーの質問 Topic Selector ManufacturingSupport 在庫検索 / 発注ステータス確認 回答生成

処理の流れは以下の通りです。

  • Topic Selector がユーザーの質問内容を解析し、在庫の質問か発注の質問かを自動判定
  • 在庫の質問 → InventorySearchAction が Inventory__c をSOQLで検索
  • 発注の質問 → OrderStatusAction が Purchase_Order__c をSOQLで検索
  • 検索結果をテキストに整形してAgentforceに返し、ユーザーへの回答を生成
設計のポイント
  • 2アクション構成 — 在庫と発注を別アクションに分離し、ユーザーの質問内容に応じて自動で使い分け
  • 安全在庫アラート — 現在庫が安全在庫を下回る部品を「要発注」として警告
  • 遅延検出 — 発注ステータスが「遅延」の場合、遅延理由と新しい納期予定を自動表示

1 カスタムオブジェクトの作成

在庫データと発注データを管理するための2つのカスタムオブジェクトを作成します。設定 > オブジェクトマネージャー > 作成 > カスタムオブジェクト から、以下の2つを順に作成してください。

Inventory__c(部品在庫)

項目名API参照名データ型説明
部品名Nameテキスト部品の名称(例 ベアリング 6205ZZ)
型番PartNumber__cテキスト(50)型番コード(例 BRG-6205ZZ)
カテゴリCategory__c選択リスト機械部品 / 電子部品 / 素材 / 消耗品
現在庫数CurrentStock__c数値現在の在庫数量
安全在庫数SafetyStock__c数値発注点となる最低在庫数
単位Unit__cテキスト(20)個 / 本 / 枚 / 缶 / 台 など
保管場所Location__cテキスト(100)倉庫・棚番号(例 部品庫 C-2棚)

Purchase_Order__c(発注)

項目名API参照名データ型説明
発注番号NameテキストPO番号(例 PO-20260315-001)
部品名PartName__cテキスト(100)発注した部品の名称
型番PartNumber__cテキスト(50)発注した部品の型番
数量Quantity__cテキスト(50)数量と単位(例 20個)
仕入先Supplier__cテキスト(100)仕入先企業名
発注日OrderDate__c日付発注した日付
納期DeliveryDate__c日付納品予定日
ステータスStatus__c選択リスト発注済み / 製造中 / 出荷待ち / 納品済み / 遅延
備考Note__cテキストエリア遅延理由など
FLS(項目レベルセキュリティ)の設定

カスタムフィールドを作成しただけでは、Apexからデータを取得できない場合があります。各フィールドのFLSを設定して、利用ユーザーのプロファイルから「参照可能」にしてください。

設定方法 — 設定 > オブジェクトマネージャー > 対象オブジェクト > 項目とリレーション > 対象項目 > 項目レベルセキュリティの設定 で、System Administratorプロファイルの「参照可能」にチェックを入れます。

Tips — 項目が多い場合は、権限セットを作成して一括設定するのが効率的です。設定 > 権限セット > 新規 > オブジェクト設定 から、対象オブジェクトの全フィールドに「参照アクセス権」「編集アクセス権」を付与し、利用ユーザーに割り当てます。

デモデータの登録

カスタムオブジェクトを作成したら、動作確認用のデモデータを登録します。以下のデータを手動入力するか、データインポートウィザード(設定 > データ > データインポートウィザード)でCSVから一括登録してください。

Inventory__c(部品在庫)のデモデータ

部品名型番カテゴリ現在庫安全在庫状態
ステンレス鋼板 SUS304MTL-SUS304-2B素材45枚30枚適正
六角ボルト M8×30BLT-M8-30機械部品120本200本要発注
ベアリング 6205ZZBRG-6205ZZ機械部品8個15個要発注
コンデンサ 100μF 25VELC-CAP100U25電子部品350個200個適正
切削油 ネオクールOIL-NC-18L消耗品3缶5缶要発注
アルミフレーム 40×40ALF-4040-2000素材22本10本適正
サーボモーター HG-KR23MOT-HGKR23機械部品2台3台要発注
エンドミル φ10 4枚刃TLS-EM10-4F消耗品6本10本要発注

Purchase_Order__c(発注)のデモデータ

発注番号部品仕入先ステータス
PO-20260315-001ベアリング 6205ZZあおば精機株式会社遅延(仕入先在庫切れ → 4/2入荷予定)
PO-20260318-002六角ボルト M8×30みどり金属工業株式会社納品済み
PO-20260320-003サーボモーター HG-KR23はるか電機株式会社製造中(4/10予定)
PO-20260322-004エンドミル φ10 4枚刃こだま工具販売株式会社出荷待ち
PO-20260325-005切削油 ネオクールみどり金属工業株式会社発注済み
PO-20260326-006コンデンサ 100μF 25Vはるか電機株式会社発注済み
Agentforceの価値

Agentforceの価値は、このレコード画面を開かなくても「チャットで聞くだけ」で在庫・発注情報を取得できる点にあります。

2 在庫検索アクション(Apex)の作成

部品・資材の在庫を検索するApex InvocableMethodを作成します。このクラスがAgentforceのアクションとして機能し、エージェントが在庫データにアクセスする窓口となります。

設定 > 開発者コンソール > File > New > Apex ClassInventorySearchAction を作成してください。

機能説明
キーワード検索部品名・型番をスペース区切りでOR検索
カテゴリフィルタ機械部品、電子部品、素材、消耗品で絞り込み
在庫不足フィルタlowStockOnly=trueで安全在庫割れの部品のみ抽出
ステータス判定現在庫 < 安全在庫 なら「要発注」、それ以外は「適正」

コード(主要部分)

以下はクラスの核心部分です。@InvocableVariable でAgentforceからの入力パラメータを定義し、動的SOQLで在庫テーブルを検索します。

public with sharing class InventorySearchAction {

    // ── Agentforceからの入力パラメータ定義 ──
    public class SearchRequest {
        @InvocableVariable(required=false label='部品名・型番'
            description='検索したい部品名または型番')
        public String partName;

        @InvocableVariable(required=false label='カテゴリ'
            description='カテゴリでフィルタ(機械部品、電子部品、素材、消耗品)')
        public String category;

        @InvocableVariable(required=false label='在庫少フラグ'
            description='trueの場合、安全在庫を下回っている部品のみ表示')
        public Boolean lowStockOnly;
    }

    // ── 動的SOQLの構築 ──
    @InvocableMethod(label='在庫検索' description='部品・資材の在庫数量を検索します。')
    public static List<SearchResponse> searchInventory(List<SearchRequest> requests) {
        SearchRequest req = requests[0];
        String query = 'SELECT Name, PartNumber__c, Category__c, '
            + 'CurrentStock__c, SafetyStock__c, Unit__c, Location__c '
            + 'FROM Inventory__c';

        List<String> conditions = new List<String>();

        // キーワード検索
        if (String.isNotBlank(req.partName)) {
            for (String token : req.partName.trim().split('\\s+')) {
                String escaped = String.escapeSingleQuotes(token);
                conditions.add('(Name LIKE \'%' + escaped + '%\' '
                    + 'OR PartNumber__c LIKE \'%' + escaped + '%\')');
            }
        }
        // ... WHERE句の結合、クエリ実行、レスポンス生成
        // 検索結果をテキストに整形し、現在庫 < 安全在庫 なら「要発注」と判定して返却
    }
}
ポイント
  • @InvocableMethod アノテーションにより、このメソッドがAgentforceのアクションから呼び出し可能になります
  • SOQL(Salesforce Object Query Language — SQLに似たSalesforce専用のクエリ言語)を動的に構築し、条件に応じた柔軟な検索を実現しています
  • CurrentStock__c < SafetyStock__c で安全在庫割れを自動判定します
コンパイルエラーが出る場合

Apexクラスの保存時に Invalid type: Inventory__c のエラーが出る場合、カスタムオブジェクトがまだデプロイされていません。必ずStep 1のカスタムオブジェクト作成・デプロイを先に完了してからApexクラスを保存してください。

3 発注ステータス確認アクション(Apex)の作成

発注番号・部品名・仕入先での検索に加え、未納の発注のみを抽出するフィルタ機能を持つ OrderStatusAction を作成します。

設定 > 開発者コンソール > File > New > Apex ClassOrderStatusAction を作成してください。

このクラスはStep 2の InventorySearchAction と同じパターン(SearchRequest/SearchResponse定義 + 動的SOQL構築 + レスポンス生成)で実装します。以下の差分のみが異なります。

項目InventorySearchActionOrderStatusAction
検索対象Inventory__c(部品在庫)Purchase_Order__c(発注)
入力パラメータpartName, category, lowStockOnlysearchQuery, supplierName, pendingOnly
キーワード検索対象部品名(Name) / 型番(PartNumber__c)発注番号(Name) / 部品名(PartName__c) / 型番(PartNumber__c)
フィルタ条件カテゴリ完全一致 / 安全在庫割れ仕入先部分一致 / 未納ステータス
ソートName 昇順DeliveryDate__c(納期)昇順
特殊処理現在庫 < 安全在庫 → 「要発注」判定ステータスが「遅延」→ 備考(遅延理由)を自動表示
機能説明
キーワード検索発注番号(PO-xxxxx)・部品名・型番でOR検索
仕入先フィルタ仕入先名で部分一致検索
未納フィルタpendingOnly=trueで「発注済み・製造中・出荷待ち・遅延」のみ抽出
遅延理由表示ステータスが「遅延」の場合、備考(遅延理由)を自動表示

4 デプロイ

カスタムオブジェクトとApexクラスをサンドボックスにデプロイします。

# カスタムオブジェクトのデプロイ
sf project deploy start \
  --source-dir force-app/main/default/objects/Inventory__c \
  --source-dir force-app/main/default/objects/Purchase_Order__c \
  --target-org your-sandbox

# Apexクラスのデプロイ
sf project deploy start \
  --source-dir force-app/main/default/classes \
  --target-org your-sandbox
よくあるエラー

デプロイ後にApexからフィールドにアクセスできない場合(Invalid field PartNumber__c for Inventory__c など)、FLSの設定漏れが原因です。Step 1の「FLSの設定」を再確認してください。

デプロイ成功後、設定 > オブジェクトマネージャー で「Inventory」「Purchase Order」が表示され、設定 > Apexクラス に InventorySearchAction と OrderStatusAction が表示されていれば完了です。

5 GenAiFunctionメタデータのデプロイ

Apexクラスだけではアクション一覧に表示されません。GenAiFunction(ApexクラスをAgent Builderのアクションとして登録するためのメタデータ定義)を作成してデプロイします。

InventorySearch(在庫検索)

genAiFunctions/InventorySearch/ ディレクトリを作成し、以下のXMLを配置します。

<GenAiFunction xmlns="http://soap.sforce.com/2006/04/metadata">
    <description>部品・資材の在庫数量を検索します。</description>
    <developerName>InventorySearch</developerName>
    <invocationTarget>InventorySearchAction</invocationTarget>
    <invocationTargetType>apex</invocationTargetType>
    <isConfirmationRequired>false</isConfirmationRequired>
    <masterLabel>在庫検索</masterLabel>
</GenAiFunction>

OrderStatus(発注ステータス確認)

genAiFunctions/OrderStatus/ ディレクトリにも同様のXMLを作成します。developerNameOrderStatusinvocationTargetOrderStatusActionmasterLabel発注ステータス確認 に変更してください。

# GenAiFunctionメタデータのデプロイ
sf project deploy start \
  --source-dir force-app/main/default/genAiFunctions \
  --target-org your-sandbox

デプロイ後、Agent Builderのアクション追加画面で「在庫検索」「発注ステータス確認」が表示されていれば完了です。表示されない場合は、GenAiFunctionのXMLで invocationTarget が正しいApexクラス名と一致しているか確認してください。

6 Agent Builderでの設定

Agentforceのエージェントにトピックとアクションを追加します。設定 > Einstein > エージェント から対象エージェントを開き、Agent Builderを起動します。

トピックの作成

「New Topic」ボタンからトピックを作成します。

設定項目
Topic LabelManufacturingSupport
Description製造業の在庫管理・発注管理に関する質問に回答する
Scope在庫照会、発注ステータス確認、安全在庫アラート

Instructionsの設定

トピックのInstructions(指示文)に以下を設定します。

- ユーザーが在庫について質問した場合は、在庫検索アクションを使用してください
- 発注ステータスや納期について質問された場合は、発注ステータス確認アクションを使用してください
- 安全在庫を下回っている部品がある場合は「要発注」と明確に警告してください
- 発注が遅延している場合は、遅延理由と新しい納期予定日を伝えてください
- 回答は日本語で、具体的な数値を含めて回答してください

アクションの追加

トピックの「Actions」セクションで、「アセットライブラリから追加」(Add from Asset Library)をクリックし、以下の2つを選択します。

アクション名対応するApexクラス
在庫検索InventorySearchAction
発注ステータス確認OrderStatusAction

バージョンの確定と有効化

設定が完了したら、Save → Commit Version → Activate で有効化します。

Tips

Activateする前に、Agent Builderの「Preview」ボタンでテスト実行できます。「ベアリングの在庫」と入力して正しく回答が返ることを確認してからActivateしてください。

動作検証

テスト1 在庫照会

Agent BuilderのPreview画面で「ベアリングの在庫を教えてください」と入力した結果です。右側のインタラクション概要パネルで、Topic Selector → ManufacturingSupport → 在庫検索アクション の推論過程が確認できます。

ステップ内容処理時間
入力「ベアリングの在庫を教えてください」-
推論 Topic Selector質問内容を解析し、ManufacturingSupportトピックを選択520ms
トピックに移行ManufacturingSupport-
推論 ManufacturingSupportpartName=「ベアリング」で在庫検索アクションを呼ぶと判断395ms
アクション 在庫検索InventorySearchAction を実行、1件の結果を返却586ms
推論 ManufacturingSupport検索結果を日本語に整形して回答を生成822ms

テスト2 遅延発注の検出

続けて「遅延している発注はありますか?」と入力しました。

確認ポイント
  • Topic Selectorが同じManufacturingSupportに正しくルーティング(在庫と発注で同じトピックを使い分け)
  • 発注ステータス確認アクションが pendingOnly=true で呼び出された
  • 遅延理由(備考フィールド)を自動で表示
補足

処理時間はサンドボックス環境での参考値です。実環境ではデータ量やネットワーク状況により異なります。

本番環境への発展

ERPシステムとの連携

本記事ではSalesforceのカスタムオブジェクトにデモデータを格納し、ApexからSOQLで検索する構成としましたが、本番環境では以下のデータソースとの連携も検討できます。

連携先方式メリット
SalesforceカスタムオブジェクトSOQL標準のレポート・ダッシュボード活用可能
SAP / Oracle ERPSalesforce Connect(OData)リアルタイムのERP在庫データを参照
自社在庫管理システムApex HTTPコールアウト既存システムのAPIを直接呼び出し
スプレッドシート(移行期)CSVインポート → カスタムオブジェクト段階的にデジタル化

追加ユースケース

ユースケース必要なアクション
「在庫が少ない部品を一覧で見せて」在庫検索(lowStockOnly=true)
「あおば精機への発注状況は?」発注ステータス確認(supplierName指定)
「今月納品予定の発注は?」発注ステータス確認(日付フィルタ追加)
「部品Xの発注を自動で起票して」発注作成アクション(新規開発)
「在庫推移のグラフを見せて」在庫履歴 + レポートアクション

まとめ

本記事では、Agentforceを使って製造業向けの在庫・発注管理エージェントを構築しました。

要素内容
カスタムオブジェクトInventory__c(部品在庫 8件)、Purchase_Order__c(発注 6件)
ApexクラスInventorySearchAction — 在庫検索、OrderStatusAction — 発注ステータス確認
GenAiFunction2つのアクションをAgent Builderに登録するメタデータ
AgentforceトピックManufacturingSupport — 製造管理の質問を自動ルーティング
導入効果
  • 即時回答 — 在庫や発注ステータスの確認がチャットで即座に完了(従来は在庫システムにログインして検索)
  • 安全在庫アラート — 在庫不足を自動検出し、発注漏れを防止
  • 遅延の早期発見 — 納期遅延を即座に把握し、製造ラインへの影響を最小化
  • 現場からの直接確認 — 製造現場のスタッフがチャットで在庫を確認可能(在庫システムのアクセス権不要)

本記事はSalesforceサンドボックス環境で検証しています。デモデータの企業名はすべて架空です。本番環境での利用にあたっては、組織のセキュリティポリシーやデータガバナンスの要件を確認してください。

Agentforceの導入・構築についてお気軽にご相談ください

はてなベースでは、Salesforce Agentforceを活用した業務効率化の導入支援を行っています。在庫管理・発注管理のAI化にご興味がある方はお気軽にお問い合わせください。

無料相談はこちら

Contactお問い合わせ

はてなベース株式会社へのお問い合わせはこちら。

提携税理士事務所へのお問い合わせはこちら。