Heroku ConnectでSalesforceデータを簡単に読み取る

2021.01.12

HerokuはSalesforce.comが提供するPaaS(Platform as a Service)で、Heroku ConnectによってSalesforce組織のデータを簡単に読み書きすることができます。Heroku Connectを使うと、SalesforceとHerokuの間にPostgresが介在し、このPostgresを通して、SalesforceとHerokuの双方向でデータを読み書きできます。

この記事では、Heroku Connectを使ってSalesforceの取引先責任(Contact)を取得して表示してみます。

Herokuのサインアップ

signup.heroku.comでサインアップします。 サインアップは無料で行えます。

この記事ではNode.jsを使うので、Primary development languageにはNode.jsを選びます。

Herokuのサインアップ画面

Herokuへのサンプルアプリケーションのデプロイ

https://github.com/heroku/node-js-getting-startedをサンプルアプリケーションとしてHerokuにデプロイします。リンク先のDeploy to Herokuボタンをクリックします。

サンプルアプリケーションのGitHubリポジトリ

ボタンをクリックするとHerokuに遷移しますので、アプリケーション名を設定して(または自動生成に任せて)Deploy appボタンをクリックします。ここではアプリ名をmy-nodejs-first-appとしました。

Herokuの新規アプリデプロイ画面

デプロイが無事成功したら(Your app was successfully deployed.と画面に表示されたら)ViewボタンをクリックしてアプリケーションがHeroku上で稼働していることを確認します。

Heroku(Node.js)サンプルアプリケーションのトップ画面

Heroku CLIのインストール

Herokuは管理画面から様々な操作、設定を行うことができますが、CLIをインストールしてコマンドラインから操作、設定を行うこともできます。Heroku CLIはThe Heroku CLIに記載されている方法でインストールできます。

例えば、macOSでは次のシェルコマンドでインストールします。

$ brew tap heroku/brew && brew install heroku

下記のコマンドでversion情報をチェックし、Heroku CLIがインストールされていることを確認します。

$ heroku --version
heroku/7.47.7 darwin-x64 node-v12.16.2

Heroku CILをインストールしたら、heroku loginコマンドでHerokuにログインします。

