Slide 1

Slide 1 text

代表取締役CEO ⽊村 篤彦 SaaSベンダーがAppExchange アプリを作るときの連携パターン

Slide 2

Slide 2 text

今⽇話すこと/話さないこと 話すこと • どんな外部連携⽅法がある か︖ • そのメリット・デメリット • 連携⽅法の選び⽅ 話さないこと • 具体的な⼿順

Slide 3

Slide 3 text

⾃⼰紹介 l カレンダーアプリ「Calsket」、⼈材紹介業界向け地図アプリ 「MatchingMap」など複数のAppExchangeアプリを開発。 l 顧問Salesforceプログラマとして他社のAppExchangeアプリ開 発にも携わる。 l SWTT登壇3回、Salesforceハックチャレンジ2014最優秀賞。 l 個⼈では今年5⽉にSOQL構築ツール「LWC SOQL Builder」をリ リース(ぜひ使ってください)。 株式会社co-meeting 代表取締役CEO ⽊村 篤彦

Slide 4

Slide 4 text

https://lwc-soql-builder.github.io/ LWC SOQL Builder

Slide 5

Slide 5 text

Happy Work! Happy Life! 株式会社co-meetingについて 6 Salesforce関連アプリの開発と提供を2014年10⽉から⾏っています。 主な事業 l Salesforce AppExchangeアプリの開発(8本リリース) l 顧問Salesforceプログラマ(開発⽀援サービス)の提供 l Salesforceの利⽤を促進させる機能開発 l AppExchangeアプリの開発/技術⽀援

Slide 6

Slide 6 text

エンジニアは来年夏には募集したい Happy Work! Happy Life! どんな会社か l 少⼈数でフルリモートの会社 l 楽しく仕事をしようと努⼒している l 製品を作るのが好き 熊本県 プログラマ ⽯川県 プログラマ 東京都 プログラマ x 2 セールス/マーケ/サポート... x 1 総務 x 1

Slide 7

Slide 7 text

普段使い可能なSalesforce専⽤カレンダー Calsket

Slide 8

Slide 8 text

紹介業務の効率と品質を上げる⼈材紹介/派遣業向け地図アプリ MatchingMap 9

Slide 9

Slide 9 text

顧問Salesforceプログラマ事例 freee for Salesforce 10

Slide 10

Slide 10 text

連携パターンの話の前に

Slide 11

Slide 11 text

AppExchangeアプリの仕組み パッケージ v2.0, v1.5, v1.4... SF組織A SF組織B SF組織C SF組織Z ・・・ v2.0 v1.5 インストール/アップグレード v1.5 v1.5 l 普通のSaaSとは異なり、 顧客のSalesforce組織に インストールされる l ⼀部の組織のみ別バー ジョンということもでき る。 l Salesforce組織の制限は 共有される。

Slide 12

Slide 12 text

SaaSベンダーが AppExchangeアプリを 作るときの連携パターン

Slide 13

Slide 13 text

よくあるユースケース 1. ⾃社サービスのデータとSalesforceのデータを紐付けて表⽰したい。 l 例)取引先ページに関連する請求書⼀覧を表⽰する l 「⾃社サービスのデータをSalesforceに同期したい」という話になる。 2. Salesforceのデータを元に⾃社サービスの処理を実⾏したい。 l 例)Salesforceのデータを元に請求書を作成する

Slide 14

Slide 14 text

4つの外部連携⽅法 1. Salesforce → ⾃社API 2. ⾃社サービス → Salesforce API 3. ⾃社サービスの画⾯埋め込み(Canvas) 4. プラットフォームイベント/変更データキャプチャを⾃社サービス で購読

Slide 15

Slide 15 text

Salesforce ↓ ⾃社API

Slide 16

Slide 16 text

Salesforce → ⾃社API パッケージ API Salesforce組織 ⾃社サービス l Salesforceから⾃社APIを呼ぶ。 l パッケージ内のApexからHTTPリク エストを投げる。 l 指定ログイン情報を使うとノー コードで認証処理を実現できる ケースも有る。 HTTPリクエスト

