SOQLX Editor
Salesforce の SOQL を、日本語の項目ラベルで書いて実行し、結果を表で確認できる VS Code 拡張機能である。コマンドパレット・出力パネル・設定の画面には「SOQL Editor」と表示する。
特徴
- 日本語のラベルで書ける: オブジェクトと項目を、API 参照名のほか、画面と同じ表示ラベル・項目ラベルで書ける(例:
SELECT 商談名, 取引先.取引先名 FROM 商談)。入力するとオブジェクト名・項目ラベルの候補を表示するため、ラベルを覚えていなくても書ける。項目にマウスを重ねると、API 参照名・型・選択リストの値などを表示する。結果の表の見出しにも、項目ラベルと API 参照名を並べて表示する。
- 1つのファイルに複数の SOQL を書ける: コメントを添えて SOQL を並べ、SOQL ごとに実行できる。よく使う SOQL をファイルにまとめておける。
- 実行する組織をファイルに書く: ファイルの先頭にエイリアス(Salesforce CLI の組織の別名)を書き、その組織で実行する。開発用・検証用など、組織ごとにファイルを分けて使える。SOQL の上の「実行」にエイリアスを表示するため、実行する組織を確かめてから実行できる。
- 全項目を取得できる:
SELECT * FROM 取引先 と書くと、そのオブジェクトの全項目を取得する。
- 結果を表で扱える: 結果はセルの表で表示し、絞り込み、行の選択、コピー(表計算ソフトに貼り付けられる形式)、CSV での保存ができる。Id・参照項目の値を押下すると、そのレコードの Salesforce の画面をブラウザで開ける。
- レコードを削除・更新・復元できる: SQL と同じ書き方の DELETE・UPDATE と、ゴミ箱から戻す UNDELETE を実行できる。実行の前に、対象の件数を示して確認を求める。
必要な環境
- VS Code 1.95 以降。
- Salesforce CLI(sf コマンド)。SOQL を実行する組織に、Salesforce CLI で別名を付けてログインしておく。
次の例は、Sandbox に別名 my-sandbox を付けてログインする。
sf org login web --alias my-sandbox --instance-url https://test.salesforce.com
インストール
VS Code Marketplace に、表示名「SOQLX Editor」(拡張機能の ID: fluxenginejp.fluxenginejp-soql-editor)で公開している。次のどちらかの方法でインストールする。
- VS Code の拡張機能のビュー(Ctrl+Shift+X)で「SOQLX Editor」を検索し、「インストール」を押下する。
- ターミナルで次のコマンドを実行する。
code --install-extension fluxenginejp.fluxenginejp-soql-editor
新しい版は、VS Code の拡張機能の自動更新で更新される。
基本の使い方
- 拡張子
.soqlx のファイルを作成する。
- ファイルの先頭に
// @alias エイリアス を書き、続けて SOQL を書く。
- SOQL の上に表示される「実行(エイリアス)」を押下する。
- 下のパネルのビュー「SOQL 結果」に、結果の表が表示される。
// @alias my-sandbox
// 今年度に完了予定の商談と、その取引先
SELECT 商談名, 取引先.取引先名, 所有者.氏名
FROM 商談
WHERE 完了予定日 >= 2026/04/01
LIMIT 10;
/* 配送先の件数
(COUNT() だけの SOQL は、件数だけを表示する) */
SELECT COUNT() FROM 配送先__c
この例では、組織 my-sandbox に対して、2つの SOQL をそれぞれ実行できる。1つ目は商談を最大10件取得し、商談名・取引先名・所有者の氏名を表示する。2つ目は、カスタムオブジェクト「配送先__c」のレコードの件数を表示する。
実行中は、VS Code の通知に進行状況を表示する。通知の「キャンセル」を押下すると、実行を中止する。
実行する組織の指定
.soqlx のファイルの先頭(最初の SOQL より前)に、行コメントで // @alias エイリアス を1つだけ書く。エイリアスには、Salesforce CLI でログインしたときに付けた組織の別名(またはユーザ名)を書く。そのファイルのすべての文を、指定した組織で実行する。
// @alias it-sandbox
SELECT 取引先名 FROM 取引先 LIMIT 10
- 指定は必須である。意図しない組織で実行しないよう、指定がない場合に既定の組織で補うことはしない。
- 次の場合は実行せず、誤りの内容を表示する。「実行」の表示は「実行(エイリアスの指定なし)」または「実行(エイリアスの指定の誤り)」になる。
// @alias がない。
// @alias が2つ以上ある、または最初の SOQL より後にある。
- エイリアスが空である、または使えない文字を含む(英数字で始まり、英数字と
_ . @ + - だけで書く)。
@alias は大文字・小文字を区別しない。
- 以前の書き方
// @org は使えない。// @org を書いたファイルを実行すると、// @alias への書き換え方を表示する。
SOQL の書き方
コメントと複数の SOQL
// から行の終わりまでと、/* から */ までがコメントである。文字列の値('…')の中の // と /* は、コメントにならない。
- 1つのファイルに複数の SOQL を書ける。SOQL は SELECT で始め、次の SELECT(またはファイルの終わり)の前までを1つの SOQL とする。DELETE・UPDATE・UNDELETE の文も、同じく文の始まりになる。
- 括弧・文字列の値・コメントの中の SELECT は、文の始まりにならない。
- 末尾の
; は省略できる。空行は区切りにならないため、1つの SOQL の途中に空行を書ける。
- SOQL の後に書いたコメントは、次の SOQL の説明として扱い、前の SOQL には含めない。
オブジェクトと項目
- オブジェクト: FROM の後に、表示ラベル(例:
取引先)または API 参照名(例: Account)を書く。同じ表示ラベルのオブジェクトが複数ある場合は、画面を持つオブジェクトを選ぶ。1つに決まらない場合は、API 参照名で書く。
- 項目: 項目ラベル(例:
取引先名)または API 参照名(例: Name)を書く。項目ラベルは、Salesforce CLI でログインしたユーザの言語のラベルである。
- 参照先の項目: 参照項目のラベルと、参照先の項目ラベルを
. でつなぐ(例: 所有者.氏名)。参照項目のラベルの末尾の「 ID」は省略できる。
- 参照項目: 項目ラベルが「取引先 ID」の参照項目(AccountId)は、末尾の「 ID」を省いて
取引先 とも書ける。項目ラベルが「取引先」の項目が別にある場合は、その項目を優先する。
空白や , ( ) = < > ! ' . [ ] を含むラベルは、[取引先 部門] のように角括弧で囲む。ラベルの中の ] は ]] と書く。英字だけのラベルは、角括弧で囲むとラベルとして扱う。角括弧で囲まない英字だけの語は、API 参照名として扱う。
サブクエリ
サブクエリ((SELECT …))の中でも、オブジェクトと項目をラベルで書ける。項目は、そのサブクエリのオブジェクトの項目として扱う。
- WHERE の中のサブクエリ(
WHERE Id IN (SELECT 取引先 FROM 商談)): FROM の後に、オブジェクトの表示ラベルまたは API 参照名を書く。
- 子のリレーションのサブクエリ(
SELECT 取引先名, (SELECT 氏名 FROM 取引先責任者) FROM 取引先): FROM の後に、子のオブジェクトの表示ラベル(例: 取引先責任者)か、親から見たリレーションの名前(例: Contacts)を書く。表示ラベルで書いた場合は、実行するときにリレーションの名前に変える。親から同じ子のオブジェクトへのリレーションが2つ以上ある場合は、どれか決められないため、リレーションの名前で書く。
入力補完
オブジェクト名と項目ラベルを入力すると、候補を表示する。Ctrl+Space でも表示できる。
- FROM(DELETE FROM・UNDELETE FROM を含む)と UPDATE の後は、オブジェクトの候補を表示する。子のリレーションのサブクエリの FROM の後は、親のオブジェクトの子のリレーション(子のオブジェクトの表示ラベルとリレーションの名前)の候補を表示する。
- SELECT・WHERE・ORDER BY・GROUP BY・SET などの項目の位置は、その文のオブジェクト(FROM または UPDATE の後に書いたもの)の項目の候補を表示する。サブクエリの中では、そのサブクエリのオブジェクトの項目の候補を表示する。
- 参照項目の後に
. を入力すると(例: 取引先.)、参照先の項目の候補を表示する。
- 選択リストの項目と比べる値の
' の後(例: WHERE フェーズ = '、IN ('Prospecting', '、UPDATE の SET フェーズ = ')は、その項目の選択リストの値の候補を表示する。=・!=・<>・IN・NOT IN・INCLUDES・EXCLUDES の値が対象である。候補には値と表示ラベルを並べ、どちらを入力しても絞り込める。候補を選ぶと値を入れる。
オブジェクトの候補は、画面を持つオブジェクト(履歴・共有・フィードなど、画面を持たないものを除く)と、開いている .soqlx のファイルに書いたオブジェクトである。候補にないオブジェクトも、書けば実行できる。候補は、開いているファイルに書いたオブジェクト、カスタムオブジェクトと主要な標準オブジェクト(取引先・取引先責任者・商談など)、その他の順に並べる。項目の候補は、カスタム項目と名前・作成日などの項目を先に、システムの項目(SystemModstamp・IsDeleted など)を後ろに並べる。
選択リストの値の候補は、組織の選択リストの有効な値である(Salesforce の画面と同じ順)。選択リストでない項目の値には、候補を表示しない。
オブジェクトと項目の候補には、表示ラベル・項目ラベルと API 参照名(項目は型も)を並べて表示する。入力した文字を、表示ラベル・項目ラベルか API 参照名に続けて含む候補に絞り込み(大文字・小文字は区別しない)、入力した文字で始まる候補を先に並べる。候補を選ぶと表示ラベル・項目ラベルを入れる。角括弧で囲む必要があるラベルは、角括弧で囲んで入れる。参照項目は、末尾の「 ID」を除いたラベル(例: 取引先)で入れる。
候補は、ファイルの先頭の // @alias の組織から作る。次の場合は候補を表示しない。
// @alias がない、または誤っている。
- 項目の位置で、その文(サブクエリ)にオブジェクトをまだ書いていない(先に FROM のオブジェクトを書くと、項目の候補を表示する)。
- ファイルを開いた直後などで、組織のオブジェクトと項目の情報を読み込んでいる間。
書いている途中の誤りの表示
次の誤りは、実行しなくても、書いている途中に該当の箇所へ赤の波線を付けて表示する。マウスを重ねると説明を表示し、VS Code の「問題」パネルにも一覧で表示する。入力が止まったときと、ファイルを開いたときに確かめる。
- エイリアスの指定の誤り(「実行する組織の指定」を参照)。
- 閉じていない角括弧。
- ない、または1つに決まらないオブジェクトと項目ラベル(参照先の項目、サブクエリの中を含む)。子のリレーションのサブクエリの FROM に書いた、ない・1つに決まらない子のリレーション。
- DELETE・UPDATE・UNDELETE の書き方の誤り(WHERE がない、SET の値が使えないなど)。
組織のオブジェクトと項目の情報を読み込んでいる間は、オブジェクトと項目ラベルの誤りを表示しない。Salesforce が返す SOQL の誤り(文法の誤りなど)は、実行したときに表示する。
項目の情報の表示
項目とオブジェクト名にマウスを重ねると、その情報を表示する。日本語のラベルで書いた項目が、どの項目かを確かめられる。
- 項目: 項目ラベルと API 参照名、型(例:
テキスト(255)・通貨(16, 2))、必須か、参照項目の参照先、選択リストの値(先頭の 10 件)。ラベル・API 参照名のどちらで書いた項目も、参照先の各段(例: 取引先.取引先名 の 取引先 と 取引先名)も、サブクエリの中の項目も表示する。
- オブジェクト名(FROM・UPDATE などの後): 表示ラベルと API 参照名。子のリレーションのサブクエリの FROM は、リレーションの名前と子のオブジェクト。
キーワード・値・コメント、組織にない名前では表示しない。組織のオブジェクトと項目の情報を読み込んでいる間も表示しない(読み込みが済んでから、もう一度マウスを重ねると表示する)。
表示が煩わしい場合は、設定 soqlEditor.showHover を false にすると表示しない。表示が出るまでの時間は、VS Code の設定 editor.hover.delay(ミリ秒)で変えられる。.soqlx のファイルだけを変える場合は、設定(JSON)に次のように書く。
"[soql-editor]": {
"editor.hover.delay": 1000
}
全項目の取得(SELECT *)
SELECT * FROM 取引先 のように、SELECT の項目を * だけにすると、そのオブジェクトの全項目を取得する。WHERE・ORDER BY・LIMIT などは続けて書ける。
- 参照項目は、参照先の名前(例:
Owner.Name)も取得する。参照先のオブジェクトが1つの参照項目は、そのオブジェクトに Name 項目がある場合だけ取得する。参照先のオブジェクトが複数ある参照項目(ToDo の「関連先」など)は、常に取得する。リレーション名を持たない参照項目では取得しない。
- 住所・位置情報の複合項目(構成要素の項目は取得する)と、バイナリの項目(添付ファイルの本文など)は取得しない。
* と項目を混ぜる書き方(SELECT *, Name)、参照先の *、サブクエリの中の * は使えない。
日付
日付の項目の値は、2026/04/01 のように YYYY/MM/DD で書ける。SOQL の書式 2026-04-01 でも書ける。日時の項目の値は、2026-04-01T00:00:00Z のように SOQL の書式で書く。
結果の確認
結果は、下のパネル(出力パネルの隣)のビュー「SOQL 結果」に表示する。
結果のタブ
- オブジェクトごとにタブを分ける。タブの名前は、オブジェクトの表示ラベル(例:
取引先)である。設定 soqlEditor.showApiNameInTab を true にすると、タブの名前を API 参照名(例: Account)にする。
- 同じオブジェクトの SOQL を実行すると、どのファイルから実行しても、そのオブジェクトのタブの内容を置き換える。
- DELETE・UPDATE・UNDELETE の結果は、
取引先(削除) 取引先(更新) 取引先(復元) のタブに表示する。
- タブの名前にマウスを重ねると、実行した SOQL(コメントを取り除き、ラベルを API 参照名に変えたもの)を表示する。
- タブの「×」を押下すると、タブを閉じる。
表の内容
- タブの上部に、エイリアス(組織の別名)、件数、実行にかかった時間、オブジェクトを表示する(例:
エイリアス: it-sandbox 件数: 10 件(120 ms) オブジェクト: Account)。オブジェクトは、タブの名前が表示ラベルの場合は API 参照名、タブの名前が API 参照名の場合は表示ラベルで表示する。
- 表の見出しは2行で、1行目は項目ラベル、2行目は API 参照名である。見出しは、表を縦にスクロールしても固定して表示する。
- 参照先の項目の1行目は、
所有者.氏名 のように表示する。参照項目の1行目は、末尾の「 ID」を除いたラベル(例: 取引先)、Id 項目の1行目は ID である。
- 集計の SOQL(集計関数・GROUP BY)の別名と
expr0 は、その名前のまま見出しにする。子のリレーションの列の1行目は、子のオブジェクトの表示ラベル(例: 取引先責任者)、2行目はリレーションの名前(例: Contacts)である。
- 値がない項目は空欄で表示する。子のリレーションのサブクエリの結果は、件数(例:
3件)を表示する。
- 子のリレーションの件数のセルを押下すると、表の下に子のレコードの表を表示する(もう一度押下するか「閉じる」を押下すると閉じる)。子の表の見出しも2行(項目ラベルと API 参照名)である。子の表の「コピー」「CSV で保存」は、子のレコードをコピー・保存する。親の表のコピー・CSV では、子のリレーションの列は件数のままである。
- Id 項目と参照項目(例:
OwnerId・AccountId・Owner.Id)の値は、下線付きで表示する。値を押下すると、そのレコードの Salesforce の画面を、結果を実行したエイリアスの組織でブラウザに開く。Salesforce CLI でログインした状態で開くため、ブラウザで改めてログインしなくてよい。子のリレーションの表の値も同じく開ける。値以外のところを押下した場合は、行を選択する。
- 数値は、Salesforce が返した桁のまま表示する。
- 1回の実行で表示するのは、設定
soqlEditor.maxRows(初期値 2000)の件数までである。条件に合うレコードがそれより多い場合は、先頭の件数だけを表示し、そのことを示す。
絞り込み・コピー・CSV での保存
- 絞り込み: 入力欄に文字を入力すると、その文字を含む行だけを表示する。すべての列が対象で、大文字・小文字を区別しない。
- 行の選択: 行を押下すると選択する。Ctrl キーを押下したまま行を押下すると、その行を選択に加える(選択済みの行は外す)。Shift キーを押下したまま行を押下すると、範囲で選択する。
- コピー: 「コピー」を押下する(または表で Ctrl+C キーを押下する)と、選択した行を、見出しの2行付きのタブ区切りの形式でクリップボードにコピーする。表計算ソフトに貼り付けられる。行を選択していない場合は、表示しているすべての行をコピーする。見出しや値の文字をマウスで選択している場合の Ctrl+C キーは、選択した文字だけをコピーする。
- CSV で保存: 「CSV で保存」を押下して保存先を選ぶと、選択した行(選択していなければ表示しているすべての行)を、見出しの2行付きの CSV(UTF-8、BOM 付き)で保存する。
誤りの表示
ラベルが見つからない、角括弧が閉じていないなどの書き方の誤りと、Salesforce が返した SOQL の誤り(誤りの位置を含む)は、その SOQL のタブに表示する。オブジェクトが分からない誤りは、書いたオブジェクト名のタブ(名前も読み取れない場合は 誤り のタブ)に表示する。
実行の記録(実行した SOQL、件数、誤り)は、出力パネルの「SOQL Editor」で確認できる。
レコードの削除、更新、復元
SQL と同じ書き方の DELETE・UPDATE で、レコードを削除・更新できる。UNDELETE で、ゴミ箱にあるレコードを元に戻せる。開発用の組織で使うことを想定した機能である。
// 名前が「テスト」で始まる取引先を削除する(ゴミ箱に移る)
DELETE FROM 取引先 WHERE 取引先名 LIKE 'テスト%'
// 項目を更新する
UPDATE 取引先 SET [取引先 電話] = '03-0000-0000', 従業員数 = 10 WHERE 取引先名 = 'テスト 1'
// ゴミ箱にある取引先を元に戻す
UNDELETE FROM 取引先 WHERE 取引先名 LIKE 'テスト%'
書き方
次の表は、文の種類ごとの書き方を整理したものである。
| 文 |
書き方 |
| DELETE |
DELETE FROM オブジェクト WHERE 条件 |
| UPDATE |
UPDATE オブジェクト SET 項目 = 値, 項目 = 値 WHERE 条件 |
| UNDELETE |
UNDELETE FROM オブジェクト WHERE 条件 |
- キーワードは大文字・小文字を区別しない。オブジェクトと項目は、SOQL と同じくラベルまたは API 参照名で書ける。コメントも書ける。
- WHERE は必須である。すべてのレコードを対象にする場合も、
WHERE Id != null のように条件を書く。条件は SOQL の WHERE と同じ書き方で、YYYY/MM/DD の日付も使える。ORDER BY・LIMIT などは書けない。
- SET の値に使えるのは、文字列(
'…')、数値、日付(2026-04-01 または 2026/04/01)、日時(2026-04-01T09:00:00Z)、true、false、null である。式・関数・サブクエリ・ほかの項目の値は使えない。
- 参照先の項目(
所有者.氏名 など)と Id は、更新できない。
実行前の確認
- 「実行」を押下すると、対象のレコードを数え、エイリアス・オブジェクト・操作・件数を確認の画面に表示する。「削除する」「更新する」「復元する」を押下した場合だけ実行する。
- 対象が0件の場合は、確認の画面を表示せず、「対象のレコードはありません」と表示する。
- 対象が設定
soqlEditor.maxWriteRows(初期値 200)の件数を超える場合は、レコードを変えずにそのことを表示する。
- 本番の組織(Sandbox でも Developer Edition でもない組織)では、設定
soqlEditor.allowWriteInProduction を true にした場合だけ実行する。
実行の結果
- その文のタブに、対象・成功・失敗の件数と、レコードごとの結果(Id、成功または失敗、失敗の理由)を表示する。
- 入力規則などで失敗したレコードがあっても、ほかのレコードは変更する。
- トリガ・フロー・入力規則は、画面でレコードを変更した場合と同じく動作する。
- 実行中に通知の「キャンセル」を押下すると、途中で止める。止めるまでに変更したレコードは元に戻らない。
- DELETE で削除したレコードは、ゴミ箱にある間は UNDELETE で元に戻せる。UPDATE の前の値には戻せない。
メタデータの再取得
組織でオブジェクト・項目を追加した場合や、ラベルを変更した場合は、コマンドパレットで「SOQL Editor: メタデータを再取得」を実行する。実行した後の SOQL から、変更後のオブジェクト・項目・ラベルで書ける。
設定
次の表は、本ツールの設定と、その内容を整理したものである。実行する組織は設定ではなく、ファイルに書く(実行する組織の指定を参照)。
| 設定 |
内容 |
soqlEditor.maxRows |
1回の実行で取得・表示するレコードの上限。初期値は 2000 で、1 以上を指定する。 |
soqlEditor.showApiNameInTab |
結果のタブの名前を、オブジェクトの API 参照名にするか。初期値は false で、タブの名前は表示ラベル(例: 取引先)、タブの上部のオブジェクトは API 参照名になる。true の場合は、タブの名前が API 参照名(例: Account)、タブの上部のオブジェクトが表示ラベルになる。 |
soqlEditor.showHover |
項目・オブジェクト名にマウスを重ねたときに、その情報を表示するか(項目の情報の表示を参照)。初期値は true。 |
soqlEditor.maxWriteRows |
DELETE・UPDATE・UNDELETE の1つの文で変更するレコードの上限。初期値は 200 で、1 以上を指定する。 |
soqlEditor.allowWriteInProduction |
本番の組織でも DELETE・UPDATE・UNDELETE を実行するか。初期値は false で、本番の組織では実行しない。SELECT は、この設定にかかわらず実行できる。 |
制約と注意
- 組織のデータを変更するのは、DELETE・UPDATE・UNDELETE の文を、確認の画面で実行した場合だけである。SOQL の実行は読み取りだけである。
- 実行する SOQL は、Salesforce の上限により 100,000 文字までである。ラベルを API 参照名に変えた後、
* を全項目に置き換えた後の長さが対象になる。
- 「コピー」と「CSV で保存」は、値を変えずに出力する。
=・+・-・@ などで始まる値は、表計算ソフトで開く・貼り付けると、数式として評価されることがある。組織の値が信頼できない場合は、表計算ソフトの側で列を文字列として読み込む。
- 公式の Salesforce Extension Pack が使う拡張子
.soql のファイルは対象にしない。.soqlx のファイルに書く。
ライセンス
MIT