オリジナル記事

Learn MOAR with Spring ’21: New SOQL FIELDS() Function is GA

使い慣れた生産性の高い方法で、データの全体像を把握

多くの人にとって、SQLのセマンティクスとデータ探索は密接に関係しています。データベースを直接操作した経験がある人にも、Salesforce独自のクエリ言語であるSOQLを使用して専門知識を身につけた人にも、記述したクエリでデータを取得する機能は大いに役立ちます。そのため、Salesforceオブジェクト内のデータを探索する新しいシンプルな方法として、SOQL FIELDS()関数をご紹介します。

FIELDS()関数を使用すると、SOQLステートメントの作成者が、レコードの結果セットで自動的に返される事前定義された列グループを指定できます。FIELDS()は、既存のプラットフォームの構造を利用する方法を提供します。これにより、統合においてデータ管理とビジネスロジックを切り離し、組織のオブジェクトモデルの管理に伴う労力を軽減することができます。

これにより、クエリを記述する人は誰でも、「SELECT FIELDS(ALL)」句を使うだけで、標準項目やカスタム項目を問わず、オブジェクト上のすべての項目を照会できます。「SELECT *」を使用してSQL言語でテーブルのすべての列から簡単にデータを取得できるように、SOQLのFIELDS()関数によって、開発者、管理者、好奇心旺盛なエンドユーザなど誰もが、スケーラブルでセキュアな方法でオブジェクトのすべての項目を探索できます。



少ないコード数で多数のデータを照会

従来、オブジェクトの項目リストによるデータの照会には、やや複雑なプロセスを必要としました。結果に多数の項目が必要な場合は、詳細なクエリを記述する必要があります。また、オブジェクトのすべての項目を把握していない場合は、まずそのオブジェクトの全体像を把握してから、クエリを記述する必要があります。SOQL FIELDS()を使えば、データを詳しく確認して有益なインサイトを得たり、オブジェクト上のデータの内容を調べたりすることが簡単にできるようになりました。

たとえば、電気自動車を製造する会社で働いており、同僚がSalesforceで作成したカスタムの「Vehicles__c」オブジェクトからデータをプルする必要があるとします。SOQL FIELDS()が登場する前は、同僚にオブジェクトの全体像を確認したり、クエリを記述する前にオブジェクトマネージャーで項目を調べたり、describe()コールを実行したりする必要があったかもしれません。もし、そのオブジェクトのほとんどすべての項目からデータを取得したいとしたら、かなり長いSOQLクエリを記述しなければならないでしょう。今はもっと簡単な方法があります。以下のようなシンプルな構成のAPIコールだけで済むのです。

sfdx force:data:soql:query -q “SELECT FIELDS(ALL) FROM Vehicle__c LIMIT 5” -u DevHub

これでカスタムの「Vehicles」オブジェクト上のすべての項目を照会できます。同僚に面倒をかけたり、オブジェクトマネージャーをスクロールしたりする必要はありません。SOQL FIELDS()関数を使えば、すぐに探索できます。また、以下のように標準オブジェクトのクエリにFIELDS()関数を混ぜるなど、より正確な処理を行いたい場合にも柔軟に対応できます。

SELECT Name, Id, FIELDS(CUSTOM) FROM Account LIMIT 25

このクエリを使用すると、Accountオブジェクトのすべてのカスタム項目を、NameやIdなどの標準項目と一緒にプルできます。同様に、次のような方法もあります。

SELECT Subscription__c, FIELDS(STANDARD) FROM Account

Accountオブジェクトのカスタム「Subscription」項目と、すべての標準項目からデータを簡単に取得できます。いずれにしても、データをより明確にするために記述するコードの量が少なくなります。

このように、FIELDS()はデータ探索のユースケースを簡素化できる便利な機能です。この機能は、開発者が記述するコードと実際のユースケースの間の疎結合を促進する一方で、ソフトウェアの保守性を向上させることで、プラットフォームの統合を加速することもできます。たとえば、常に変化する動的なオブジェクトモデルのデータをレンダリングする場合、基になるクエリが繰り返し実行されたり、項目が残らないようdescribeコールを実行するためにサーバーとの余分なラウンドトリップが発生したりします。FIELDS()関数は制限列グループと無制限列グループを認識し、パフォーマンスを保護します。適切に設計されたFIELDS()を実装することで、データの取得に必要なリソースと、結果の処理や加工に関わるリソースが最適化され、特定のユースケースを最大限にサポートできます。

SOQLクエリをシンプルに、スケーラブルに、セキュアにするには

FIELDS()関数は、SOQL言語の最新の拡張機能であり、見逃していた可能性のある他の最近の変更を補完するものです。こうした機能により、Salesforceデータへのアクセスがこれまで以上に簡単かつ強力になります。まず、SOQLの文字数制限が最近2万5,000文字から10万文字に変更され、クエリ作成者がより充実したクエリ操作を行えるようになりました。前年のTDX20 APIセッションでお話ししたように、新しい文字数制限とFIELDS()により、Salesforce Platform上のデータを操作する際の不便さを軽減するという弊社の取り組みをさらに強化するとともに、より少ないコード、コール、文字数でより多くのことができるように努めています。

また、現在ベータ版として提供されている新しいVS CodeプラグインであるSOQL Query Builderを導入し、VS Codeから簡単にクエリを作成、実行できるようになりました。開発者にとっては、作業中のツールやコンテキストの切り替えが少なくなり、多くの管理者やビジネスユーザにとっては、Salesforceデータを直感的に操作しようとするうえでの障壁が低くなります。SOQL Query Builderはベータ版であり、ユーザの皆様がより簡単にデータを扱えるよう模索を始めたばかりですが、皆様のご意見をお待ちしております。また、今後の進展にもご注目ください。

最後に重要なこととして、FIELDS()関数は拡張性と安全性に優れています。前述の「SELECT *」と性質は似ていますが、クエリAPI操作内での項目レベルのセキュリティの適用など、Salesforceのセキュリティ標準に準拠していることがわかります。これにより、ユーザはデータアクセス権限に則った結果のみを表示できます。FIELDS()は、将来的に新しいユースケースをサポートできるように拡張可能なクエリ操作として設計されています。もし、プラットフォーム上で定義済みの項目グループ(あるいはセット)をさらに直感的に活用する方法をご希望であれば、このコーナーにご注目いただき、フィードバックをお寄せください。

SOQL FIELDS()関数は、Spring ’21リリース時点で一般提供されています。具体的な使用方法やパフォーマンスに関する注意点については、FIELDS()のトピック(『SOQL および SOSL リファレンス』)をご覧ください。

著者紹介

Kris Harrisonは、SalesforceのAPI、SOQL、および外部サービス担当プロダクト管理ディレクターです。




Spring ’21リリースの魅力をハッシュタグ#LearnMOARを付けて投稿してください。また、2020年1月29日に開催されるRelease Readiness Liveへの参加申し込みもお忘れなく。

Get the latest Salesforce Developer blog posts and podcast episodes via Slack or RSS.

(英語のみです)

Add to Slack Subscribe to RSS