Slide 17

Slide 17 text

メリット l 制限が⼀番ゆるい l AppExchangeアプリの実装をSalesforceで完結できる。 l ⾃社サービス側はAPIを⽤意するのみ。

Slide 18

Slide 18 text

デメリット l ⾃社サービスの更新データをリアルタイムにSalesforceに取り込め ない l 変更の取り込みは定期バッチで定期的に⾃社APIを呼ぶしかない。 l Apexで書く必要がある。 l 複雑な処理を実⾏する場合はApexのガバナ制限との戦いが始まる。

Slide 19

Slide 19 text

気をつけるべき制限 l コールアウトの実⾏回数: 100回/トランザクション l コールアウトのタイムアウト: 120秒 l コールアウトの最⼤サイズ︓6MB(同期)、12MB(⾮同期) l ⾮同期処理の実⾏回数等: いろいろある 参考)Apex ガバナ制限 | Salesforce Developer の制限および割り当てクイックリファレンス | Salesforce Developers

Slide 20

Slide 20 text

認証⽅法 1. 指定ログイン情報 2. Apexで独⾃実装

Slide 21

Slide 21 text

指定ログイン情報 l ノーコードで認証APIを呼べるSalesforce標準の仕組み l Google、Twitter、Microsoft等メジャーサービスをサポート l OpenID Connect、JWT、BASIC認証等をサポート l ⾯倒なコールバック/トークンリフレッシュ/署名の検証などを勝⼿ にやってくれる = セキュア

Slide 22

Slide 22 text

指定ログイン情報の使い⽅ 認証プロバイダを設定 Google Calendar APIを呼ぶ例

Slide 23

Slide 23 text

指定ログイン情報の使い⽅ 指定ログイン情報の設定 ID種別でエンドユーザごとの認証か 固定ユーザでの認証かを設定できる

Slide 24

Slide 24 text

指定ログイン情報の使い⽅ ユーザ毎に認証 この操作を各エンドユーザに やってもらう必要がある

Slide 25

Slide 25 text

指定ログイン情報の使い⽅ ApexでAPIを実⾏ トークンリフレッシュも署名の 検証もしてくれる

Slide 26

Slide 26 text

おすすめの認証⽅法 APIを新規に作る 独⾃実装でAPIキー認証 指定ログイン情報 (OpenID Connect) 指定ログイン情報 (カスタム認証プロバイダ) Apexで独⾃実装 ユーザ毎認証 OpenID Connect の実装がんばる OpenID Connect 対応している YES NO NO NO NO NO YES YES YES おすすめ

Slide 27

Slide 27 text

⾃社サービス ↓ Salesforce API

Slide 28

Slide 28 text

⾃社サービス → Salesforce API API Salesforce組織 ⾃社サービス l ⾃社サービスからSalseforce APIを呼ぶ l 認証はOAuth認可コードフローが基本 l 接続アプリケーションはパッケージに⼊ れなくていい ②HTTPリクエスト 接続アプリケーション パッケージ開発組織 こちらは顧客組織 Salesforce 認可サーバー ①アクセストークン取得 たぶんここで クライアント シークレットの検証 どこの組織でもいい

Slide 29

Slide 29 text

Salesforce APIは何ができる︖ l REST APIでだいたいなんでもできる l SOQL実⾏、レコードのCRUD、オブジェクトメタデータ取得… l Apex RESTサービスで独⾃処理をAPI化も簡単 l Metadata API/Tooling APIなどもあるがあまり使わない

Slide 30

Slide 30 text

メリット l ⾃社サービスからSalesforceへのデータ同期がリアルタイムに可能 l Apexをあまり書かなくても済む(かもしれない) l しかし、Salesforceの画⾯に表⽰したい場合(ほぼ確実にある)、 Salesforce環境での開発は必要。

Slide 31

Slide 31 text

デメリット l APIの実⾏回数に組織ごとの制限がある l 制限に達すると他のシステム連携にも影響が出る l Salesforceのデータ更新をリアルタイムに⾃社サービスに取り込め ない l SF→⾃社APIと同じく定期バッチで取り込むしかない

