みなさん、こんにちは!外部のアプリケーションから Salesforce のデータにアクセスしたいと思ったことはありませんか?この記事では、最小手順で外部クライアントアプリケーションを使って Salesforce API にアクセスする方法について解説します。

動画での解説はこちらからご覧いただけます。

※この記事の内容を試すには、API アクセス権限のある Salesforce 組織が必要です。まだ環境をお持ちでない方は、無料で取得可能な Developer Edition をご利用ください。

この記事のポイント

  • 外部クライアントアプリケーションは、接続アプリケーションの「次世代版」
  • 開発者と管理者の役割が明確に分離された設計

1. なぜ「外部クライアントアプリケーション」なのか

接続アプリケーションの課題

従来の接続アプリケーション(Connected App)は長年にわたり Salesforce の外部連携を支えてきましたが、いくつかの課題がありました。

  • セキュリティ: デフォルトでグローバルに公開されるため、意図しないアクセスのリスク
  • 役割の混在: 開発者と管理者の設定が同じ場所に混在し、管理が複雑
  • パッケージング: 2GP(第2世代パッケージング)での利用に手動ステップが必要
  • 設定反映の遅延: 変更が反映されるまで最大10分かかる場合がある

外部クライアントアプリケーションのメリット

外部クライアントアプリケーションは、これらの課題を解決するために設計されました。

観点 接続アプリケーション 外部クライアントアプリケーション
セキュリティ デフォルトでグローバル公開 デフォルトでローカル・セキュア
役割分離 設定が混在 「設定」と「ポリシー」で明確に分離
パッケージング 1GP/2GP(2GPは制限あり) 2GP ネイティブ対応
設定反映 最大10分 即時反映

Salesforce は外部クライアントアプリケーションを「次世代の接続アプリケーション」と位置づけており、今後の新規開発ではこちらの利用が推奨されています。

接続アプリケーションから外部クライアントアプリケーションへの移行機能も提供されています。(英語)

2. 事前準備

外部クライアントアプリケーションを作成する前に、以下を確認してください。

  • Salesforce 組織(Developer Edition、Sandbox、または本番環境)
  • API アクセス権限のあるユーザー
  • 組織の My Domain URL(後で使用します)

My Domain URL は、設定画面のクイック検索で「私のドメイン」と入力して確認できます。

3. 外部クライアントアプリケーションの設定

ステップ 1:アプリの作成

  1. 設定画面を開く
  2. クイック検索で「外部クライアントアプリケーションマネージャー」を検索
  3. 「新規外部クライアントアプリケーション」をクリック
  4. 基本情報を入力
    • 外部クライアントアプリケーション名: 任意(例: My API Client)
    • 取引先責任者メール: 自分のメールアドレス

ステップ 2:OAuth 設定

※ curl コマンドで簡単に試してみる場合の設定。詳しくは 4. OAuth フローの選び方 を参照

  1. 「OAuth を有効化」にチェック
  2. 以下を設定:
    • コールバック URL: https://login.salesforce.com/services/oauth2/callback
    • OAuth 範囲: 「API を使用してユーザーデータを管理 (api)」を追加
    • フローの有効化: 「クライアントログイン情報フローを有効化」にチェック
    • セキュリティ: 「サポートされる認証フローにProof Key for Code Exchange (PKCE) 拡張を要求」のチェックを外す
  3. 「作成」をクリック

ステップ 3:ポリシー設定

ここが外部クライアントアプリケーションの特徴的な部分です。設定(開発者向け)とポリシー(管理者向け)が明確に分かれています。

  1. 作成後、「ポリシー」タブを開く
  2. 「編集」をクリック
  3. 「クライアントログイン情報フローを有効化」にチェック
  4. 「(ユーザー名) として実行」に API を実行するユーザーを設定
  5. 「保存」をクリック

※ 「実行ユーザー」の設定は Client Credentials Flow に必須です。このユーザーの権限で API が実行されます。

ステップ 4:認証情報の取得

  1. 「設定」タブを開く
  2. OAuth 設定 から アプリケーション設定 内にある「コンシューマ鍵と秘密」をクリック
  3. 受信したメールに記載されているコードで検証し、本人確認を完了
  4. コンシューマー鍵コンシューマーの秘密をコピーして安全に保管

4. OAuth フローの選び方

外部クライアントアプリケーションは、今回ご紹介している手順以外にも複数の OAuth フローをサポートしています。ユースケースに応じて適切なフローを選択してください。

Client Credentials Flow(推奨:サーバー間連携)

特徴:

  • ユーザーのログイン操作が不要
  • サーバー間(M2M)連携に最適
  • 事前に「実行ユーザー」の設定が必要

適したユースケース: バッチ処理、定期的なデータ同期、バックエンドサービス

認可コードフロー + PKCE(推奨:ユーザー操作を伴うアプリ)

特徴:

  • ユーザーがブラウザでログイン・認可を行う
  • PKCE(Proof Key for Code Exchange)により認可コードの横取り攻撃を防止
  • Consumer Secret が不要(公開クライアント向け)

適したユースケース: Web アプリケーション、モバイルアプリ、SPA(シングルページアプリケーション)

認可コードフロー(PKCE なし)

特徴:

  • ユーザーがブラウザでログイン・認可を行う
  • Consumer Secret が必要
  • PKCE より設定がシンプル

適したユースケース: サーバーサイドで Secret を安全に管理できる Web アプリケーション

どれを選ぶべきか(一例)

ユースケース 推奨フロー
バッチ処理・定期同期 Client Credentials
モバイルアプリ 認可コード + PKCE
SPA(React, Vue など) 認可コード + PKCE
サーバーサイド Web アプリ 認可コード(PKCE 任意)
CLI ツール Client Credentials または 認可コード

5. curl での動作確認

Client Credentials Flow を使って、curl で API アクセスを確認してみましょう。

トークン取得

成功すると、以下のようなレスポンスが返ります:

API 呼び出し

取得した access_token を使って Account データを取得します:

※ Mac のターミナル(zsh)では、トークンに ! が含まれる場合があるため、シングルクォートで囲むことをおすすめします。

6. よくあるエラーと対処法

invalid_grant: request not supported on this domain

原因: login.salesforce.comtest.salesforce.com を使用している

対処: 組織固有の My Domain URL を使用してください

unsupported_grant_type: grant type not supported

原因: Client Credentials Flow が有効化されていない

対処: ポリシー設定で「クライアントログイン情報フローを有効化」にチェックを入れてください

invalid_client_id

原因: コンシューマー鍵が間違っている、またはアプリがまだ有効化されていない

対処:

  • コンシューマー鍵を再確認
  • アプリ作成直後は数分待ってから再試行

INVALID_SESSION_ID: Session expired or invalid

原因: アクセストークンが無効または期限切れ

対処: トークンを再取得してください

まとめ

外部クライアントアプリケーションは、Salesforce が提供する次世代の外部連携ソリューションです。従来の接続アプリケーションと比較して、セキュリティ、役割分離、パッケージングの面で大きく改善されています。まずは Developer Edition で試してみてください。


参考リソース(英語)