Latest

Heroku AppLinkの使い方 (クエリ)

Heroku AppLinkのサンプルコードがもう少し欲しいところ...で、まずはクエリのサンプルでも備忘録として残してみる ※サンプルコードは Node.js 版のSDKを使ったものに限定です。SDKのリポジトリは https://github.com/heroku/heroku-applink-nodejs を参照してください。 1. 1つのオブジェクトだけクエリする import * as salesforcesdk from "@heroku/applink"; const sfdc_id = 'xxxxx'; async function sample () { const sdk = salesforcesdk.init(); // ※Authorized Userを使います const org = await sdk.addons.applink.getAuthorization(process.env.HEROKU_

By Takahiro Yonei

AI音声文字起こし

GPT-4o Transcribeちゃん(https://platform.openai.com/docs/models/gpt-4o-transcribe)、なかなかの認識精度でして、お気に入りでしたが、2,000 max output tokes という結構な縛りがありまして… 短い音声入れている間は気づかなかったのですが、12分ぐらいの音声を入れると、妙に出力が短くて、気づいたという… 提案段階で気づいてよかったわぁ "usage": { "type": "tokens", "total_tokens": 9714, "input_tokens": 7666, "input_token_details": { "text_tokens"

By Hiroki Matsumoto

Heroku Vibes pilotの発表

Dreamforce 2025直前にHerokuチームから凄そうなのがやってきた!Vibe Codingに振り回される私たちのメシアなのか、それとも更なるカオスなのか! Exciting news, developers and literally everyone else! We're launching the Heroku Vibes pilot, our game-changing collaborative agent. Get ready to #VibeCode your projects like never before. #HerokuVibes 🔗 https://t.co/fwsJ3TcuJo pic.twitter.com/cPOsA7RyYW — Heroku (@heroku) October 8, 2025 Welcome to Heroku

By Hiroki Matsumoto

Heroku AppLinkで特定のAPIはサービスメッシュをバイパスしたい

Heroku AppLinkを導入すると、Heroku Routerからやってくるリクエストを全てサービスメッシュが一旦受け取って、認証チェックを行う。 構築しているHerokuアプリケーションが、Salesforceからのリクエストのみを受け付けるもの、という前提があるならそれで問題ない。 しかし、特定のAPIは別のWebサービスからのリクエストを処理したい...という場合には非常に困るのである。 例えば、一般公開しているECサイトの商品データを返すAPIと、Salesforceからしか受け付けないAPIを、1つのアプリケーションに同居させたい場合がこれにあたる。 一般公開しているECサイトは、当然ながらSalesforceの認証情報なんぞ持っていない。したがって、そんなサイトからのリクエストはサービスメッシュが拒否してしまい、サイトに商品データを表示することができなくなる。 こんな場合、Herokuアプリケーション側で特定のURLパターンではサービスメッシュをバイパスするよう設定することができる(ようになった)。 1. バイパス用の設定ファイルを設置する Heroku

By Takahiro Yonei

Dig into the Heroku AppLink (not a deep dive) - サービスメッシュについて

Heroku AppLinkを導入するにあたり、heroku-applink-service-mesh をビルドパックとして追加するようドキュメントに明記されている。 https://devcenter.heroku.com/articles/getting-started-heroku-applink-agentforce#install-the-heroku-applink-buildpack このサービスメッシュの役割について少し触れてみよう。 サービスメッシュは、Heroku RouterとHerokuアプリケーション(自前で作るアプリケーション)の間に入って、HerokuアプリケーションのAPIを守る役割を持っている。 大まかに言えば以下のような流れとなる。 1. 外部からのリクエストが、Heroku Routerにやってくる 2. Heroku Routerがweb dynoに向かってリクエストを転送する 3. web dynoに組み込まれたサービスメッシュが、リクエスト内容をチェックする 4. リクエスト内容がokであれば、Herokuアプリケーションにリク

By Takahiro Yonei

salesforce-store-hours-implementation-2

Holidayオブジェクト Salesforce DevelopersSalesforce Developer WebsiteSalesforce BusinessHoursオブジェクト Salesforce DevelopersSalesforce Developer WebsiteSalesforce どちらも標準オブジェクトだね。 似ているけど、OperatingHoursHolidayオブジェクトは、Salesforce Scheduler が必要なオブジェクトで、今回の話からは割愛。Holidayオブジェクトは使うみたいだけど、BusinessHoursとリレーションがあるわけじゃなさそう。 https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_businesshours.htm このクラスのメソッドで計算できそう。

By Hiroki Matsumoto

Salesforceで営業日カレンダー

Salesforceにて、営業日カレンダーを標準機能で表現するなら休日(Holiday)を使えば…と思うが、店舗と本社とかカレンダーが複数あるときは、営業時間(BusinessHour)を使うことで表現ができる。 これにはハマりどころがあって、普通のライセンス構成(Service Cloudとか)だとBusinessHourとHolidayのリレーションは存在しないので、SOQLではクエリできないのだ。なのでフローで休日判定しましょうというのも単一の休日ならできるのだが、営業時間を絡めると詰んでしまう。 一方でApexで計算することはできる、ということらしいので検証する必要がある。

By Hiroki Matsumoto

Heroku リクエストタイムアウトはアプリケーション側にも忘れずに

(本記事はしくじり案件です) Heroku Router は、dynoとの接続確立後30秒の間に何かしらレスポンスを受け取らなかった場合、リクエストを強制終了してしまう。そのため、Herokuアプリケーション側では30秒以内に処理を完了させておく必要がある。 処理自体を30秒以内に完了させるよう実装することは非常に重要なことではあるが、もう1つ大事なポイントがドキュメントに記載されている。 それはアプリケーション側でも、30秒(もしくはそれ以下)のタイムアウト処理を実装する必要がある、ということだ。 Request Timeout | Heroku Dev CenterLearn about the behavior of the Heroku routers, connection termination and connection timeouts.Dev Center 接続が強制終了されると、クライアントに対してエラーページが発行されます。リクエストを処理していた Web dyno はそのまま放置され、応答を送信できなくてもリクエストの処理を続行します。 その後、後続

By Takahiro Yonei

Salesforce Integrationライセンスで標準オブジェクトを扱うには

システム連携用に「Salesforce Integration」ライセンスを使う場合の備忘録として。 「Salesforce Integration」ライセンスでプロファイルを用意しても、そのプロファイルのオブジェクト設定に「取引先」「取引先責任者」などの標準オブジェクトが一覧に表示されない。 したがって、システム連携用のユーザーに割り当てても、そのままだと標準オブジェクト(取引先、取引先責任者など)にアクセスできない。 以下の記事がその対応策となる。 Salesforce HelpSalesforce Salesforce API インテグレーション権限セットライセンスは、Salesforce インテグレーションユーザーライセンスの機能を拡張し、標準のシステム管理者プロファイルで一般的に使用できるのと同じユーザー権限やオブジェクト権限の多くを提供します。 [設定] の [組織情報] ページで Salesforce API インテグレーション権限セットライセンスを確認して検討し、何が使用可能になるのかを理解します。「Minimum Access - API Only Int

By Takahiro Yonei

Salesforce Integration 3

プラットフォームイベントについてはアクセスできたが、気になるのがプロファイルの権限が無視されているような挙動をしているので、要確認。 プラットフォームイベントを挟んでフローで処理することで、API Integrationライセンスの制限を回避できる。このパターンはよくやるらしい… graph LR; Cloudflare -->|OAuth2 JWT Bearer Token フロー| ApexREST -->|プラットフォームイベント| Salesforceフロー --> メール

By Hiroki Matsumoto

Excel の Office スクリプトに値を渡す

スクリプトのユーザー入力を取得する - Office Scriptsユーザーが自分のエクスペリエンスを制御できるように、Office スクリプトにパラメーターを追加します。Microsoft Learno365devx 現時点では、パラメーター化されたスクリプトのデータの入力を求めるメッセージが表示されるのは、Web ユーザーの Excel のみです。 Power Automate フローでは、パラメーターを使用してスクリプトにデータを渡すこともできます。 とあるのだが、検証用のスクリプトをローカルPCで流してみると、 こ、これはいったい!?

By Hiroki Matsumoto