Salesforce Functionsについて

こんにちは！齋藤です。 日々、Salesforce エコシステムで様々なお仕事をさせていただいています。

Salesforce Advent Calendar 2021 の 19日目の記事となります。

なお、 Salesforce Functions の利用・導入にあたっては ライセンス購入が必要となりますが、担当のAEの方へ問い合わせることでトライアル環境なども利用できるケースがあるようです。

本記事作成前（けっこう前）に問合せをさせていただきましたが、お返事なく……よって、本記事としては実際の利用に基づく記載ではなく、導入の際にあらためて読み返すためのまとめとして記載させていただきますので、どうかご容赦ください。

また、おもに未来の自分向けではありますが、いずれ導入される皆様への参考資料となれば幸いです。

## Salesforce Functions 概要

https://developer.salesforce.com/docs/platform/functions/overview

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616950/cb50aa97-fd17-716d-b1b7-fbe4bcca6879.png)

Salesforce Functions は Salesforce Platform 上で サーバレスコンピューティングを実現する仕組みとして、 Winter '22 正式リリースとして提供が開始されたサービスとなります。

先行サービスとして、有名なのは AWS Lambda でしょう。AWS Lambda は AWS上で、一部の制約がありつつも低コストにアプリケーションコードを実行できる仕組みで、FaaS（Function as a Service）の先駆けとして、今ではAWSを活用する多くのビジネスシーンで活用されていますね。まあ、実質今回はHerokuにラップされた中の人って感じ。ややこしいですね。

Lambdaについては自分も2017年頃に社内LT大会で「会議中にこっそり野球中継の速報をSlackのプロフィールごしに見るためにBeautifulSoupとLambdaを使う」という発表をしていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616950/0ed240fb-36f5-e916-aa85-2cec869728c9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616950/cae1a17c-2e79-5a17-7b21-874a9ee9273e.png)

2017年だそうで・・・懐かしい。ナイターの時間帯に会議があるのがそもそも間違っていますけど。

こういうちょっとしたネタで使うこともできますし、S3や別サービスを起点として別のワークロードへ接続するための「受け渡し」を簡単に構築できるのがFaaSの良いところです。

Salesforce Functions に話を戻すと、当然サービスとしては様々な制限・制約があります。

機能の制限について
https://developer.salesforce.com/docs/platform/functions/guide/limits.html

プロセスメモリが1GBとあります。Apexのヒープサイズは6MB/12MB（トランザクション内共有）なので、はるかにたくさんのことができます。ようやく普通になった。

また、最大実行時間は15分間となります。これは AWS Lambda と同じになりますが、これはガバナや各種Salesforceの制限と比べてみると、けっこう長いです。

FaaS、イベントドリブンの仕組みってあまり長時間実行できるイメージを元々持ってなかったのですが、2018年に Lambdaが5分→15分に伸びましたよね。AWSのどこかしかのRegionで動いているであろうFunctionsもそれを踏襲しているように見え、そもそもSalesforceで本来的にはイベントドリブンの代表ソリューションであるApexトリガなどに比べて尚更「非同期かつ大容量」処理に適しているように見えます。

AWSであればLambdaとFargateで使い分けているユースケースを、Salesforceの場合はFunctionsとHerokuの Dynoで使い分けるようなイメージになるかもしれません。

Salesforceプラットフォームの解像度で見ると、

* トリガなどではまかなえないちょっと複雑な連携処理
* 画像やファイル、採番等の加工処理
* 全レコード見るような一括生成作業

あたりは任せても良いのかなと。ApexトリガやPFEvent、バッチだけだと厳しいけど、Heroku立てるほどでもない・・・というケースが良さそうです。請求処理とかは非同期、繁忙閑散あり、大量処理、バッチだとガバナ厳しい、ということで合いそうですね。

## 考慮すべきこと

### リソース管理

FaaSではよくある悩みとして、リソース管理が煩雑になる点。設計時点ではシンプルでも運用時点ではリソース量が増えて管理が煩雑になることが多いです。サーバレス＝サーバの管理が不要というニュアンスですが、環境変数なり設定値の管理自体は手間になることが多いです。LocalSand的なツールや、AWS CDKのような管理の仕組みがほしいところです。キャパシティ計算ツールも用意しておきたい。そこはExcelで良いか。

### 技術選定・スキルメンバ確保

Salesforce PlatformではありますがLWRなどと同様、旧来のApexコードベースとはスキルセットが異なるゆえに、採用する言語等の選定には注意を払う必要があります。
SalesforceへのアクセスはSDKでわかりやすくガイドされているとしても、Node/TypeScriptやPython、姿が大きく変わりつつあるJavaなど、何らかSalesforceの”外側”な技術を使う必要があります。両側の理解が深い人はなかなかいなかったりするので、ある程度社内で活用パターンが構築できるまでは導入リスクがあるのかなと。

様々なリスクを一挙に集めず、小さくトライアルアンドエラーできるところから導入してみるのが良いと思います。

### App Ex化

業務バックエンドでのユースケースが想定され、AppExchange化されている多くのビジネスアプリケーションでも導入の見極めがなされていくと思うのですが、現行Webinarだと2GP（第二世代管理パッケージ）には含められる、という話で、実際にここはチャレンジしてみる必要がありそうです。

## 学び方とリンク

まず、正式リリース後まもなく事例が極めて少ない状況において、少なくとも一読いただきたいのは、Salesforce 阿部さんのこちらになります。ほぼ現時点の最強バイブル。とても包括的にまとまっています。

https://www.youtube.com/watch?v=JjMK47u9YZM

他にもリンク書いておきます。またまとまったら更新しておきたいと思います。それでは！

| カテゴリ | リンク | 補足 |
| - | - | - |
| 概要 | Webinar<br>https://trailhead.salesforce.com/ja/trailblazer-community/files/0694S000000F4eqQAC?tab=overview |  |
|  | 【機能紹介】Salesforce Functions: いま、できること<br>https://www.youtube.com/watch?v=JjMK47u9YZM | 上記の動画版 |
|  | Salesforce Functions / Salesforce Developers<br>https://developer.salesforce.com/docs/platform/functions/overview | 公式ドキュメント。現時点では英語のみ。サンプルコードなどへのリンクあり。 |
| 始めてみる | Salesforce Functions (Pilot版) 環境構築をやってみた<br>https://qiita.com/naoya-shiraishi/items/99d5b14f76263db8f75a | 弊社白石の記事。Evergreen時代の記事になりますが、最初の環境構築から参考にしたい場合に |
|  | https://www.youtube.com/watch?v=c2gq0n3e71M<br>Get Started with Salesforce Functions / Developer Days ANZ | 海外の動画。少し裏側の仕組みなども知ることができます。やってみる系はやっぱり動画だとわかりやすいですね。 |
| 実装サンプル | https://github.com/trailheadapps/ecars/tree/dreamtx/platform-functions/functions | 車の諸経費計算、QRコード生成つき新着情報通知など |