Slide 32

Slide 32 text

認証⽅法 l OAuth 2.0認可コードフローが⼀般的 l 接続アプリケーションはパッケージに含めず、パッケージ開発組織に作ればよい。 l JWTベアラートークンフローは管理パッケージでエラーになる不具合があり、 使えない。 l 顧客組織で接続アプリケーションを作ってもらえば動くが顧客ごとに証明書を発⾏する必 要があり現実的ではない。 参考)Known Issues - User fails to get access_token via JWT for Connected App from Managed Package

Slide 33

Slide 33 text

動作例 これはインプリシットフローですが、 ⾒た⽬の動きは変わりません

Slide 34

Slide 34 text

例 • デモ⼊れたい

Slide 35

Slide 35 text

⾃社サービスの画⾯埋め込み (Canvas)

Slide 36

Slide 36 text

⾃社サービスの画⾯埋め込み(Canvas) iframe Salesforce画⾯ ⾃社サービス l WebアプリをSalesforce画⾯に iframeで埋め込む l 署名付きリクエストという仕組み で認証を⾏う l アクセストークンを含むユーザ情 報が送られてくるのでAPIも呼べる ①署名付きリクエスト ②HTML API Salesforce組織 ③APIリクエスト

Slide 37

Slide 37 text

メリット l Salesforceの知識があまりなくても、Salesforce上で表⽰する画⾯ が開発できる。

Slide 38

Slide 38 text

デメリット l 画⾯描画が遅い l Salesforceが推していない(と思う) l データ連携するわけではない=Salesforceで活⽤できない l 接続アプリケーションをパッケージに含める必要がある。 l SFDXとの相性が悪い。スクラッチ組織作る度にクライアントシークレットを変える必要が ある。 l スコープをリリース後に変更することができない。 l 第2世代管理パッケージで扱いが厄介&不具合があるらしい。

Slide 39

Slide 39 text

動作例 Herokuで動くWebアプリをコンポー ネントとして埋め込んでいる

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

プラットフォームイベント/変更 データキャプチャを ⾃社サービスで購読

Slide 42

Slide 42 text

プラットフォームイベント/変更データセット パッケージ Salesforce組織 ⾃社サービス l イベント駆動のメッセージング アーキテクチャ l Salesforceでイベントを送信し、 外部でリアルタイムに受信できる l 変更データセットはレコードの変 更イベントを通知 l 購読はCometDで接続する。 イベントバス イベントの公開 イベントの購読 しかし、本番で使ったことがなくノウハウないです

Slide 43

Slide 43 text

メリット l Salesforceのデータ変更をリアルタイムに⾃社サービスに取り込め る。 l ⼤量データ処理に向いているらしい。

Slide 44

Slide 44 text

デメリット l EEで最⼤50イベントなどの制限がある。 l 顧客組織でシステム連携に影響を与える可能性がある。 l ⾃社サービスがCometDクライアントになり、システムが複雑にな る。

Slide 45

Slide 45 text

おすすめの連携⽅法

Slide 46

Slide 46 text

おすすめの連携⽅法 l Salesforceの制限を消費する⽅法はAppExchangeアプリではあまりおすすめ しません。 l Salesforce REST API / プラットフォームイベント l API呼び出し回数制限を超え他のシステム連携が⽌まるなどトラブルの元になる。 l Salesforce→⾃社APIをまず採⽤する。 l 満たせない要件は、デメリットを理解した上で他の⽅法を組み合わせる。

Slide 47

Slide 47 text

他の連携⽅法を選ぶケース ⾃社サービス→ Salesforce API •⾃社サービス→Salesforce をリアルタイム反映したい。 Canvas •Salesforce上で⾃社サービ スの全機能を表⽰したい •Salesforceの開発をどうし てもやりたくない •コールアウトが制限にひっ かかる プラットフォームイベント •Salesforceのイベント通知 先が複数ある •⼤量のイベント通知をした い

Slide 48

Slide 48 text

https://www.co-meeting.co.jp/