APIって何?
APIとは「Application Programming Interface」の略です。簡単にいうと、ソフトウエア同士で機能を共有するときに使用するプログラムの命令です。
例えば、ソフトウエアAがデータ検索機能を持っていたとして、ソフトウエアBがその検索機能を使用したい場合、ソフトウエアAが公開している「データ検索API」をソフトウエアBが使用することでデータ検索が可能となります。
データ検索に限らず、いろいろな機能のAPIを公開しておけば、外部のソフトウエアからそれらを使用することが可能です。ただし、内部のプログラムコードまで公開しているわけではないので、外部のソフトウエアは、あらかじめAPIの仕様や使い方を理解しておく必要があります。
SalesforceにはさまざまなAPIが公開されているので、外部のソフトウエアからSalesforceの機能を使用することができます。
Tooling APIとは?
SalesforceのAPIの一つであるTooling APIは、ApexやVisualforceの開発者向けのAPIです。カスタム開発ツールを作成するための機能が提供されています。
Tooling APIでは、SOAPインターフェースとRESTインターフェースを使用することができ、例えば、デバッグログやヒープダンプ(メモリの状態)の参照するなどの機能を持ったカスタム開発ツールを作成することができます。
ちなみに、Apexとはプログラミング言語です。VisualforceとはSalesforceのカスタム開発ツールの作成を支援するWeb開発フレームワークです。
Tooling APIでは何ができるのか?
Tooling APIでは、ApexやVisualforceの管理やApexの匿名実行、デバッグログへのアクセス、ヒープダンプの参照などを行うことができます。
具体的には以下のようなことが可能です。
1)ApexクラスやVisualforceページの作業コピーの管理
2)ApexクラスやVisualforceページの作業コピーの更新チェックやエラーチェック
3)ApexクラスやVisualforceページの作業コピーの変更をコミット
4)ApexコードやSOQLステートメントをフロート表示
5)Apexの匿名実行
6)静的リソースファイルの作業コピーの管理
7)カスタムオブジェクトのカスタム項目の管理
8)自分や他ユーザーのログファイルの生成
9)ヒープダンプマーカーの設定
10)デバッグログやヒープダンプへのアクセス
11)コードカバー率結果へのアクセス
Tooling APIのサンプルプログラム
Tooling APIのSOAPインターフェースを使用して、Apexクラスをプログラムから生成するJavaサンプルプログラムを紹介します。
Apexクラスの生成に成功すると”Successfully created Class:”の後にIDを表示し、Apexクラスの生成に失敗すると”Error: could not create Class”の後にエラーメッセージを表示するようになっています。
// ————————————————-
// Apexクラスを生成するコード
// ————————————————-
String classBody = “public class Messages {\n”
+ “public string SayHello() {\n”
+ ” return ‘Hello’;\n” + “}\n”
+ “}”;
// ————————————————-
// Apexクラスのインスタンス化とデータセット
// ————————————————-
ApexClass apexClass = new ApexClass();
apexClass.Body = classBody;
ApexClass[] classes = { apexClass };
// ————————————————-
// Apexクラスの生成
// ————————————————-
SaveResult[] saveResults = sforce.create(classes);
for( int i = 0; i < saveResults.Length; i++ ){
// 生成に成功
if( saveResults[i].success ){
Console.WriteLine(“Successfully created Class: ” +
saveResults[i].id);
}
// 生成に失敗
else{
Console.WriteLine(“Error: could not create Class “);
Console.WriteLine(” The error reported was: ” +
saveResults[i].errors[0].message + “\n”);
}
}
Tooling APIが使用できるエディション
Tooling APIが使用できるのは、Enterprise Edition、Performance Edition、Unlimited Edition、Developer Editionです。
Enterprise Editionは、CRM全機能や高度なカスタマイズが可能で、大規模で複雑なシステムの設計が行えます。Performance Editionは、ソーシャルやモバイル分野で営業サービスの拡大を目的とした設計が行えます。
Unlimited Editionは、Lightningプラットフォームを通じてあらゆる情報をオンデマンドで管理し共有するなどの設計が行えます。Developer Edition は、LightningプラットフォームとAPIを使用でき、Salesforceの拡張や他のソフトとの統合を設計することができます。
Tooling APIのSOQL機能
Salesforceのメタデータへのアクセスが必要な場合は、Tooling APIのSOQL機能を使用します。
Tooling APIのSOQL機能を使用すると、ソース管理の統合や、継続的なインテグレーション、Apexクラスまたはトリガーを利用可能な状態にすることなどが可能です。
以下にTooling APIのSOQL機能の主なものを紹介します。
メタデータやオブジェクトプロパティの取得
オブジェクトのフィールドに関するメタデータを取得する場合や、オブジェクトプロパティを取得する場合は、FieldDefinitionを使用します。
FieldDefinitionは、標準フィールドやカスタムフィールドにおいて、フィールドメタデータに行ベースでアクセスすることが可能です。
ApexクラスやVisualforceページの作業コピーの管理
Apexクラスとトリガーや、Visualforceページとコンポーネント作業コピーを管理する場合は、ApexClassMember、ApexTriggerMember、ApexPageMember、ApexComponentMember、MetadataContainerを使用します。
ApexClassMemberは、Apexクラスの作業コピーを管理します。ApexTriggerMemberは、Apexトリガーの作業コピーを管理します。ApexPageMemberは、Visualforceページの作業コピーを管理します。ApexComponentMemberは、Visualforceコンポーネントの作業コピーを管理します。
MetadataContainerは、上記の4つのオブジェクトの作業コピーを管理します。
静的リソースファイルの作業コピーの管理
静的リソースファイルの作業コピーを管理する場合は、StaticResourceを使用します。
StaticResourceは、編集または保存するための静的リソースファイルの作業コピーを管理します。静的リソースを使用すれば、スタイルシート、JavaScript、画像、各ファイルなど、Visualforceページで参照できるコンテンツをアップロードすることができます。
作業コピー更新や変更コミット
ApexクラスとトリガーやVisualforceページとコンポーネントの作業コピー更新、エラーの確認、変更をコミットする場合は、ContainerAsyncRequestを使用します。
ContainerAsyncRequestは、MetadataContainerオブジェクトをコンパイルして、使用可能状態にします。
ヒープダンプマーカーの設定やコードのオーバーレイ
ヒープダンプマーカーを設定したり、Apex実行時のApexコードやSOQLステートメントをオーバーレイする場合は、ApexExecutionOverlayActionを使用します。
ApexExecutionOverlayActionは、クラスまたはトリガーの特定のコード行で実行するApexコードやSOQLクエリを指定しオーバーレイします。また、オプション機能としてヒープダンプを生成することも可能です。
ログファイルの生成
自分用または他のユーザー用のログファイルを生成する場合は、TraceFlagでチェックポイントを設定します。
TraceFlagは、指定したログレベルでトレースするApexデバッグログの記録を開始します。
ヒープダンプファイルへのアクセス
デバッグログとヒープダンプファイルにアクセスする場合は、ApexLog、ApexExecutionOverlayResultを使用します。
ApexLogは、デバッグログを取得できます。ApexExecutionOverlayResultは、ApexExecutionOverlayActionで定義されたApexコードやSOQLクエリからのヒープダンプファイルを取得できます。
カスタムフィールドの管理
カスタムオブジェクトのカスタムフィールドを管理する場合は、CustomFieldを使用します。
CustomFieldは、固有データを保管するカスタムオブジェクトのカスタムフィールドを取得できます。SalesforceメタデータAPIのCustomFieldオブジェクトとフィールドへのアクセスも可能です。
アクセスコードカバレッジ結果
アクセスコードカバレッジテストの結果を取得する場合は、ApexCodeCoverage、ApexOrgWideCoverage、ApexCodeCoverageAggregateを使用します。
ApexCodeCoverageは、クラスやトリガーのコードカバレッジテストの結果を取得できます。ApexOrgWideCoverageは、組織全体のコードカバレッジテストの結果を取得できます。
ApexCodeCoverageAggregateは、クラスやトリガーの集約コードカバレッジテストの結果を取得できます。
テスト結果の管理
テストの実行やテスト結果を管理する場合は、ApexTestQueueItem、ApexTestResultを使用します。
ApexTestQueueItemは、Apexジョブキュー内の単一のApexクラスでテストを実行します。ApexTestResultは、テストメソッドの実行結果を取得できます。
検証ルールとワークフロールールの管理
検証ルールとワークフロールールを管理する場合は、ValidationRule、WorkflowRuleを使用します。
ValidationRuleは、条件一致時の式を指定する検証ルールや、ワークフロールールを取得できます。
WorkflowRuleは、指定基準を満たした特定のワークフローアクションを実行するために使用するワークフロールールを取得できます。また、SalesforceメタデータAPIのWorkflowRuleオブジェクトへアクセスすることも可能です。
Salesforce Tooling APIを活用しよう!
今回は、SalesforceのTooling APIの概要や使い方、サンプルプログラムを紹介しました。
Tooling APIを使用すると次のようなことが可能になります。
1)既存 Force.com ツールに機能を追加
2)Force.com 開発用の動的モジュールを、エンタープライズインテグレーションツールに追加
3)特定のアプリケーションやサービスの開発ツールを作成
ぜひ活用できるようにしておきましょう。]]>