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つの場面です。

  1. 現状調査でのサンプルデータ抽出 — 項目の定義を眺めるだけでは、実際にどんな値が入っているのか分かりません。実データを数百件取り出して見ることで、「この項目はもう使われていない」といった判断ができます
  2. 移行対象データの本番抽出 — 移行に必要な項目だけを指定して、CSVファイルとして取り出します
  3. 再抽出 — データ移行は一度では終わらず、「移行→検証→処理の修正→再移行」を何度も繰り返します。そのたびに同じ条件でデータを取り直すので、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名で項目を指定します。ここが最初のつまずきポイントです。

  • 標準項目NamePhone のような英語名
  • カスタム項目は末尾に __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つです。

  1. JOINが書けない — テーブル同士の結合ができません。オブジェクト単位でデータを取得し、参照項目のID(OwnerId など)を使って後から突き合わせます。親オブジェクトの項目だけなら、前述の __r で1段たどれます
  2. SELECT * がない — 全項目の一括指定は FIELDS(ALL) だけで、これは200件までの制限付きです。大量データの抽出では、必要な項目をすべて列挙するしかありません。API名の一覧が重要になるのはこのためです
  3. 複雑な加工ができない — 集計や変換を凝ったクエリで済ませることはできません。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の感覚がほぼそのまま通用します

移行のためだけの使い捨ての知識にはなりません。移行を機に、ぜひ身につけてください。