Deep-dive on the Next Gen Platform. Join the Webinar!

Skip Navigation
Show nav
Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
Hide categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
      • Dyno Management
      • Dyno Concepts
      • Dyno Behavior
      • Dyno Reference
      • Dyno Troubleshooting
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • Developer Tools
    • コマンドライン
    • Heroku VS Code Extension
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリーとインテグレーション
    • 継続的統合
  • 言語サポート
    • Node.js
      • Working with Node.js
      • Troubleshooting Node.js Apps
      • Node.js Behavior in Heroku
    • Ruby
      • Rails のサポート
      • Bundler の使用
      • Working with Ruby
      • Ruby Behavior in Heroku
      • Troubleshooting Ruby Apps
    • Python
      • Working with Python
      • Python でのバックグランドジョブ
      • Python Behavior in Heroku
      • Django の使用
    • Java
      • Java Behavior in Heroku
      • Working with Java
      • Maven の使用
      • Spring Boot の使用
      • Troubleshooting Java Apps
    • PHP
      • PHP Behavior in Heroku
      • Working with PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres スターターガイド
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
      • Migrating to Heroku Postgres
    • Heroku Data For Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • AI
    • Working with AI
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
      • シングルサインオン (SSO)
    • Private Space
      • インフラストラクチャネットワーキング
    • コンプライアンス
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Salesforce とのインテグレーション
  • Heroku Enterprise
  • Heroku Connect (Salesforce 同期)
  • Heroku Connect を使用した Salesfore へのデータの書き込み

Heroku Connect を使用した Salesfore へのデータの書き込み

日本語 — Switch to English

この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。

最終更新日 2022年12月01日(木)

Table of Contents

  • 変更のポーリング
  • Connect で Salesforce に書き込む方法
  • SOAP と Bulk API
  • 書き込みアルゴリズム
  • 必要な Heroku Postgres 接続
  • オブジェクト関係の処理
  • トリガーログの理解
  • 書き込み同期の問題の防止
  • 書き込みエラー
  • 大量のデータを読み取り/書き込みマッピングにインポートする
  • Heroku Connect でのカスタムトリガーの使用
  • Postgres のデータが Salesforce と一致しない理由は?
  • 判明したパフォーマンスの問題の診断

データベースと Salesforce 組織の間で最も効率的にデータを転送する方法が、Heroku Connect によって自動的に選択されます。データの変更量と、Salesforce API 操作の詳細を考慮に入れたベストプラクティスが採用されます。この記事では、Heroku Connect で Postgres から Salesforce にデータを書き込む方法について説明します。

変更のポーリング

Heroku Connect では、pg_notify​ トリガーからの更新を検出しない限り、Heroku Postgres データベースの更新を 2 分おきにポーリングします。これらのポーリングは最短でも 10 秒おきに制限されています。データベースをポーリングして変更を検出すると、Connect は Salesforce への変更の書き戻しを開始します。これらの間隔は設定できません。1 セットの書き込みが完了すると、新しいポーリングサイクルが始まり、2 分間または pg_notify​ からの新しい変更イベントを待機します。

Salesforce への書き込み操作が進行中の間、Heroku Connect は追加のデータベース更新をポーリングしません。さらに、すべてのマッピングにわたって順番に連続で書き込み操作を実行します。ある書き込みのセットを別のセットよりも優先するメカニズムはありません。

Connect で Salesforce に書き込む方法

Heroku Postgres で行われた変更が、Heroku Connect によって読み取り/書き込み​マッピングに捕捉され、Salesforce に送信されます。

読み取り/書き込みテーブルが更新されると、Postgres トリガーが発動し、_trigger_log​ (トリガーログ​) テーブルへの挿入によって変更が捕捉されます。すべての読み取り/書き込みデータテーブルは、Heroku Connect アドオンごとに 1 つの _trigger_log​ テーブルを共有します。詳細は、Heroku Connect のトリガーログ​に関する記事を参照してください。

捕捉されたすべての変更は、Heroku Connect によって、アドオンごとに 1 つのプロセスで処理されます。書き込みアルゴリズムやその他の要件に応じて、SOAP または Bulk API を使用して Salesforce に変更が送信されます。詳細は、SOAP と Bulk API の選択​に関する項目を参照してください。この単一の書き込み​プロセスは、マップされたオブジェクトに対する Salesforce からの読み取り​からは独立して、またそれと同時に実行されます。

TRUNCATE​ 操作は _trigger_log​ テーブルに捕捉されません。Salesforce で個別にレコードを削除してください。 Connect はトランザクション境界内の変更を監視できず、データベースで発生したとおりの厳密な書き込み順序を強制することはできません。

 

書き込み可能でない列もあります。詳細は、「システムフィールド: 読み取り専用の列​」を参照してください。

 

デフォルトでは、Heroku Connect が Salesforce にデータを書き込むとき、割り当てルールは実行されません。リードとケースに対してデフォルトの割り当てルールを有効にする場合は、サポートチケット​を作成してください。複数の接続がある場合は、接続ごとに設定を有効にできるよう、必ずそのことをお伝えください。

