Tooling API を活用するための検討

Tooling APIをApexのコードを書いて呼び出すよりはPostmanを使って呼び出した方が簡単です。



# Tooling API を使用するケース

Salesforce メタデータを他のシステムと統合するには、Tooling API を使用します。メタデータ型は sObject として公開されるため、複合型の 1 つのコンポーネントにアクセスできます。この項目レベルのアクセスにより、複合型のメタデータに対する操作時間を短縮できます。Force.com アプリケーション用のカスタム開発ツールを作成することもできます。たとえば、Tooling API を使用して、Apex クラスとトリガーや Visualforce ページとコンポーネントの作業コピーを管理およびリリースすることができます。また、チェックポイントまたはヒープダンプマーカーの設定、匿名 Apex の実行、ログ記録情報およびコードカバー率情報へのアクセスも可能です。

REST と SOAP は両方ともサポートされています。

https://help.salesforce.com/s/articleView?id=sf.integrate_what_is_api.htm&type=5


+ [When to Use Tooling API:v59.0](https://developer.salesforce.com/docs/atlas.en-us.api_tooling.meta/api_tooling/intro_tasks.htm)

**組織のメタデータへのきめ細かいアクセスが必要な場合は、Tooling API を使用します。** 多くのメタデータ型に対する Tooling API の SOQL 機能を使用すると、より小さなメタデータを取得できます。取得を小さくするとパフォーマンスが向上するため、Tooling API は対話型アプリケーションの開発により適しています。

Tooling API では、複合型内の 1 つの要素のみを変更できるため、メタデータ API よりも簡単に使用できます。その他の使用例は次のとおりです。

+ ソース管理の統合
+ 継続的インテグレーション
+ Apex クラスまたはトリガーのデプロイメント

Tooling API を使用して実行できる特定のタスクのいくつかは次のとおりです。

オブジェクトのフィールドに関するメタデータを取得する
[FieldDefinition](https://developer.salesforce.com/docs/atlas.en-us.api_tooling.meta/api_tooling/tooling_api_objects_fielddefinition.htm#topic-title)を使用します。

カスタムまたは標準のオブジェクト プロパティを取得する
[EntityDefinition](https://developer.salesforce.com/docs/atlas.en-us.api_tooling.meta/api_tooling/tooling_api_objects_entitydefinition.htm#topic-title)を使用します。

Apex クラスとトリガ、Visualforce ページとコンポーネントの作業コピーを管理します。
ApexClassMember、ApexTriggerMember、ApexPageMember、ApexComponentMember、およびMetadataContainerを使用します。

静的リソース ファイルの作業コピーを管理します。
[StaticResource](https://developer.salesforce.com/docs/atlas.en-us.api_tooling.meta/api_tooling/tooling_api_objects_staticresource.htm)を使用します。

Apex クラスとトリガ、Visualforce ページとコンポーネントの作業用コピーの更新とエラーを確認します。
[ContainerAsyncRequest](https://developer.salesforce.com/docs/atlas.en-us.api_tooling.meta/api_tooling/tooling_api_objects_containerasyncrequest.htm)

組織に変更をコミットします。
ContainerAsyncRequestを使用します。

ヒープダンプマーカーを設定します。
ApexExecutionOverlayActionを使用する

Apex コードまたは SOQL ステートメントを Apex 実行にオーバーレイします。
ApexExecutionOverlayActionを使用します。

匿名の Apex を実行します。
サンプル コードについては、「SOAP 呼び出しとREST の概要」を参照してください。


自分自身または他のユーザー用のログ ファイルを生成します。
TraceFlagを使用してチェックポイントを設定する


デバッグ ログとヒープ ダンプ ファイルにアクセスします。
ApexLogとApexExecutionOverlayResultを使用します。

カスタムオブジェクトのカスタムフィールドを管理します。
[CustomField](https://developer.salesforce.com/docs/atlas.en-us.api_tooling.meta/api_tooling/tooling_api_objects_customfield.htm) を使用します。


コード カバレッジの結果にアクセスします。
ApexCodeCoverage、ApexOrgwideCoverage、およびApexCodeCoverageAggregateを使用します。

テストを実行し、テスト結果を管理します。
ApexTestQueueItemとApexTestResultを使用します。

検証ルールとワークフロー ルールを管理します。
ValidationRuleとWorkflowRuleを使用します。


# メタデータ API に対するTooling API の利点

[How to use Tooling Api in Salesforce](https://medium.com/@shubham0jangid/how-to-use-tooling-api-in-salesforce-2306933f14a2)

1. **使いやすさ**: Tooling API は開発者向けに設計されており、コードの強調表示やエラー処理などの便利な機能が含まれているため、一般的に使いやすくなっています。
2. **より柔軟**: Tooling API は、個々のフィールドやオブジェクトを含むメタデータ オブジェクトをきめ細かく操作できるため、メタデータ API よりも柔軟性が高くなります。
3. **リアルタイム更新**: Tooling API を使用すると、メタデータ オブジェクトをリアルタイムで更新できます。これは、変更を迅速に行う必要がある状況で役立ちます。
4. **実行時情報へのアクセス**: Tooling API は、デバッグやトラブルシューティングに役立つ、Apex クラスやトリガに関するデータなど、組織に関する実行時情報へのアクセスを提供します。
5. **パフォーマンスの向上**: Tooling API は、Apex コードの取得などの特定の操作ではメタデータ API よりも高速です。これは、この種のタスク用に最適化されているためです。

# Tooling API関連の資料

+ [How to query the 'Metadata' field from 'FieldDefinition' with SOQL?](https://salesforce.stackexchange.com/questions/152575/how-to-query-the-metadata-field-from-fielddefinition-with-soql/159988#159988)