$ heroku login
heroku: Press any key to open up the browser to login or q to exit: # <= Enterを押すとブラウザが立ち上がるので、ブラウザでHerokuにログインする。
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/***
Logging in... done
Logged in as shinchi.takahiro@classmethod.jp

Heroku CLIを使って変更を行う

デプロイしたアプリケーションに変更を加えてみます。

まずは、ローカルにcloneします。

$ git clone https://github.com/heroku/node-js-getting-started.git
$ cd node-js-getting-started
$ heroku git:remote -a <your-app-name>
set git remote heroku to https://git.heroku.com/<your-app-name>.git

テキストエディタで./views/pages/index.ejsを開き、<h1>Getting Started on Heroku with Node.js</h1><h1>Hello, Heroku. Getting Started on Heroku with Node.js</h1>に変更します。

変更をgitにコミットして、Herokuにリリースします。

$ git commit -am "Add Hello, Heroku"
$ git push heroku # pushするとHerokuへのリリースも行われる

アプリケーションをブラウザで開いて修正が反映されていることを確認します。

見出しを修正したHeroku(Node.js)サンプルアプリケーションのトップ画面

Heroku Connectのセットアップ

Heroku Connectがアドオンされていないことを確認します。

$ heroku addons
No add-ons for app my-nodejs-first-app.

Heroku Connectを次のコマンドでアドオンします。

$ heroku addons:create herokuconnect
Creating herokuconnect on ⬢ my-nodejs-first-app... free
Use `heroku addons:open herokuconnect-slippery-12380 -a my-nodejs-first-app` to finish setup
Created herokuconnect-slippery-12380
Use heroku addons:docs herokuconnect to view documentation

セットアップを行うために上記の3行目に表示されたコマンドを実行するとブラウザが立ち上がります。

heroku addons:open herokuconnect-slippery-12380 -a my-nodejs-first-app

Heroku Connectのセットアップ画面

Setup Connectionボタンをクリックします。

Heroku ConnectのProvision Connection画面

Add a database nowボタンをクリックします。

Heroku Postgresのインストール画面

Install Heroku Postgresボタンをクリックします。

Heroku Postgresのプロビジョニング設定画面

Heroku Postgresのプロビジョニング設定画面が開くので、アドオンプランとプロビジョニングするアプリケーション名(<your-app-name>)を指定して、Submit Order Formボタンをクリックします。

Herokuアプリケーションのリソース一覧画面

アプリケーションのResources画面に遷移するので、Heroku ConnectとHeroku PostgresがAdd-onsにリストされていることを確認します。

Heroku ConnectのProvision Connection(Heroku Postgresアドオン後)

Heroku ConnectのProvision Connection画面に戻り、リロードします。 DATABASE_URLに設定したHeroku Postgresアドオンが表示されていることを確認して、Nextボタンをクリックします。

Heroku ConnectのAuthorize Connection画面

Heroku Connectで接続するSalesforce組織のEnvironment(本番組織、Sandbox、カスタムドメイン)とAPIバージョンを指定してAuthorizeボタンをクリックします。Salesforceのログイン画面にリダイレクトするので、接続するSalesforce組織のログイン情報でログインします。

Heroku ConnectのSalesforceにおけるアクセス許可画面

Heroku ConnectによるSalesforce組織へのアクセス許可を求められるので、許可します。

Heroku Connectのステータス画面

Heroku ConnectのOverviewページに遷移します。無事接続されていれば、CONNECTION STATUSがIDLEになっています。

Heroku Connectのマッピング設定

Heroku Connectを使って、接続したSalesforce組織の取引先責任者(Contact)の情報を取り出せるようにマッピング設定を行います。

Heroku ConnectのMappingsページに遷移します。

Heroku Connectマッピング画面

Create Mappingボタンをクリックします。マッピングするSalesforceのオブジェクト選択画面が表示されます。

Heroku Connectの取引先責任者へのマッピング設定画面

Contactを選択すると、マッピング方向(Salesforce => Database、Database => Salesforce)の設定と、同期するフィールドの指定を行う画面が表示されます。

Heroku ConnectでのContactのマッピング設定画面

ここでは、Mapping Fieldsで、Last Name、First Name、Emailにチェックを入れて同期対象にして、Saveボタンを押します。

Heroku Connectを使った取引先責任者情報の読み出し

Node.jsのpgモジュールをインストールします。

$ npm install pg

./index.jsをテキストエディタで開き、次の差分を適用します。

% git diff index.js
diff --git a/index.js b/index.js
index 7138336..be57411 100644
--- a/index.js
+++ b/index.js
@@ -2,9 +2,27 @@ const express = require('express')
 const path = require('path')
 const PORT = process.env.PORT || 5000

+const { Pool } = require('pg');
+const pool = new Pool({
+  connectionString: process.env.DATABASE_URL,
+  ssl: { rejectUnauthorized: false }
+});
+
 express()
   .use(express.static(path.join(__dirname, 'public')))
   .set('views', path.join(__dirname, 'views'))
   .set('view engine', 'ejs')
   .get('/', (req, res) => res.render('pages/index'))
+  .get('/db', async (req, res) => {
+      try {
+        const client = await pool.connect()
+        const result = await client.query('SELECT * FROM salesforce.contact');
+        const results = { 'results': (result) ? result.rows : null};
+        res.render('pages/db', results );
+        client.release();
+      } catch (err) {
+        console.error(err);
+        res.send("Error " + err);
+      }
+    })
   .listen(PORT, () => console.log(`Listening on ${ PORT }`))

SalesforceのデータをSELECT * FROM salesforce.contactというように、通常のSQLで取得できるようになっています。

編集が終わったらコミットしてプッシュします。

$ git add -A .
$ git commit -m "create db page" -v
$ git push heroku

https://<your-app-name>.herokuapp.com/db/にブラウザでアクセスして、接続したSalesforce組織のContact情報が一覧表示されることを確認します。

Heroku Connectで読み出したContactの一覧

まとめ

Heroku ConnectによってHerokuとSalesforce組織を接続し、Salesforceの取引先責任者(Contact)の情報を読み出す方法についてみてみました。簡単にSaleforceの情報をPaaSであるHerokuで取り出し、アプリケーションで利用できることがおわかりいただけたかと思います。

Heroku Connectは双方向の同期が可能ですので、今後はHeroku => Salesforceの同期について検証してみたいと思います。