VISASQ Dev Blog

ビザスク開発ブログ

SalesforceのAPI使用状況をSlackに通知する仕組みを作った話

はじめに

こんにちは!Salesforceチームの原田です。
今回は、SalesforceAPI使用状況をSlackに通知する仕組みについてご紹介します。

SalesforceAPIコール数とは、外部システムからSalesforceへ行われるAPI呼び出しの合計回数を指します。 Salesforceはマルチテナント環境で複数企業がサーバーリソースを共有しているため、すべての顧客が公平に利用できるよう 24時間あたりに実行できるAPIリクエスト数の上限 が定められています。

この上限を超えるとAPIリクエストが拒否され、外部連携の処理が止まってしまう可能性があります。
ビザスクでも複数の外部サービスとSalesforceを連携しているため、API使用量の“傾向を早めに把握できる仕組み”が必要でした。

この記事では、こうした背景をふまえて
API使用量を定期的にSlackへ通知し、閾値を超えている場合は注意メッセージを付与する仕組み の概要と実装ポイントをまとめています。

従来のAPI使用量監視の課題

Salesforceでは以下の方法でAPIコール数を確認できます。

  • 組織情報ページで確認する
  • システム概要ページで確認する
  • 過去7日間のAPI使用状況レポートを確認する
  • API使用状況通知で、閾値超過時にメール通知を受け取る

ただし、これらの方法には次のような課題がありました。

  • ページを定期的に見に行く必要があり、気づくのが遅れやすい
  • メール通知は見落としやすい(特にSlack中心のチームでは埋もれがち)
  • 閾値を“超えたあと”にしか通知されず、使用量の変化をリアルタイムに把握できない

こうした理由から、「もっと早く・確実に・Slackで気づける仕組み」が必要でした。

改善策:API使用量を自動監視してSlackへ通知する仕組み

今回の改善では、API使用量をSalesforce内で自動的に監視し、
閾値を超えているかどうかに関わらず、定期的にSlackへ使用状況を通知する仕組みを実装しました。

現在の使用量を定期共有することで、急激な増加にも早期に気づきやすくなります。
閾値を超えた場合は追加の注意文言を付けることで、アラートとしても機能します。

Salesforce側の実装ポイント

API使用量の取得

OrgLimits.getMap() を利用し、DailyApiRequests から直近24時間のAPI使用量と上限値を取得します。

閾値判定のロジック

カスタムメタデータ閾値を保持し、
使用率が閾値を超えているかどうかを判定します。
閾値未満でも通常の状況をSlackに通知します。

Scheduled Apexによる定期実行

Schedulable を実装し、1時間ごとなど任意の間隔でAPI使用量をチェックします。

Slack Webhook への通知

Slack送信用クラスを使用し、使用状況をSlackチャンネルへ投稿します。
閾値超過時は注意文言を追加します。

簡易実装サンプル(Apex)

/**
 * 組織のAPI使用状況を定期的にSlackへ通知するクラスの簡易サンプルです。
 * ※SlackNotifier や DAO クラスの実装は省略しています。
 */
public with sharing class OrgApiUsageAlert implements Schedulable {

    /**
     * Scheduled Apex のエントリーポイント
     */
    public void execute(SchedulableContext sc) {
        notifyApiUsage();
    }

    /**
     * API使用状況を取得し、Slackへ通知するメイン処理
     */
    private void notifyApiUsage() {

        // カスタムメタデータから各種設定値を取得(実装は DAO に委譲)
        EnvironmentSetting__mdt env = EnvironmentSettingDAO.getInstance();

        // Salesforceが保持するAPI使用状況(直近24時間)
        System.OrgLimit dailyApi = OrgLimits.getMap().get('DailyApiRequests');

        Decimal usagePercent = calcPercent(dailyApi.getValue(), dailyApi.getLimit());

        // SlackNotifier は Webhook 送信をまとめたユーティリティクラス(実装は記事では割愛)
        SlackNotifier.post(
            buildMessage(usagePercent, env.ApiUsageThreshold__c)
        );
    }

    /**
     * 使用率を算出(例:45.3% → 45% に丸める)
     */
    private Decimal calcPercent(Decimal used, Decimal limit) {
        return (used / limit * 100).setScale(0, RoundingMode.HALF_UP);
    }

    /**
     * Slack に送るメッセージを組み立てる
     */
    private String buildMessage(Decimal percent, Decimal threshold) {
        String msg = '【API使用状況(直近24時間)】\n';
        msg += '● 使用率:' + percent + '%\n';

        // 閾値超過時のみ注意文言を追加
        if (percent > threshold) {
            msg += '*※ しきい値(' + threshold + '%)を超えています ※*\n';
        }

        return msg;
    }
}

まとめ

今回、SalesforceAPI使用状況を定期的にSlackへ通知する仕組みを実装しました。 標準のメール通知では気づきにくかったAPI使用量の変化を、 チーム全体で素早く共有できるようになる点が大きなポイントです。

今後は、通知頻度のチューニングや、増減傾向をもとにした分析など、 実運用の中で得られた知見をもとに改善を進めていく予定です。

おわりに

ビザスクではエンジニアの仲間を募集しています! 少しでもビザスク開発組織にご興味を持たれた方は、ぜひ一度カジュアルにお話ししましょう! recruit.visasq.co.jp