Salesforceからのデータ移行では、「今どんなデータが入っているのか」を確かめる調査の段階から、移行用データの本番抽出まで、SOQLというクエリ言語が繰り返し登場します。
書いたことがない方には難しく見えるかもしれませんが、移行で使う構文は限られています。この記事では、実際にSalesforce→Zoho移行でSOQLを使い込んだ筆者が、移行実務に必要な範囲に絞って解説します。
SOQLとは
SOQL(Salesforce Object Query Language)は、Salesforceのデータを検索・取得するための専用クエリ言語です。「どのオブジェクトから・どの項目を・どんな条件で」取り出すかを、1つの文で指定します。
まずは一番シンプルな例から見てみます。
SELECT Id, Name, Phone
FROM Account
ORDER BY CreatedDate DESC
LIMIT 10
これは「取引先(Account)から、ID・取引先名・電話番号を、作成日の新しい順に10件取り出す」という意味です。上から順に読み下せば意味が取れる、素直な文法です。
移行のどこでSOQLを使うのか
移行プロジェクトの中でSOQLが必要になるのは、主に次の3つの場面です。
- 現状調査でのサンプルデータ抽出 — 項目の定義を眺めるだけでは、実際にどんな値が入っているのか分かりません。実データを数百件取り出して見ることで、「この項目はもう使われていない」といった判断ができます
- 移行対象データの本番抽出 — 移行に必要な項目だけを指定して、CSVファイルとして取り出します
- 再抽出 — データ移行は一度では終わらず、「移行→検証→処理の修正→再移行」を何度も繰り返します。そのたびに同じ条件でデータを取り直すので、SOQLの出番も繰り返しやってきます
基本構文はこの5つだけ
移行の実務でよく使うのは、次の5つの句です。
| 句 | 役割 | 例 |
|---|---|---|
| SELECT | 取り出す項目をAPI名で並べる | SELECT Id, Name |
| FROM | 対象のオブジェクト | FROM Account |
| WHERE | 絞り込み条件 | WHERE keiyaku_status__c = '契約中' |
| ORDER BY | 並び順 | ORDER BY CreatedDate DESC |
| LIMIT | 取得件数の上限 | LIMIT 200 |
項目は「API名」で指定する
SOQLでは、画面に表示されるラベル(「取引先名」など)ではなく、API名で項目を指定します。ここが最初のつまずきポイントです。
- 標準項目は
NameやPhoneのような英語名 - カスタム項目は末尾に
__cが付きます(例:keiyaku_status__c)。日本の組織ではローマ字のAPI名も珍しくありません - 参照項目から親のデータをたどるときは、カスタム項目なら
__cを__rに変えて続けます(例:tantousya__r.Email)。標準の参照項目ならそのまま続けられます(例:Account.Name)
全項目をまとめて見たいときは FIELDS(ALL)
調査の初期段階で「とにかく全項目の値を見たい」ときは、FIELDS(ALL) が使えます。
SELECT FIELDS(ALL)
FROM Account
ORDER BY LastModifiedDate DESC
LIMIT 200
項目名を列挙せずに全項目を取得できる構文です。ただし LIMIT 200 以下の指定が必須という制限があるため、あくまでサンプル確認用と考えてください。
SQLに慣れた人がつまずく3つの違い
SQLの経験がある方ほど、SOQL特有の制限に戸惑います。筆者が実際につまずいた違いは次の3つです。
- JOINが書けない — テーブル同士の結合ができません。オブジェクト単位でデータを取得し、参照項目のID(
OwnerIdなど)を使って後から突き合わせます。親オブジェクトの項目だけなら、前述の__rで1段たどれます - SELECT * がない — 全項目の一括指定は
FIELDS(ALL)だけで、これは200件までの制限付きです。大量データの抽出では、必要な項目をすべて列挙するしかありません。API名の一覧が重要になるのはこのためです - 複雑な加工ができない — 集計や変換を凝ったクエリで済ませることはできません。SOQLはシンプルな抽出に徹し、加工はエクスポート後にスプレッドシートやAIで行う方が速いです
実行方法1 調査段階はブラウザだけで完結する
開発者コンソール(標準機能)
Salesforceの歯車アイコン → 開発者コンソール → 下部の「Query Editor」タブでSOQLを実行できます。インストール不要で、まず試すにはこれで十分です。
Salesforce Inspector Reloaded(筆者のおすすめ)
もう一歩踏み込むなら、Chrome拡張機能の Salesforce Inspector Reloaded が便利です。Salesforceの画面右端に現れるタブから「Data Export」を開くと、SOQLの実行からCSVエクスポートまでブラウザ内で完結します。項目名の入力補完が効くのも助かります。
実行方法2 移行本番の抽出はCLIで一括実行する
調査はブラウザで十分ですが、移行本番の全件抽出にはSalesforce CLI(コマンドで操作する公式ツール)が向いています。大量データ用の仕組み(Bulk API)で安定して抽出でき、同じ抽出を何度でも正確に再実行できるからです。
手順は2つです。まず、移行に必要な項目だけを列挙したSOQLをファイルとして保存します。
-- account.soql(移行に使う項目だけに絞った例)
SELECT
Id,
Name,
Phone,
Website,
NumberOfEmployees,
OwnerId,
CreatedDate,
gyousyu_kubun__c,
keiyaku_status__c,
tantousya__r.Email
FROM Account
WHERE keiyaku_status__c = '契約中'
ORDER BY CreatedDate DESC
次に、sf data export bulk コマンドでこのファイルを実行し、CSVとして出力します。
sf data export bulk \
--query-file account.soql \
--output-file Account.csv \
--result-format csv \
--wait 10
--wait 10 は「10分まで待つ」という意味です。時間内に終わらない場合はジョブIDが表示されてバックグラウンド実行に切り替わり、後から sf data export resume --use-most-recent で結果を受け取れます。数十万件規模でも、抽出を待つ間ほかの作業ができます。
まとめ SOQLは移行後のZohoでも活きる
- SOQLは移行の調査から本番抽出まで、繰り返し使う必須知識です
- 覚える構文はSELECT・FROM・WHERE・ORDER BY・LIMITが中心で、範囲は広くありません
- JOINが書けないなどの制限はありますが、「オブジェクト単位でシンプルに取得し、加工は後で」と割り切れば十分です
- 移行先のZoho CRMにもCOQL(CRM Object Query Language)というよく似たクエリ言語があり、SOQLの感覚がほぼそのまま通用します
移行のためだけの使い捨ての知識にはなりません。移行を機に、ぜひ身につけてください。