SOAP と Bulk API

双方向 (“読み取り/書き込み”) の同期が設定されている場合、Heroku Connect では SOAP または Bulk API を使用して Salesforce に変更を書き込みます。これらの API 呼び出しは、Salesforce API の制限までのカウントには含まれません。

Bulk API​ は、サイズの大きいデータセットに適用される操作に最適化されています。これらのシナリオでは、SOAP API を使用するよりも高速です。次のすべての条件が満たされている場合、Connect では自動的に Bulk API の使用を試みます。

  • 順序付き書き込みアルゴリズムを使用するように接続が設定されている。
  • 一意の識別子がマッピングに指定されている。
  • 2,000 ~ 10,000 件連続した同じタイプ (INSERT​、UPDATE​、または DELETE​) の変更が特定のオブジェクトに対して行われる (例: “Lead” オブジェクトへの 5000 件の INSERT)。
  • 接続用の Salesforce API のバージョンが v39 以上に設定されている。

Bulk API を使用して 10,000 件を超えるレコードの変更を書き込むとき、レコードは 10,000 件単位でバッチ処理されます。

次の場合、Heroku Connect では、SOAP API を使用して Salesforce 組織に変更を書き込みます。

  • 処理されるレコードが 2,000 件より少ない。
  • Bulk API を使用する条件が満たされていない。

Heroku Connect では、できるだけ多くのレコード (最大 200 レコード​) を 1 つの SOAP メッセージに詰め込もうとします。

