外部クライアントアプリケーションを作成する
SFDX プロジェクトを作成する
環境が設定できたので、次は外部クライアントアプリケーションを作成します。そのためには、SFDX プロジェクトが必要です。
- コンピューター上のアプリケーションを作成する場所に
ECA Metadata
(ECA メタデータ) という名前のフォルダーを作成します。
- VS Code でこのフォルダーを開きます。
- VS Code の [Terminal (ターミナル)] を開いて、作成したフォルダーを表示します。
- [Terminal (ターミナル)] で次のコマンドを実行して、標準テンプレートを使って
ecaViaMetadata
という名前の Salesforce DX プロジェクトを作成します。
sf project generate --name ecaViaMetadata --template standard
Dev Hub 組織を承認する
接続アプリケーションを使って、コンピューター上の SFDX プロジェクトを Trailhead Playground Dev Hub に接続します。このステップではドメインが必要になります。[Setup (設定)] でドメインを検索するには、[Quick Find (クイック検索)] ボックスに My Domain
(私のドメイン) と入力し、[My Domain (私のドメイン)] をクリックします。
- VS Code で、SFDX プロジェクトの ECA Metadata フォルダーを開きます。
- VS Code の [Terminal (ターミナル)] で次のコマンドを実行します。このとき、実行前に <my domain> を組織のドメインに置き換えてください。
sf org login web --set-default-dev-hub --alias ecaViaMetadata --instance-url https://<my domain>
- Web ベージが開いたら、Trailhead Playground のログイン情報でログインします。
- 組織へのアクセスを許可します。
外部クライアントアプリケーション用 SFDX プロジェクトを設定する
- VS Code で
sfdx-project.json
ファイルを開きます。
- ドメインの sfdcLoginUrl パラメーターを更新します。
[Setup (設定)] でドメインを検索するには、[Quick Find (クイック検索)] ボックスに My Domain
(私のドメイン) と入力し、[My Domain (私のドメイン)] をクリックします。
-
config という名前のディレクトリを展開し、スクラッチ組織定義ファイルを開きます。定義ファイルの名前は project-scratch-def.json です。機能設定に
ExternalClientApps
とExtlClntAppSecretExposeCtl
を追加します。
"features": ["EnableSetPasswordInApi", "ExternalClientApps", "ExtlClntAppSecretExposeCtl"],
- プロジェクトディレクトリ内に package.xml マニフェストファイルを作成します。
- 次の内容を package.xml ファイルに追加します。
<?xml version="1.0" encoding="UTF-8"?> <Package xmlns="http://soap.sforce.com/2006/04/metadata"> <types> <members>*</members> <name>ExternalClientApplication</name> </types> <version>61.0</version> </Package>
- force-app/main/default ディレクトリ内に
externalClientApps
という名前のフォルダーを作成します。
- externalClientApps フォルダーに
ecaViaMetadata.eca-meta.xml
という名前のファイルを追加します。これが外部クライアントアプリケーションのヘッダーファイルになります。
- 次の内容をヘッダーファイルに追加します。
<?xml version="1.0" encoding="UTF-8"?> <ExternalClientApplication xmlns="http://soap.sforce.com/2006/04/metadata"> <contactEmail>eca_metadata@example.com</contactEmail> <description>External client app Metadata API creation</description> <distributionState>Local</distributionState> <isProtected>false</isProtected> <label>ecaViaMetadata</label> </ExternalClientApplication>
厳密には、以上で外部クライアントアプリケーションは完成です。このままこの設定をリリースすることもできます。その場合、Playground の外部クライアントアプリケーションマネージャーに基本の外部クライアントアプリケーションとして表示されます。ただし、有用なアプリケーションを作るには、プラグインが必要です。最初のモジュールで作成したものと同様の OAuth プラグインを設定しましょう。OAuth 2.0 Web サーバーフロー向けの OAuth プラグインを設定するには、いくつかの修正とファイルの新規作成が必要です。
OAuth プラグインを有効化して設定する
あらゆる設定が 1 つのファイルにまとめられた接続アプリケーションとは異なり、外部クライアントアプリケーションには、2 つの設定ファイルと 1 つのポリシーファイルが含まれます。グローバル OAuth 設定ファイルには、保護する必要がある OAuth コンシューマー鍵やコンシューマーの秘密などの機密項目が含まれます。OAuth 設定ファイルには、外部クライアントアプリケーションのより機密性が低い設定がすべて含まれます。Web サーバーフロー向けに外部クライアントアプリケーションを設定するにあたり、ポリシーファイルを作成する必要はありません。ポリシーは設定ファイルに基づいて設定されるためです。外部クライアントアプリケーションのリリース時に、OAuth ポリシーファイルが生成されます。
グローバル OAuth 設定ファイルを作成する
- force-app/main/default ディレクトリ内に
extlClntAppGlobalOauthSets
という名前のフォルダーを作成します。
- extlClntAppGlobalOauthSets フォルダーに
ecaViaMetadataGlblOAuth.ecaGlblOauth-meta.xml
という名前のファイルを追加します。
- VS Code で ecaViaMetadataGlblOAuth.ecaGlblOauth-meta.xml を開き、次の内容を追加します。
<?xml version="1.0" encoding="UTF-8"?> <ExtlClntAppGlobalOauthSettings xmlns="http://soap.sforce.com/2006/04/metadata"> <callbackUrl>https://openidconnect.herokuapp.com/callback</callbackUrl> <externalClientApplication>ecaViaMetadata</externalClientApplication> <isConsumerSecretOptional>false</isConsumerSecretOptional> <isIntrospectAllTokens>false</isIntrospectAllTokens> <isPkceRequired>false</isPkceRequired> <isSecretRequiredForRefreshToken>true</isSecretRequiredForRefreshToken> <label>ecaViaMetadataglobalset</label> <shouldRotateConsumerKey>false</shouldRotateConsumerKey> <shouldRotateConsumerSecret>false</shouldRotateConsumerSecret> </ExtlClntAppGlobalOauthSettings>
- グローバル OAuth 設定ファイルを保存します。
OAuth 設定ファイルを作成する
- force-app/main/default ディレクトリ内に
extlClntAppOauthSettings
という名前のフォルダーを作成します。
- extlClntAppOauthSettings フォルダーに
ecaViaMetadataSettings.ecaOauth-meta.xml
という名前のファイルを追加します。
- VS Code で ecaViaMetadataSettings.ecaOauth-meta.xml を開き、次の内容を追加します。
<?xml version="1.0" encoding="UTF-8"?> <ExtlClntAppOauthSettings xmlns="http://soap.sforce.com/2006/04/metadata"> <commaSeparatedOauthScopes>Api, Web, OpenID</commaSeparatedOauthScopes> <externalClientApplication>ecaViaMetadata</externalClientApplication> <label>ECA via Metadata Oauth Settings</label> </ExtlClntAppOauthSettings>
- OAuth 設定ファイルを保存します。
ヘッダーファイルで設定ファイルを参照する
2 つの設定ファイルの作成が完了したので、続いてこれらのファイルを外部クライアントアプリケーションに組み込む必要があります。ヘッダーファイルは、外部クライアントアプリケーションを構成するすべてのファイルのリストです。
- package.xml マニフェストファイルを開きます。
- 3 つの OAuth ファイルそれぞれにエントリを追加します。
<?xml version="1.0" encoding="UTF-8"?> <Package xmlns="http://soap.sforce.com/2006/04/metadata"> <types> <members>*</members> <name>ExternalClientApplication</name> </types> <types> <members>*</members> <name>ExtlClntAppOauthSettings</name> </types> <types> <members>*</members> <name>ExtlClntAppGlobalOauthSettings</name> </types> <types> <members>*</members> <name>ExtlClntAppOauthConfigurablePolicies</name> </types> <version>61.0</version> </Package>
- package.xml マニフェストファイルを保存します。
外部クライアントアプリケーションをリリースする
これで外部クライアントアプリケーションが適切に設定されたので、続いてアプリケーションをリリースします。アプリケーションをリリースするとポリシーファイルが作成されるので、リリース後に外部クライアントアプリケーションを取得して、生成されたファイルを SFDX プロジェクトに取り込みます。
- 次のコマンドを実行して、外部クライアントアプリケーションをリリースします。このとき <username> を Dev Hub 承認時のログインに使用したユーザー名に置き換えます。
sf project deploy start --manifest package.xml --target-org <Username>
- Trailhead Playground から外部クライアントアプリケーションを取得します。このとき <username> を Dev Hub 承認時のログインに使用したユーザー名に置き換えます。
sf project retrieve start --manifest package.xml --target-org <username>
アプリケーションを検証する
外部クライアントアプリケーションが正常にリリースされてから、このアプリケーションを取得すると、SFDX プロジェクトにそれまではなかったポリシーファイルが表示されます。
また、外部クライアントアプリケーションマネージャーを開くと、ecaViaMetadata という名前の新規外部クライアントアプリケーションが表示されます。興味がある方は、[My Domain (私のドメイン)] と OAuth コンシューマー鍵および秘密を取得して、それをすべて OpenID Connect Playground に接続することで、一連の OAuth Web サーバーフローを確認できます。
リソース
- Salesforce ヘルプ: メタデータ API を使用したローカル外部クライアントアプリケーションの作成
- Salesforce ヘルプ: Understanding Metadata API (メタデータ API について)
- Salesforce ヘルプ: Deploying and Retrieving Metadata (メタデータのリリースと取得)
- Salesforce ヘルプ: How Salesforce Developer Experience Changes the Way You Work (Salesforce Developer Experience は開発業務をどう変えるのか)
- Trailhead: API の基本