Heroku ConnectでSalesforceデータを簡単に読み取る
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へのサンプルアプリケーションのデプロイ
https://github.com/heroku/node-js-getting-startedをサンプルアプリケーションとしてHerokuにデプロイします。リンク先のDeploy to Herokuボタンをクリックします。
ボタンをクリックするとHerokuに遷移しますので、アプリケーション名を設定して(または自動生成に任せて)Deploy appボタンをクリックします。ここではアプリ名をmy-nodejs-first-app
としました。
デプロイが無事成功したら(Your app was successfully deployed.と画面に表示されたら)ViewボタンをクリックしてアプリケーションがHeroku上で稼働していることを確認します。
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 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
Setup Connectionボタンをクリックします。
Add a database nowボタンをクリックします。
Install Heroku Postgresボタンをクリックします。
Heroku Postgresのプロビジョニング設定画面が開くので、アドオンプランとプロビジョニングするアプリケーション名(<your-app-name>
)を指定して、Submit Order Formボタンをクリックします。
アプリケーションのResources画面に遷移するので、Heroku ConnectとHeroku PostgresがAdd-onsにリストされていることを確認します。
Heroku ConnectのProvision Connection画面に戻り、リロードします。 DATABASE_URLに設定したHeroku Postgresアドオンが表示されていることを確認して、Nextボタンをクリックします。
Heroku Connectで接続するSalesforce組織のEnvironment(本番組織、Sandbox、カスタムドメイン)とAPIバージョンを指定してAuthorizeボタンをクリックします。Salesforceのログイン画面にリダイレクトするので、接続するSalesforce組織のログイン情報でログインします。
Heroku ConnectによるSalesforce組織へのアクセス許可を求められるので、許可します。
Heroku ConnectのOverviewページに遷移します。無事接続されていれば、CONNECTION STATUSがIDLE
になっています。
Heroku Connectのマッピング設定
Heroku Connectを使って、接続したSalesforce組織の取引先責任者(Contact)の情報を取り出せるようにマッピング設定を行います。
Heroku ConnectのMappingsページに遷移します。
Create Mappingボタンをクリックします。マッピングするSalesforceのオブジェクト選択画面が表示されます。
Contactを選択すると、マッピング方向(Salesforce => Database、Database => Salesforce)の設定と、同期するフィールドの指定を行う画面が表示されます。
ここでは、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によってHerokuとSalesforce組織を接続し、Salesforceの取引先責任者(Contact)の情報を読み出す方法についてみてみました。簡単にSaleforceの情報をPaaSであるHerokuで取り出し、アプリケーションで利用できることがおわかりいただけたかと思います。
Heroku Connectは双方向の同期が可能ですので、今後はHeroku => Salesforceの同期について検証してみたいと思います。