みなさん、こんにちは!外部のアプリケーションから 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:アプリの作成
- 設定画面を開く
- クイック検索で「外部クライアントアプリケーションマネージャー」を検索
- 「新規外部クライアントアプリケーション」をクリック
- 基本情報を入力
- 外部クライアントアプリケーション名: 任意(例: My API Client)
- 取引先責任者メール: 自分のメールアドレス
ステップ 2:OAuth 設定
※ curl コマンドで簡単に試してみる場合の設定。詳しくは 4. OAuth フローの選び方 を参照
- 「OAuth を有効化」にチェック
- 以下を設定:
- コールバック URL:
https://login.salesforce.com/services/oauth2/callback - OAuth 範囲: 「API を使用してユーザーデータを管理 (api)」を追加
- フローの有効化: 「クライアントログイン情報フローを有効化」にチェック
- セキュリティ: 「サポートされる認証フローにProof Key for Code Exchange (PKCE) 拡張を要求」のチェックを外す
- コールバック URL:
- 「作成」をクリック
ステップ 3:ポリシー設定
ここが外部クライアントアプリケーションの特徴的な部分です。設定(開発者向け)とポリシー(管理者向け)が明確に分かれています。
- 作成後、「ポリシー」タブを開く
- 「編集」をクリック
- 「クライアントログイン情報フローを有効化」にチェック
- 「(ユーザー名) として実行」に API を実行するユーザーを設定
- 「保存」をクリック
※ 「実行ユーザー」の設定は Client Credentials Flow に必須です。このユーザーの権限で API が実行されます。
ステップ 4:認証情報の取得
- 「設定」タブを開く
- OAuth 設定 から アプリケーション設定 内にある「コンシューマ鍵と秘密」をクリック
- 受信したメールに記載されているコードで検証し、本人確認を完了
- コンシューマー鍵とコンシューマーの秘密をコピーして安全に保管
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.com や test.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 で試してみてください。
参考リソース(英語)
- Salesforce Help: Create an External Client App
- Salesforce Help: External Client Apps and Connected Apps
- Salesforce Help: Comparison of Connected Apps and External Client Apps