SalesNowDB Logo
No.266
更新日 2025年08月08日

【2025年】Salesforce APIデータ取得の方法を徹底解説!

メイン画像

「Salesforce APIを使ってデータを取得したいが、どのAPIを選び、どうクエリを書けばいいか分からない…」
「公式ドキュメントを読んでも、自社の業務にどう応用すればいいかイメージが湧かない」
「親子関係のある複雑なデータを、効率的に取得する方法を知りたい」

Salesforce開発に携わるエンジニアであれば、誰もが一度はこのような課題に直面します。Salesforce APIによるデータ取得は、外部システム連携の根幹をなす極めて重要なスキルですが、その多様な仕様や「ガバナ制限」といった独自のお作法は、多くの開発者にとって高いハードルとなっています。

この記事は、単なる公式ドキュメントの要約ではありません。Salesforceからのデータ取得をマスターするための、網羅的かつ実践的な教科書です。

Salesforceのデータ取得、どのAPIを使うべき?

Salesforceには複数のAPIがありますが、データ取得(クエリ)の文脈で主に使われるのは以下の2つです。

基本は「REST API」のクエリリソース

Webの標準技術であるHTTP(S)を利用した、最も汎用的で使いやすいAPIです。モバイルアプリやWebアプリケーションから、リアルタイムに少〜中量のデータを取得する、といった一般的なユースケースのほとんどをカバーできます。

大量データなら「Bulk API 2.0」のクエリジョブ

数百万件といった大量のレコードを、非同期(バックグラウンド処理)で効率的に抽出したい場合に利用します。夜間のデータバックアップや、DWH(データウェアハウス)へのデータ連携などに最適です。

この記事では、最も汎用的な「REST API」に焦点を当てる

本記事では、開発者が最も頻繁に利用し、多くのユースケースに対応できるREST APIのクエリリソース(SOQL)に焦点を当てて、深く解説していきます。

データ取得の鍵「SOQL」とは?

Salesforceからデータを取得するには、SOQL (Salesforce Object Query Language) という、SQLによく似た独自のクエリ言語を使用します。

SOQL (Salesforce Object Query Language) の基本構文

SQLの経験があれば、基本的な構文は非常に直感的です。

項目説明
SELECT取得したい項目(フィールド)を指定します。
FROMどのオブジェクト(データベースのテーブルに相当)から取得するかを指定します。
WHERE取得するレコードの条件を指定します。
ORDER BY取得したレコードの並び順を指定します。
LIMIT取得するレコード数の上限を指定します。

SQL経験者が戸惑うポイント

SQLと似ている一方で、重要な違いもあります。

SELECT * は使えない

パフォーマンスとセキュリティのため、全項目を取得する は利用できません。必ず取得したい項目名を明示的に指定する必要があります。

JOIN の考え方が違う

SQLの JOIN に相当するテーブル結合は、「リレーションクエリ」という、Salesforce独自の親子関係をたどる構文で実現します。これは後ほど詳しく解説します。

【準備編】APIでデータを取得するための最初の3ステップ

SOQLを試す前に、まずAPIにアクセスするための準備が必要です。

Step1:接続アプリケーションの作成と認証情報(コンシューマキー等)の取得

外部システムがSalesforceに接続するための「許可証」を発行します。Salesforceの「設定」から「アプリケーションマネージャ」>「新規接続アプリケーション」を作成し、API連携に必要な「コンシューマ鍵 (Client ID)」と「コンシューマの秘密 (Client Secret)」を取得します。

Step2:OAuth 2.0によるアクセストークンの取得

取得した認証情報を使い、Salesforceの認証サーバーに対してリクエストを送り、「アクセストークン」を取得します。これが、実際のAPIリクエスト時に利用する一時的なパスワードの役割を果たします。

Step3:PostmanやcURLでの接続テスト

アクセストークンが取得できたら、PostmanのようなAPIクライアントツールや、cURLコマンドで簡単なAPIコールを試してみましょう。これは、Salesforceのバージョン情報を取得する最も基本的なリクエストです。

Bash

# YOUR_INSTANCEには自社のSalesforceインスタンス名(例: ap1.salesforce.com)を、
# YOUR_ACCESS_TOKENにはStep2で取得したアクセストークンを入れます。

curl https://YOUR_INSTANCE/services/data/ -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

JSON形式でバージョン情報が返ってくれば、接続は成功です。

コピーしてすぐ使える!目的別SOQLクエリ

ここからがこの記事の核心です。日々の開発業務で頻出する、具体的なビジネスシーンに基づいたSOQLの「レシピ」をご紹介します。

レシピ1:特定の取引先の情報を取得する

SQL

SELECT Id, Name, Phone, Website FROM Account WHERE Name = '株式会社ABC'

レシピ2:今月完了予定の、特定の金額以上の商談をリストアップする

SQL

SELECT Name, Amount, CloseDate FROM Opportunity WHERE CloseDate = THIS_MONTH AND Amount > 1000000

ポイント

THIS_MONTH のような「日付リテラル」を使うと、動的な日付指定ができて便利です。

レシピ3:特定の役職の取引先責任者を検索する

SQL

SELECT Name, Title, Email FROM Contact WHERE Title LIKE '%部長%' ORDER BY CreatedDate DESC LIMIT 100

<リレーションクエリ編:親→子>

シナリオ

一つの「親」レコードに紐づく、複数の「子」レコードをまとめて取得したい。

