Heroku AppLink と Salesforce スターターガイド
はじめに
Heroku AppLink は、パイロット版の Heroku Integration アドオンとは別のアドオンです。パイロットに参加した場合は、Heroku AppLink アドオンをプロビジョニングし、Heroku アプリを再公開する必要があります。
Heroku AppLink (旧称 Heroku Integration) は、Heroku アプリを Salesforce の API サービスとして公開します。このガイドは、Heroku CLI および Heroku AppLink CLI プラグインを使用して Heroku AppLink アドオンを設定するのに役立ちます。Heroku AppLink を活用してできることについては、「ユースケース」セクションを参照してください。
このガイドでは、Heroku アプリを作成して公開し、Salesforce の外部サービスを使用して Salesforce Flow と Apex でアクションを実行します。
このガイドでは、以下を準備していることを前提としています。
- 確認済みの Heroku アカウント
- Enterprise 以外のユーザーは Eco dynos プランのサブスクリプション、Heroku Enterprise ユーザーの場合は Basic dynos
- 選択した言語に基づくすべての依存関係
- Salesforce 開発者組織、Salesforce Sandbox 組織、またはスクラッチ組織
- (任意) Salesforce CLI をインストールして Salesforce 組織で動作するようにしている
Heroku AppLink プラグインをインストールする
Heroku AppLink CLI プラグインを追加する前に、Heroku CLI がインストールされている必要があります。手順については、「Heroku CLI」を参照してください。
プラグインをインストールするには、次の CLI コマンドを実行します。
$ heroku plugins:install @heroku-cli/plugin-applink
次のコマンドでプラグイン情報を確認します。
$ heroku plugins:inspect @heroku-cli/plugin-applink
└─ @heroku-cli/plugin-applink
...
├─ commands
│ ├─ applink:authorizations
│ ├─ applink:authorizations:info
│ ├─ applink:connections
│ ├─ applink:connections:info
│ ├─ datacloud:authorizations:add
│ ├─ datacloud:authorizations:remove
│ ├─ datacloud:connect
│ ├─ datacloud:data-action-target:create
│ ├─ datacloud:disconnect
│ ├─ salesforce:authorizations:add
│ ├─ salesforce:authorizations:remove
│ ├─ salesforce:connect
│ ├─ salesforce:connect:jwt
│ ├─ salesforce:disconnect
│ ├─ salesforce:publications
│ └─ salesforce:publish
...
アプリを準備する
ローカルのコマンドシェルまたはターミナルで次のコマンドを実行して、サンプルアプリのローカルコピーを作成します。Heroku は、AppLink を使い始めるための Node.js および Python のサンプルアプリを提供しています。
この Git リポジトリには、Fastify Web フレームワークとSalesforce 用の Node.js AppLink SDK を使用したサンプル Node.js アプリが含まれています。サンプル Node.js アプリをコピーするには、次のコマンドを実行します。
$ git clone https://github.com/heroku-reference-apps/applink-getting-started-nodejs
$ cd applink-getting-started-nodejs
この Git リポジトリには、FastAPI Web フレームワークと Salesforce 用の Python AppLink SDK を使用したサンプル Python アプリが含まれています。サンプル Python アプリをコピーするには、次のコマンドを実行します。
$ git clone https://github.com/heroku-reference-apps/applink-getting-started-python
$ cd applink-getting-started-python
Node.js および Python のサンプルアプリは次のような構成になっています。
| Node.js アプリ | Python アプリ | 説明 |
|---|---|---|
api-spec.yaml (必須) |
api-spec.yaml (必須) |
このサンプル API 仕様ファイルを使用すると、Salesforce に外部サービスとしてアプリを公開できます。OpenAPI 3.0 をサポートしています。詳細は、「外部サービス」と OpenAPI を参照してください。 |
heroku-applink.js |
main.py |
このファイルは受信したリクエストを拡充して、リクエストに関するコンテキストを設定する Salesforce プリハンドラーです。このファイルは Salesforce SDK にユーザーと組織のコンテキストを提供し、非同期リクエストの処理に役立ちます。 |
package.json |
pyproject.toml |
このファイルには、プラグインがサポートする SDK の依存関係が含まれています。SDK を使用すると、Salesforce および Data Cloud で DML 操作を簡単に実行できます。 |
Procfile |
Procfile |
起動時にアプリによって実行される内容を定義する Heroku Procfile。Procfile では heroku-applink-service-mesh がアプリを起動します。 |
サンプルアプリには、このチュートリアルで使用する次の API 操作が用意されています。
| Node.js アプリ | Python アプリ | 説明 |
|---|---|---|
GetAccounts (accounts) |
GetAccounts (accounts) |
取引先の配列のリストを返す同期 GET 呼び出し。 |
UnitOfWork (unitofwork) |
取引先、取引先責任者、ケースの詳細を含むペイロードを受信する非同期の POST 呼び出し。作業単位パターンを使用して、レコードに対応する値を割り当てながら関係を維持します。次に、作業単位をコミットし、各オブジェクトのレコード ID を返します。 |
アプリを作成する
dyno を使用してこのチュートリアルを完了した場合、使用量としてカウントされます。このチュートリアルを完了するには、低価格プランのご利用をお勧めします。資格のある学生の皆様は、Heroku for GitHub Students プログラムを通じてプラットフォームクレジットを申請できます。
Heroku でソースコードを受け取る準備をするには、アプリを作成します。
$ heroku create
Creating app... done, ⬢ applink-app
http://applink-app.herokuapp.com/ | https://git.heroku.com/applink-app.git
名前を指定しない場合は、Heroku によってアプリの名前がランダムに生成されます。このガイドでのアプリの名前は applink-app です。
Heroku AppLink buildpack をインストールする
Heroku AppLink Service Mesh 用の Heroku buildpack では、アプリの認証と承認を処理するための Heroku AppLink Service Mesh がインストールされます。サービスメッシュはアプリの前にあるプロキシであり、受信した Salesforce および Data Cloud リクエストをインターセプトして検証および認証します。
インストールするには、次のコマンドを実行します。
$ heroku buildpacks:add heroku/heroku-applink-service-mesh
さらに、nodejs プロジェクトでは heroku/nodejs buildpack を設定します。
$ heroku buildpacks:add heroku/nodejs
Buildpack added. Next release on applink- will use:
1. heroku/heroku-applink-service-mesh
2. heroku/nodejs
Run git push heroku main to create a new release using these buildpacks.
python プロジェクトでは、heroku/python buildpack を設定します。
$ heroku buildpacks:add heroku/python
Buildpack added. Next release on applink- will use:
1. heroku/heroku-applink-service-mesh
2. heroku/python
Run git push heroku main to create a new release using these buildpacks.
Heroku AppLink アドオンをプロビジョニングする
アドオンをプロビジョニングするには、次のコマンドを実行します。
$ heroku addons:create heroku-applink
Creating heroku-applink on ⬢ applink-app... free
Your add-on is being provisioned.
applink-regular-78506 is being created in the background. The app will restart when complete...
Use heroku addons:info applink-regular-78506 to check creation progress
Use heroku addons:docs applink-app to view documentation
プロビジョニング後、アドオンは次の環境設定を作成します。
HEROKU_APPLINK_URL: CLI がリクエストを行うためのベース URL が含まれます。HEROKU_APPLINK_TOKEN: アクセストークンが含まれます。
heroku config コマンドを使用して、環境設定を取得できます。
$ heroku config
=== applink-app Config Vars
HEROKU_APPLINK_API_URL: https://heroku-applink.heroku.com/addons/894792c1-c1e8-4f34-ba32-00000000000
HEROKU_APPLINK_TOKEN: af0a7e7984d4ef28948db6431dc036ae383fcb2f02064cbb0000000000000000
Heroku アプリをデプロイする
次に、アプリをデプロイします。
$ git push heroku main
...
2025-07-07T14:09:33.845077+00:00 heroku[web.1]: State changed from provisioning to starting
2025-07-07T14:09:49.304734+00:00 app[web.1]: time=2025-07-07T14:09:49.304Z level=INFO msg=environment app=applink-app source=heroku-applink-service-mesh go_version:=go1.24.3 os=linux arch=amd64 http_port=31835 version=v0.2.2 environment=local app_host=http://127.0.0.1 app_port=3000
2025-07-07T14:09:49.304754+00:00 app[web.1]: time=2025-07-07T14:09:49.304Z level=INFO msg="Heroku AppLink Service Mesh is up!" app=applink-app source=heroku-applink-service-mesh port=31835
2025-07-07T14:09:49.833835+00:00 app[web.1]:
2025-07-07T14:09:49.833839+00:00 app[web.1]: > applink-app@1.0.0 start
2025-07-07T14:09:49.833840+00:00 app[web.1]: > fastify start -o -a 0.0.0.0 -p $APP_PORT -l debug src/app.js
2025-07-07T14:09:49.833840+00:00 app[web.1]:
2025-07-07T14:09:50.482717+00:00 heroku[web.1]: State changed from starting to up
2025-07-07T14:09:51.111131+00:00 app[web.1]: {"level":30,"time":1751897391110,"pid":63,"hostname":"dyno-bcad42a8-33d4-447f-9adb-0000000000","msg":"Server listening at http://0.0.0.0:3000"}
...
remote: Verifying deploy... done.
To https://git.heroku.com/applink-app.git
* [new branch] main -> main
Heroku アプリをデプロイする他の方法については、「デプロイ」を参照してください。
ユーザー権限を割り当てる
ユーザー権限についての詳細は、「ユーザー権限の割り当て」を参照してください。
Heroku AppLinkで操作を実行するには、Heroku で deploy 権限または operate 権限を持っているか、Heroku アプリの所有者である必要があります。また、Salesforce で Heroku AppLink 権限を持っている必要があります。Salesforce で権限を追加するには、権限セットを作成します。
- Salesforce の [設定] から、
Quick Find(クイック検索) ボックスにPermission Sets と入力して選択します。 New(新規) を選択し、権限セットに名前を付けます。Save(保存) を選択します。Find Settings…(設定の検索…) ボックスにManage Heroku AppLink と入力して選択します。- [システム権限] ページの上部で、
Edit(編集) を選択します。 Manage Heroku AppLink の横にあるチェックボックスをオンにしてSave(保存) を選択し、もう一度Save(保存) を選択します。- [システム権限] ページのナビゲーションバーで、
Manage Assignments(割り当ての管理) を選択します。 Add Assignments(割り当てを追加) を選択します。- 権限セットを追加するユーザーの横にあるチェックボックスをオンにし、
Next(次へ) を選択してからAssign(割り当て) を選択します。
Salesforce 組織に接続する
接続の作成、表示、削除についての詳細は、「アプリ上の接続」を参照してください。
本番組織の場合は、ログイン URL に “https://login.salesforce.com” を使用します。サンドボックス組織とスクラッチ組織の場合は、ログイン URL に “https://test.salesforce.com” を使用します。
すでに組織にログインしている場合、このコマンドはすでにログインしている組織への接続を試みます。別の組織に接続する場合は、このコマンドを実行する前に既存のすべての組織からログアウトしてください。
次に、次のコマンドを使用して Salesforce 組織への接続を作成します。
$ heroku salesforce:connect applink-org --addon applink-regular-78506 -a applink-app
Opening browser to https://login.salesforce.com/services/oauth2/authorize?client_id=…
Press any key to open up the browser to connect ⬢ applink-app to applink-org, or q to exit:
Connecting Salesforce org applink-org to ⬢ applink-app... Connected
組織に初めて接続するときに、Salesforce ログイン情報を入力するためのブラウザウィンドウが表示されます。Heroku に付与するアクセスレベルを承認する必要があります。
接続に関する情報を表示するには、次のコマンドを実行します。
$ heroku applink:connections:info applink-org -a applink-app --addon applink-regular-78506
=== applink-org on ⬢ app applink-app
Connection Type: Salesforce Org
Created By: admin@heroku.com
Created Date: 2025-05-30T18:55:42.863808Z
Id: 127291fa-34c6-4a31-9e19-4dbdfed243af
Instance URL: https://login.test1.my.pc-rnd.salesforce.com
Last Modified: 2025-05-30T18:56:02.282284Z
Last Modified By: admin@heroku.com
Org ID: 00Dbc0000000000000
Status: Connected
Heroku アプリを公開する
詳細は、「アプリを公開する」を参照してください。
アプリを外部サービスとして Salesforce に公開し、それらの外部サービスアクションを Salesforce Flow と Apex で使用できます。アプリを公開するには、次のコマンドを実行します。
$ heroku salesforce:publish api-spec.yaml --client-name HerokuAPI --authorization-connected-app-name MyAppLinkConnectedApp --authorization-permission-set-name MyAppLinkPermSet --connection-name applink-org --addon applink-regular-78506
Publishing ⬢ applink-app to applink-org as HerokuAPI via https://applink.herokudev.com/addons/1c6bb699-2a91-47b3-b55e-8f2e37254684/connections/salesforce/applink-org/apps... done
必要に応じて、アプリの api-spec.yaml OpenAPI 仕様ファイルを編集して Salesforce の接続アプリまたは権限セットを指定し、ユーザーの権限をデフォルトの user モードから user-plus モードに昇格させることができます。
アプリを公開すると、Salesforceの [設定] からアプリとその入力および出力パラメータを確認できます。設定ページで次のことを行います。
- [クイック検索] で
Heroku を検索し、Apps(アプリ) を選択します。 - 公開したアプリを選択します。
![[設定] の Heroku アプリ](https://assets.devcenter.heroku.com/article-images/1750872001-rn_heroku_apps_setup.png)
公開に関する情報を表示するには、次のコマンドを実行します。
$ heroku salesforce:publications -a applink-app
=== Salesforce publications for app ⬢ applink-app
Connection Name Org ID Created Date Created By Last Modified Last Modified By
──────────────── ────────────────── ──────────────────── ──────────────── ───────────────────── ────────────
applink-org 00Dbc0000000000000 2025-05-30T17:34:56Z admin@heroku.com 2025-05-30T17:34:56Z Admin Heroku
アプリの公開に失敗した場合は、Salesforce の [設定] の [リリース状況] で詳細を確認してください。
ログを表示する
アプリのログは heroku logs –tail で確認できます。
$ heroku logs --tail
---
2024-10-28T16:02:15.215250+00:00 app[web.1]: time=2024-10-28T16:02:15.215Z level=INFO msg="Processing request to /accounts..." app=local source=heroku-applink-service-mesh request-id=00Dbc0000000000000-f2f3ed60-2dbd-4edd-b707-9dee97d89c7c
...
2024-10-28T16:02:15.215332+00:00 app[web.1]: time=2024-10-28T16:02:15.215Z level=INFO msg="Authenticating Salesforce request for org 00Dbc0000000000000, domain https://mydomain.demo.my.salesforce.com..." app=local source=heroku-applink-service-mesh request-id=00Dbc0000000000000-f2f3ed60-2dbd-4edd-b707-9dee97d89c7c
...
2024-10-28T16:02:15.398893+00:00 app[web.1]: {"level":30,"time":1730131335396,"pid":37,"hostname":"dyno-f34267e3-3d00-453d-a3b4-a16ab26a773b","reqId":"00Dbc0000000000000-f2f3ed60-2dbd-4edd-b707-9dee97d89c7c","msg":"Querying invoking org (00Dbc0000000000000) Accounts..."}
...
2024-10-28T16:02:15.482442+00:00 app[web.1]: {"level":30,"time":1730131335482,"pid":37,"hostname":"dyno-f34267e3-3d00-453d-a3b4-a16ab26a773b","reqId":"00Dbc0000000000000-f2f3ed60-2dbd-4edd-b707-9dee97d89c7c","res":{"statusCode":200},"responseTime":86.56547299958766,"msg":"request completed"}
Apex で公開した App アクションを呼び出す
詳細は、「Heroku AppLink アプリの呼び出し」を参照してください。
アプリを公開したときに --authorizationPermissionSetName フラグを設定した場合、公開したアプリを呼び出す前に、生成された権限セットをユーザーに割り当てる必要があります。
このサンプルコードは、公開された Heroku API を Apex クラスで呼び出す方法を示しています。
同期呼び出し:
public class InvokeHerokuAPI {
public static void getAccounts() {
try {
herokuapplink.HerokuAPI herokuAPI = new herokuapplink.HerokuAPI();
herokuapplink.HerokuAPI.GetAccounts_Response response = herokuAPI.GetAccounts();
System.debug(JSON.serializePretty(response));
} catch (herokuapplink.HerokuAPI.GetAccounts_ResponseException ex) {
System.debug('FAILED!: ' + ex.responseCode + ' ' + ex.defaultResponse);
}
}
}
非同期呼び出し:
public class InvokeHerokuAPI {
public static void postUnitOfWork() {
try {
herokuapplink.HerokuAPI_UnitOfWork_IN_body body = new herokuapplink.HerokuAPI_UnitOfWork_IN_body();
body.accountName = 'Heroku AppLink ' + Datetime.now().getTime();
body.lastName = 'Smith';
body.subject = 'New Heroku AppLink Case!';
herokuapplink.HerokuAPI.UnitOfWork_Request request = new herokuapplink.HerokuAPI.UnitOfWork_Request();
request.body = body;
herokuapplink.HerokuAPI HerokuAPI = new herokuapplink.HerokuAPI();
herokuapplink.HerokuAPI.UnitOfWork_Response response =
HerokuAPI.UnitOfWork(request, new UnitOfWorkCallback(), Datetime.now().addHours(1));
System.debug(JSON.serializePretty(response));
} catch (herokuapplink.HerokuAPI.UnitOfWork_ResponseException ex) {
System.debug('FAILED!: ' + ex.responseCode + ' ' + ex.defaultResponse);
} catch (Exception ex) {
System.debug(ex.getMessage());
}
}
global class UnitOfWorkCallback extends herokuapplink.HerokuAPI.UnitOfWork_Callback {
global override void unitOfWorkResponse(List<UnitOfWork_unitOfWorkResponse_Callback> callbacks) {
System.debug(JSON.serialize(callbacks));
}
}
}
Developer Console から Execute Anonymous を使用して、InvokeHerokuAPI Apex コードを呼び出します。
メニューから Debug (デバッグ) を選択し、Execute Anonymous (匿名で実行) を選択します。InvokeHerokuAPI.getAccounts(); を使用して同期の GetAccounts APIを呼び出し、InvokeHerokuAPI.postUnitOfWork(); を使用して非同期の UnitOfWork を呼び出します。

Flow で公開した App アクションを呼び出す
詳細は、「Heroku AppLink アプリの呼び出し」を参照してください。
この例では、商談が作成または更新されたときに Heroku アプリを呼び出して取引先のリストを取得するフローを作成します。
- Salesforce の [設定] の
Flows(フロー) ページでNew Flow(新規フロー) を選択します。 Start From Scratch(最初から開始) を選択し、Next(次へ) を選択します。Record-Triggered Flow(レコードトリガーフロー) を選択し、Create(作成) を選択します。Configure Start(開始を設定) パネルで次を行います。- オブジェクトとして
Opportunity(商談) を選択します。 - フローをトリガーするには、
A record is created or updated(レコードが作成または更新された) を選択します。 - 条件の要件には
None(なし) を選択します。 - フローを最適化するには、
Actions and Related Records(アクションと関連レコード) を選択します。
- オブジェクトとして
- 開始要素の下に要素を追加し、
Action(アクション) を選択します。 Search Actions(アクションを検索) パネルで、公開したアプリの名前 (HerokuAPI) を検索し、Get Accounts(取引先を取得) アクションを選択します。- アクションの名前 (
GetAccountsInvoke など) を入力します。 Save(保存) を選択し、フローの名前を入力して、もう一度Save(保存) を選択します。

接続、公開済みアプリ、アドオンを削除する
接続を削除する
この操作を行うと組織への接続が削除され、元に戻すことはできません。
Salesforce 組織から接続を削除するには、次のコマンドを実行します。
$ heroku salesforce:disconnect applink-org -a applink-app
› Warning: Destructive action
› This command disconnects the connection applink-org from add-on --addon applink-regular-78506 on app ⬢ applink-app.
›
To proceed, type applink-org or re-run this command with --confirm applink-org: applink-org
Disconnecting Salesforce org applink-org from applink-app ... done
公開したアプリを削除する
この操作を行うと、Salesforce から公開されたアプリが削除されます。アプリアクションを削除する前に、既存のコードまたはリソースがアプリアクションを参照していないことを確認してください。
サービスの [アクション] 列の矢印をクリックし、Delete (削除) を選択して、Salesforce から公開したアプリを削除します。公開されたアプリのページで Delete (削除) を選択することもできます。

アドオンを削除する
アドオンを削除すると、すべての接続、承認、パブリケーションが削除されます。アドオンを削除する前に、アプリケーション内で承認が参照されている場所がないことを確認するようお勧めします。
Heroku AppLink アドオンを削除するには、次のコマンドを実行します。
$ heroku addons:destroy heroku-applink
その他の資料
他の Heroku AppLink ガイドもご覧ください。
お勧めのリソースを以下に紹介します。