読み取り専用マッピングread-only mappings](https://devcenter.heroku.com/articles/reading-data-from-salesforce-with-heroku-connect#api-call-usage)​では、レコード数とバッチサイズのしきい値が異なります。

書き込みアルゴリズム

Heroku Connect では Salesforce への書き込み時に、順序付き書き込みとマージ書き込みの 2 つのアルゴリズムをサポートしています。このユースケースで Salesforce への書き込みが最も効率的なアルゴリズムを選択します。接続の書き込みアルゴリズムは、Manage Connection​ (接続の管理) ページで確認および選択できます。

順序付き書き込みアルゴリズムは、Bulk API​ を使用するための前提条件です。マージ書き込みアルゴリズムを使用している場合、Salesforce への一括書き込みを実行できません。

書き込みアルゴリズムの選択は、接続レベル​で行われます。すべての読み取り/書き込みマッピングで、同じ書き込みアルゴリズムが使用されます。

順序付き書き込みアルゴリズム

Heroku Connect では、すべてのレコード変更をトリガーログ​に捕捉します。順序付き書き込み​アルゴリズムは、デフォルトで使用されるアルゴリズムです。レコードをメッセージに詰め込む効率が低下する場合でも、トリガーログからの変更の順序を常に保持します。順序付き書き込みアルゴリズムの優位性は、個別の操作として個々の変更を捕捉することです。Salesforce オブジェクトの履歴には、これらの変更が反映されます。

順序付き書き込みアルゴリズムの潜在的な落とし穴

同じレコードを短時間のうちに更新すると、個々の変更が個別に処理されるため、結果として同期速度が低下する可能性があります。

多数のオブジェクトに短時間で連続して書き込んだり、操作対象のオブジェクトが頻繁に切り替わったりした結果、Bulk API ではなく SOAP API​ が使用されることはよくあります。Heroku Connect では、Salesforce に送信される個々のメッセージをできるだけ圧縮しようとします。ただし、Salesforce SOAP API の書き込みルールには従う必要があります。1 つのメッセージに詰め込める変更のチャンク数には制限があります。データを Salesforce に同期するための API 呼び出しは、そのマッピングによってグループ化されます。異なるマッピングに短時間で連続して行われる変更が増えるほど、API 呼び出しの必要回数も増え、結果として同期速度が低下します。多数の同時データベース書き込みによって、この状況がさらに悪化する可能性もあります。

加えて、順序付き書き込みの使用時は、INSERT が失敗すると、訂正アクションが実行されてそのレコードが再送信されるまでの間、後続の更新はすべて失敗します。すべての変更が順番に処理されるため、1 回でも失敗すると解決されるまでキューが停滞します。詳細は、Heroku Connect の書き込みエラー​に関する記事を参照してください。

マージ書き込みアルゴリズム

マージ書き込み​アルゴリズムでは、トリガーログの変更の圧縮と並べ替えを行い、各 SOAP メッセージのレコード数を最大化します。順序付き書き込みでは変更の順序を保持しますが、短時間のうちに多数の変更を連続で行う場合、通常はマージ書き込みのほうがパフォーマンスが高くなります。

たとえば、Account.firstname​ の値を Nathaniel​ に設定し、直後に Nate​ に更新するとします。マージ書き込みでは、Account.firstname = Nathaniel​ の最初の更新は、直後の更新によって上書きされるため、Heroku Connect によって破棄されます。この動作を、Account.firstname​ への両方の変更が処理される順序付き書き込みと比較してみてください。

マージ書き込みアルゴリズムの潜在的な落とし穴

マージ書き込みアルゴリズムでは、更新の順序を入れ替えることで関係の依存関係を解決しようとします。ただし、すべてのケースで正しい順序を選択するとは限りません。循環依存関係によって問題が起きることが知られています。さらに、関係の種類によっては、変更のマージによって関係を確実に確立できなくなる可能性があります。

Apex トリガーとプロセスルールが Salesforce にある場合、このアルゴリズムの使用には注意してください。このアルゴリズムによって一部の変更セットがマージされるため、データベースで行われたすべての変更を認識できることは保証されません。

マージ書き込みアルゴリズムでは、失敗した挿入の再送信を後続の更新時に試みますが、これによって一部のエラー回復ケースが簡略化されます。

マージ書き込みアルゴリズムを使用している場合、Salesforce への一括書き込みを実行できません。Bulk API​ の用途には順序付き書き込みアルゴリズムを使用してください。

必要な Heroku Postgres 接続

Heroku Postgres のプランごとに接続制限​があります。

Heroku Connect では、マッピングあたり 1 つの接続を使用してレコードを読み取ります。マッピングのいずれかが読み取り/書き込みである場合、Salesforce へのすべての書き込みを処理するために 1 つの追加接続を使用します。読み取り/書き込みマッピングの数にかかわらず、書き込みには 1 つの接続のみが使用されます。たとえば、20 のマッピングがあり、そのうち 5 つが読み取り/書き込みである場合、Heroku Connect では Postgres データベースへの 21 の接続を使用します。

オブジェクト関係の処理

オブジェクト間に設定できる関係にはいくつかの種類があります。関係の設定方法については、Heroku Connect でのオブジェクト関係の処理​に関する記事を参照してください。

トリガーログの理解

Heroku Postgres のレコードに加えられた変更はトリガーログに捕捉されます。Heroku Connect では、トリガーログを使用してデータを Salesforce に送信します。詳細は、Heroku Connect のトリガーログ​に関する記事を参照してください。

書き込み同期の問題の防止

短時間のうちに同じフィールドを複数回更新すると、同期の問題が発生する可能性があります。場合によっては、重複したレコードが Heroku Connect によって作成される可能性もあります。これらの問題の防止に関するヒントは、Heroku Connect での重複レコードの問題​および Heroku Connect で短時間に複数回の更新を行った場合の問題​に関する記事を参照してください。

書き込みエラー

計画的なメンテナンス期間などのさまざまな理由で、Salesforce への書き込みが失敗することがあります。Salesforce が利用できない場合、再び利用可能になるまで Connect は書き込みをキューに入れます。それ以外のすべてのケースでは、エラーを解決するためにユーザーの介入が必要です。詳細は、Heroku Connect の書き込みエラー​に関する記事を参照してください。

大量のデータを読み取り/書き込みマッピングにインポートする

いくつかの要件を満たした場合、Connect では、Salesforce Bulk API を使用して Heroku Postgres から Salesforce に変更を書き込みます。Connect でどのような場合に Bulk API を使用するかの詳細は、「SOAP と Bulk API」のセクション​を確認してください。Data Loader​ などのツールを使用して Salesforce に直接、データをインポートすることもできます。

Heroku Connect でのカスタムトリガーの使用

カスタムトリガーは正式にサポートされておらず、Heroku サポートで支援を提供することもできません。ご自身の責任でご利用ください。

Heroku Connect では、Connect テーブルの変更を監視して変更を Salesforce に書き込むために Postgres トリガーを使用します。Connect のテーブルで独自のカスタムトリガーを実装すると、負荷が増加し、Connect で更新の取りこぼしが発生する可能性があります。詳細は、「Heroku Connect でのカスタムトリガーの使用​」を参照してください。

Postgres のデータが Salesforce と一致しない理由は?

いくつかのシナリオでは、Postgres 内のデータが、Salesforce に書き込まれたデータと正確に一致しません。

  • Salesforce は、文字列の先頭と末尾から余計なスペースを削除します。
  • 文字列値が空の場合、Salesforce API はその値を NULL として送信します。したがって、Salesforce から値を再同期すると、そのように処理された形で Postgres に格納されます。この動作は、Heroku Connect の制御が及ばない Salesforce API の一部です。
  • Postgres では、数値は 15 桁の精度を持つ double​ 列として格納されます。この制限を超える Salesforce の値も Heroku Connect 経由で同期されますが、精度は低下します。大きい値では、この差が顕著になる可能性があります。

判明したパフォーマンスの問題の診断

Heroku Connect での同期のパフォーマンスには、多くの要因が影響する可能性があります。Heroku Connect のパフォーマンスの問題の診断​に関する記事の手順に従って、認識された書き込みパフォーマンスの問題を診断してください。

関連カテゴリー

  • Heroku Connect (Salesforce 同期)
Heroku External Objects と Salesforce Connect Heroku Connect のパフォーマンスの最適化

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure
  • .NET

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2025 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices