Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

2020年12月11日に開催された「SaaS x Salesforce Developers」で発表した際の資料です。

イベントURL: https://alp.connpass.com/event/194735/
アーカイブ動画URL: https://youtu.be/Pbhi2IFchXI?t=2531

08e4449e96aefe61269704f8ba28bc2e?s=128

Atsuhiko Kimura

December 12, 2020
Tweet

Transcript

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

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

    • 具体的な⼿順
  3. ⾃⼰紹介 l カレンダーアプリ「Calsket」、⼈材紹介業界向け地図アプリ 「MatchingMap」など複数のAppExchangeアプリを開発。 l 顧問Salesforceプログラマとして他社のAppExchangeアプリ開 発にも携わる。 l SWTT登壇3回、Salesforceハックチャレンジ2014最優秀賞。 l

    個⼈では今年5⽉にSOQL構築ツール「LWC SOQL Builder」をリ リース(ぜひ使ってください)。 株式会社co-meeting 代表取締役CEO ⽊村 篤彦
  4. https://lwc-soql-builder.github.io/ LWC SOQL Builder

  5. Happy Work! Happy Life! 株式会社co-meetingについて 6 Salesforce関連アプリの開発と提供を2014年10⽉から⾏っています。 主な事業 l Salesforce

    AppExchangeアプリの開発(8本リリース) l 顧問Salesforceプログラマ(開発⽀援サービス)の提供 l Salesforceの利⽤を促進させる機能開発 l AppExchangeアプリの開発/技術⽀援
  6. エンジニアは来年夏には募集したい Happy Work! Happy Life! どんな会社か l 少⼈数でフルリモートの会社 l 楽しく仕事をしようと努⼒している

    l 製品を作るのが好き 熊本県 プログラマ ⽯川県 プログラマ 東京都 プログラマ x 2 セールス/マーケ/サポート... x 1 総務 x 1
  7. 普段使い可能なSalesforce専⽤カレンダー Calsket

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

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

  10. 連携パターンの話の前に

  11. 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組織の制限は 共有される。
  12. SaaSベンダーが AppExchangeアプリを 作るときの連携パターン

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

    例)Salesforceのデータを元に請求書を作成する
  14. 4つの外部連携⽅法 1. Salesforce → ⾃社API 2. ⾃社サービス → Salesforce API

    3. ⾃社サービスの画⾯埋め込み(Canvas) 4. プラットフォームイベント/変更データキャプチャを⾃社サービス で購読
  15. Salesforce ↓ ⾃社API

  16. Salesforce → ⾃社API パッケージ API Salesforce組織 ⾃社サービス l Salesforceから⾃社APIを呼ぶ。 l

    パッケージ内のApexからHTTPリク エストを投げる。 l 指定ログイン情報を使うとノー コードで認証処理を実現できる ケースも有る。 HTTPリクエスト
  17. メリット l 制限が⼀番ゆるい l AppExchangeアプリの実装をSalesforceで完結できる。 l ⾃社サービス側はAPIを⽤意するのみ。

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

  19. 気をつけるべき制限 l コールアウトの実⾏回数: 100回/トランザクション l コールアウトのタイムアウト: 120秒 l コールアウトの最⼤サイズ︓6MB(同期)、12MB(⾮同期) l

    ⾮同期処理の実⾏回数等: いろいろある 参考)Apex ガバナ制限 | Salesforce Developer の制限および割り当てクイックリファレンス | Salesforce Developers
  20. 認証⽅法 1. 指定ログイン情報 2. Apexで独⾃実装

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

    にやってくれる = セキュア
  22. 指定ログイン情報の使い⽅ 認証プロバイダを設定 Google Calendar APIを呼ぶ例

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

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

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

  26. おすすめの認証⽅法 APIを新規に作る 独⾃実装でAPIキー認証 指定ログイン情報 (OpenID Connect) 指定ログイン情報 (カスタム認証プロバイダ) Apexで独⾃実装 ユーザ毎認証

    OpenID Connect の実装がんばる OpenID Connect 対応している YES NO NO NO NO NO YES YES YES おすすめ
  27. ⾃社サービス ↓ Salesforce API

  28. ⾃社サービス → Salesforce API API Salesforce組織 ⾃社サービス l ⾃社サービスからSalseforce APIを呼ぶ

    l 認証はOAuth認可コードフローが基本 l 接続アプリケーションはパッケージに⼊ れなくていい ②HTTPリクエスト 接続アプリケーション パッケージ開発組織 こちらは顧客組織 Salesforce 認可サーバー ①アクセストークン取得 たぶんここで クライアント シークレットの検証 どこの組織でもいい
  29. Salesforce APIは何ができる︖ l REST APIでだいたいなんでもできる l SOQL実⾏、レコードのCRUD、オブジェクトメタデータ取得… l Apex RESTサービスで独⾃処理をAPI化も簡単

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

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

  32. 認証⽅法 l OAuth 2.0認可コードフローが⼀般的 l 接続アプリケーションはパッケージに含めず、パッケージ開発組織に作ればよい。 l JWTベアラートークンフローは管理パッケージでエラーになる不具合があり、 使えない。 l

    顧客組織で接続アプリケーションを作ってもらえば動くが顧客ごとに証明書を発⾏する必 要があり現実的ではない。 参考)Known Issues - User fails to get access_token via JWT for Connected App from Managed Package
  33. 動作例 これはインプリシットフローですが、 ⾒た⽬の動きは変わりません

  34. 例 • デモ⼊れたい

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

  36. ⾃社サービスの画⾯埋め込み(Canvas) iframe Salesforce画⾯ ⾃社サービス l WebアプリをSalesforce画⾯に iframeで埋め込む l 署名付きリクエストという仕組み で認証を⾏う

    l アクセストークンを含むユーザ情 報が送られてくるのでAPIも呼べる ①署名付きリクエスト ②HTML API Salesforce組織 ③APIリクエスト
  37. メリット l Salesforceの知識があまりなくても、Salesforce上で表⽰する画⾯ が開発できる。

  38. デメリット l 画⾯描画が遅い l Salesforceが推していない(と思う) l データ連携するわけではない=Salesforceで活⽤できない l 接続アプリケーションをパッケージに含める必要がある。 l

    SFDXとの相性が悪い。スクラッチ組織作る度にクライアントシークレットを変える必要が ある。 l スコープをリリース後に変更することができない。 l 第2世代管理パッケージで扱いが厄介&不具合があるらしい。
  39. 動作例 Herokuで動くWebアプリをコンポー ネントとして埋め込んでいる

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

  42. プラットフォームイベント/変更データセット パッケージ Salesforce組織 ⾃社サービス l イベント駆動のメッセージング アーキテクチャ l Salesforceでイベントを送信し、 外部でリアルタイムに受信できる

    l 変更データセットはレコードの変 更イベントを通知 l 購読はCometDで接続する。 イベントバス イベントの公開 イベントの購読 しかし、本番で使ったことがなくノウハウないです
  43. メリット l Salesforceのデータ変更をリアルタイムに⾃社サービスに取り込め る。 l ⼤量データ処理に向いているらしい。

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

  45. おすすめの連携⽅法

  46. おすすめの連携⽅法 l Salesforceの制限を消費する⽅法はAppExchangeアプリではあまりおすすめ しません。 l Salesforce REST API / プラットフォームイベント

    l API呼び出し回数制限を超え他のシステム連携が⽌まるなどトラブルの元になる。 l Salesforce→⾃社APIをまず採⽤する。 l 満たせない要件は、デメリットを理解した上で他の⽅法を組み合わせる。
  47. 他の連携⽅法を選ぶケース ⾃社サービス→ Salesforce API •⾃社サービス→Salesforce をリアルタイム反映したい。 Canvas •Salesforce上で⾃社サービ スの全機能を表⽰したい •Salesforceの開発をどうし

    てもやりたくない •コールアウトが制限にひっ かかる プラットフォームイベント •Salesforceのイベント通知 先が複数ある •⼤量のイベント通知をした い
  48. https://www.co-meeting.co.jp/