⾃⼰紹介
l カレンダーアプリ「Calsket」、⼈材紹介業界向け地図アプリ
「MatchingMap」など複数のAppExchangeアプリを開発。
l 顧問Salesforceプログラマとして他社のAppExchangeアプリ開
発にも携わる。
l SWTT登壇3回、Salesforceハックチャレンジ2014最優秀賞。
l 個⼈では今年5⽉にSOQL構築ツール「LWC SOQL Builder」をリ
リース(ぜひ使ってください)。
株式会社co-meeting
代表取締役CEO ⽊村 篤彦
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のデータを元に請求書を作成する
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 ⾯倒なコールバック/トークンリフレッシュ/署名の検証などを勝⼿
にやってくれる = セキュア
おすすめの認証⽅法
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 満たせない要件は、デメリットを理解した上で他の⽅法を組み合わせる。