書き方

「 SELECT ... , (SELECT ... FROM 子リレーション名) FROM 親オブジェクト 」という副問い合わせ形式で記述します。

レシピ4:一つの取引先に紐づく、全ての取引先責任者の名前を取得する

SQL

SELECT Name, (SELECT Name, Email FROM Contacts) FROM Account WHERE Name = '株式会社ABC'

ポイント

子オブジェクト名は複数形の Contacts を使います。これを「子リレーション名」と呼びます。

レシピ5:一つの商談に紐づく、全ての商品(商談商品)を取得する

SQL

SELECT Name, (SELECT PricebookEntry.Product2.Name, UnitPrice, Quantity FROM OpportunityLineItems) FROM Opportunity WHERE Id = '006xxxxxxxxxxxxxxx'

<リレーションクエリ編:子→親>

シナリオ

「子」レコードを取得する際に、その親レコードの情報も同時に取得したい。

書き方

SELECT 親リレーション名.項目名 FROM 子オブジェクト という .(ドット)で繋ぐ形式で記述します。

レシピ6:取引先責任者の情報と、その親である取引先の名前を同時に取得する

SQL

SELECT Name, Email, Account.Name, Account.Phone FROM Contact WHERE Email = 'taro.tanaka@example.com'

ポイント

親オブジェクトへのリレーション項目名 Account を使って、親の項目にアクセスします。

レシピ7:商談の情報と、その所有者(ユーザー)の名前を同時に取得する

SQL

SELECT Name, Amount, Owner.Name FROM Opportunity WHERE Amount > 5000000

【中級者向け】パフォーマンスと保守性を高めるベストプラクティス

動くだけのコードから、質の高いコードへ。シニアデベロッパーが実践する3つのベストプラクティスです。

ガバナ制限を意識したクエリ設計

Salesforceには、リソースの独占を防ぐための「ガバナ制限」が存在します。非効率なクエリは、APIのコール数上限や、クエリの実行時間制限に抵触し、システムの安定稼働を脅かします。

必要な項目だけをSELECTする

SELECT Name, Phone のように、本当に必要な項目だけを指定しましょう。不要な項目を取得するほど、パフォーマンスは低下します。

適切なWHERE句で、対象レコードを可能な限り絞り込む

インデックスが設定された項目(ID、Name、外部IDなど)で絞り込むのが最も効率的です。全件取得してからアプリケーション側で絞り込む、という設計は避けましょう。

forループ内でのSOQL発行を避ける(Apex開発者向け)

Apexでコードを書く際、forループの中でSOQLを実行すると、レコード数分のクエリが発行され、ガバナ制限に即座に到達します。必ずループの前に一括でデータを取得しましょう。

SOSL (Salesforce Object Search Language) との使い分け

SOQLと似た言語にSOSLがあります。

使い分け

項目説明
SOQL単一のオブジェクトから、構造化されたデータを取得する場合。
SOSLGoogle検索のように、複数のオブジェクトを横断して、特定のキーワードを含むレコードを全文検索したい場合。

項目API参照名のハードコーディングを避ける

コード内に WHERE Account_Type__c = '顧客' のように、項目名や値を直接書き込む(ハードコーディング)と、将来その項目名や値が変更された際に、コードの修正が必要になります。カスタム表示ラベルやカスタムメタデータ型などを活用し、これらの値をコードの外で管理するのがベストプラクティスです。

よくある質問 (Q&A)

Q1. 取得できるレコード数に上限はありますか?

A1. あります。REST APIのクエリリソースで一度に取得できる最大レコード数は2,000件です。2,000件を超える結果がある場合は、レスポンスに次の結果セットを取得するためのURL(nextRecordsUrl)が含まれるので、それを使ってページング処理を実装する必要があります。Bulk APIを使えば、より大規模なデータセットを一度のジョブで取得できます。

Q2. 削除済みのレコードも取得できますか?

A2. 可能です。SOQLクエリに ALL ROWS 句を追加することで、ごみ箱にある削除済みのレコードも取得対象に含めることができます。(例: SELECT Name FROM Account WHERE Name = 'ABC' ALL ROWS)

Q3. APIではなく、画面上でSOQLを試せるツールはありますか?

A3. あります。Salesforceの「開発者コンソール」を開き、「Query Editor」タブを使用すれば、直接SOQLを記述して実行結果をすぐに確認できます。API連携を実装する前の、クエリのテストやデバッグに非常に便利です。また、Visual Studio CodeのSalesforce拡張機能にも、SOQLを実行する機能があります。

まとめ

Salesforce APIによるデータ取得は、そのクエリ言語であるSOQLの理解が全てと言っても過言ではありません。

基本的な構文から、Salesforceのデータ構造を活かしたリレーションクエリ、そしてパフォーマンスを考慮したベストプラクティスまでをマスターすることで、あなたはSalesforceに蓄積されたビジネスデータを自在に操り、その価値を最大限に引き出すことができるようになります。

ぜひ、この記事のレシピ集を片手に、あなたの開発プロジェクトを加速させてください。

営業リスト作成にも活用できる企業データベース「SalesNow」

Salesforce上のデータを有効活用するには、外部の企業データベースとの連携も視野に入れると効果的です。

「SalesNow」は全国540万社を網羅した業界最大級の企業データベースで、部署・拠点・人物単位の連絡先情報が掲載されています。営業リストの作成やターゲティング精度の向上にも役立ちます。

CTA